更新時間:2021-01-15 17:29:16 來源:動力節點 瀏覽1334次
說到MySQL權限管理,我們先要明確權限管理的概念:權限管理,一般指根據系統設置的安全規則或者安全策略,用戶可以訪問而且只能訪問自己被授權的資源,不多不少。權限管理幾乎出現在任何系統里面,只要有用戶和密碼的系統。
賬戶權限信息被存儲在MySQL數據庫的幾張權限表中,在MySQL啟動時,服務器將這些數據庫表中權限信息的內容讀入內存。其中GRANT和REVOKE語句所涉及的常用權限大致如下這些:CREATE、DROP、SELECT、INSERT、UPDATE、DELETE、INDEX、ALTER、CREATE、ROUTINE、FILE等,還有一個特殊的proxy權限,是用來賦予某個用戶具有給他人賦予權限的權限。下面我們來看看這些MySQL權限:
1. grant 所有權限
mysql> grant all privileges on *.* to 'USERNAME'@'HOST';
mysql> flush privileges;
2. grant super權限在*.*上(super權限可以對全局變量更改);
mysql> grant super on *.* to 'USERNAME'@'HOST';
mysql> flush privileges;
3. grant某個庫下所有表的所有權限
mysql> grant all privileges on DB_NAME.* to 'USERNAME'@'HOST';
mysql> flush privileges;
4. grant某個庫下所有表的select權限
mysql>grant select on DB_NAME.* to 'USERNAME'@'HOST';
mysql> flush privileges;
5. grant某個庫下某個表的insert權限
mysql> grant insert on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';
mysql> flush privileges;
6. grant某個庫下某個表的update權限
mysql>grant update on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';
mysql> flush privileges;
7. grant某個庫下某個表的某個字段update權限
mysql> grant update(COLUMN_NAME) on DB_NAME.TABLE_NAME to 'USERNAME'@'HOST';
mysql> flush privileges;
8.通過GRANT語句中的USAGE權限,可以創建賬戶而不授予任何權限
mysql> grant usage on *.* to 'USERNAME'@'HOST';
mysql> flush privileges;
9. grant創建、修改、刪除MySQL數據表結構權限
mysql> grant create on testdb.* to developer@'192.168.0.%';
mysql> grant alter on testdb.* to developer@'192.168.0.%';
mysql> grant drop on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
10. grant操作MySQL外鍵權限
mysql> grant references on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
11. grant操作MySQL臨時表權限
mysql> grant create temporary tables on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
12. grant操作MySQL索引權限
mysql> grant index on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
13.grant操作MySQL視圖、查看視圖源代碼權限
mysql> grant create view on testdb.* to developer@'192.168.0.%';
mysql> grant show view on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
14. grant操作MySQL存儲過程、存儲函數權限
mysql> grant create routine on testdb.* to developer@'192.168.0.%';
mysql> grant alter routine on testdb.* to developer@'192.168.0.%';
mysql> grant execute on testdb.* to developer@'192.168.0.%';
mysql> flush privileges;
15.PROXY特殊權限如果想讓某個用戶具有給他人賦予權限的能力,那么就需要proxy權限了。當你給一個用戶賦予all權限之后,你查看mysql.user表會發現Grant_priv字段還是為N,表示其沒有給他人賦予權限的權限。
我們可以查看一下系統默認的超級管理員權限:
mysql> show grants for 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
可以看到其本身有PROXY權限,并且這個語句跟一般授權語句還不太一樣。所以如果想讓一個遠程用戶有給他人賦予權限的能力,就需要給此用戶PROXY權限,如下:
mysql> grant all on *.* to 'test'@'%' identified by 'helloWORD';
mysql> GRANT PROXY ON ''@'' TO 'test'@'%' WITH GRANT OPTION;
mysql> flush privileges;
16. 查看用戶的權限
Mysql> show grants for 'USERNAME'@'HOST';
17. 移除用戶權限
# 移除tom用戶對于db.xsb的權限;
Mysql> revoke all on db.xsb from 'tom'@'localhost';
# 刷新授權表;
Mysql> flush privileges;
使用REVOKE收回權限之后,用戶帳戶的記錄將從db、host、tables_priv、columns_priv表中刪除,但是用戶帳號依然在user表中保存。
以上就是MySQL數據庫中的MySQL權限管理,實際上就是通過MySQL語句來實現的。合理使用MySQL權限管理對于MySQL數據庫的使用是至關重要的,也能夠加速我們對MySQL數據庫的熟練掌握,在本站的MySQL教程中,還有更多的詳細的解析,能夠幫助我們查漏補缺。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習