MySQL 的 GRANT和REVOKE 命令 GRANT - 授權 將指定 操作對象 的指定 操作許可權 授予指定的 用戶; 發出該 GRANT語句的可以是資料庫管理員,也可以是該資料庫對象的創建者; 查詢 查看用戶自己許可權 SHOW GRANTS; 查看其他用戶許可權 SHOW GRANTS FOR ...
MySQL 的 GRANT和REVOKE 命令
GRANT - 授權
將指定
操作對象
的指定操作許可權
授予指定的用戶
; 發出該 GRANT語句的可以是資料庫管理員,也可以是該資料庫對象的創建者;
-
查詢
-
查看用戶自己許可權
SHOW GRANTS;
-
查看其他用戶許可權
SHOW GRANTS FOR 'user'@'host';
Tips: host 可以使用通配符
%
;如 'user'@'%', 'user'@'192.168.0.%'; -
-
授權
-
語法
GRANT 許可權 ON 資料庫對象 TO 用戶 [WITH GRANT OPTION];
-
慄子
-
授予 super用戶所有許可權
GRANT ALL [PRIVILEGES] ON . TO 'user'@'%';
-
授予用戶 INSERT 許可權
CREATE INSERT ON db_name.* TO 'user'@'%' IDENTIFIED BY 'newpasswd';
-
授予用戶 SELECT, UPDATE, DELETE 許可權
GRANT SELECT, UPDATE, DELETE ON db_name.* TO 'user'@'localhost'
-
-
-
刷新
FLUSH PRIVILEGES;
Tips:
WITH GRANT OPTION
: 表示是否能傳播其許可權;(授權命令是由資料庫管理員使用的)- 指定
WITH GRANT OPTION
,則獲得該許可權的用戶可以把這種許可權授予其他用戶;但不允許迴圈傳授,即被授權者不能把許可權在授回給授權者或祖先; - 未指定,則獲得某種許可權的用戶只能自己使用該許可權,不能傳播該許可權;
- 指定
- 在
GRANT
關鍵字之後指定一個或多個
特權。如果要授予用戶多個許可權,則每個許可權都將以逗號
分隔(見下表中的特權列表); - 指定確定特權應用級別的privilege_level;
- MySQL支持全局(
*.*
),資料庫(database.*
),表(database.table
)和列級別; - 如果您使用列許可權級別,則必須在每個許可權之後使用
逗號
分隔列的列表;
- MySQL支持全局(
- 如果授予許可權的用戶已經存在,則GRANT語句修改其特權; 如不存在,則GRANT語句將創建一個新用戶; 可選的條件
IDENTIFIED BY
允許為用戶設置新密碼;
REVOKE - 回收授權
-
語法
REVOKE 許可權 ON 資料庫對象 FROM 用戶 [CASCADE | RESTRICT];
-
慄子
-
回收全部許可權
REVOKE ALL [PRIVILEGES] ON . FROM 'user'@'%';
-
回收 INSERT 許可權
REVOKE INSERT ON db_name.* FROM 'user'@'%';
-
Tips:
CASCADE | RESTRICT
當檢測到關聯的特權時,RESTRICT(預設值) 導致REVOKE失敗;CASCADE
可以回收所有這些關聯的特權;(如U1授權U2, U2授權U3,此時使用級聯(CASCADE)收回了U2和U3的許可權,否則系統將拒絕執行該命令)
GRANT允許的特權
-
下表說明瞭可用於GRANT和REVOKE語句的所有可用許可權:
許可權 含義 全局 資料庫 表 列 過程 代理 ALL [PRIVILEGES]
授予除了grant option之外的指定訪問級別的所有許可權 ALTER
允許用戶使用alter table語句 X X X ALTER ROUTINE
允許用戶更改或刪除存儲程式, 可以使用{alter | drop} {procedure | unction} X X X CREATE
允許用戶創建資料庫和表 X X X CREATE ROUTINE
可以使用{create | alter | drop} {procedure | function} X CREATE TABLESPACE
允許用戶創建,更改或刪除表空間和日誌文件組 X CREATE TEMPORARY TABLES
允許用戶使用create temporary table創建臨時表 X X CREATE USER
允許用戶使用create user,drop user,rename user和revoke all privileges語句 X CREATE VIEW
允許用戶創建或修改視圖 X X X DELETE
允許用戶使用delete X X X DROP
允許用戶刪除資料庫,表和視圖 X X X EVENT
能夠使用事件計劃的事件 X X EXECUTE
允許用戶執行存儲過程/存儲函數 X X FILE
允許用戶讀取資料庫目錄中的任何文件 X GRANT OPTION
允許用戶有權授予或撤銷其他帳戶的許可權 X X X X X INDEX
允許用戶創建或刪除索引 X X X INSERT
允許用戶使用insert語句 X X X X LOCK TABLES
允許用戶在具有select許可權的表上使用lock tables X X PROCESS
允許用戶使用show processlist語句查看所有進程 X PROXY
啟用用戶代理 REFERENCES
允許用戶創建外鍵 X X X X RELOAD
允許用戶使用flush操作 X REPLICATION CLIENT
允許用戶查詢主伺服器或從伺服器的位置 X REPLICATION SLAVE
允許用戶使用複製從站從主機讀取二進位日誌事件 X SELECT
允許用戶使用select語句 X X X X SHOW DATABASES
允許用戶顯示所有資料庫 X SHOW VIEW
允許用戶使用show create view語句 X X X SHUTDOWN
允許用戶使用mysqladmin shutdown命令 X SUPER
允許用戶使用其他管理操作,如change master to,kill,purge binary logs,set global和mysqladmin命令 X TRIGGER
允許用戶使用trigger操作 X X X UPDATE
允許用戶使用update語句 X X X X USAGE
連接(登陸)許可權(預設授予且不能被回收)
實例
用戶操作
-
創建用戶
CREATE USER 'user'@'%' IDENTIFIED BY 'newpasswd';
-
重命名用戶
CREATE USER 'old_user'@'%' TO 'new_user'@'%';
-
刪除用戶
-
查詢用戶
SELECT user,host FROM mysql.user;
-
刪除用戶
DROP USER 'user'@'host';
-
查看和刷新許可權
-
查看許可權
SHOW GRANTS [FOR 'user'@'host'];
-
刷新許可權
FLUSH PRIVILEGES;
授權與取消授權
-
用法
GRANT 許可權 ON 資料庫對象 TO 用戶 [WITH GRANT OPTION]; -- 授權 REVOKE 許可權 ON 資料庫對象 FROM 用戶 [CASCADE | RESTRICT]; -- 取消授權
Tips: REVOKE 跟 GRANT 的語法差不多,只需要把關鍵字
TO
換成FROM
即可 -
慄子
-
添加許可權(和已有許可權合併,不會覆蓋已有許可權)
-- 添加普通數據用戶,查詢、插入、更新、刪除 資料庫中所有表數據的權利 grant select, insert, update, delete on testdb.* to common_user@'%' -- 添加資料庫開發人員,創建表、索引、視圖、存儲過程、函數。。。等許可權 grant create, alter, drop on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 外鍵許可權 grant references on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 臨時表許可權 grant create temporary tables on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 索引許可權 grant index on testdb.* to developer@'192.168.0.%'; -- 添加操作 MySQL 視圖、查看視圖源代碼 許可權 grant create, show view on testdb.* to developer@'192.168.0.%';
-
刪除授權
-- 刪除普通數據用戶,查詢、插入、更新、刪除 資料庫中所有表數據的權利 revoke select, insert, update, delete on testdb.* from common_user@'%' -- 刪除資料庫開發人員,創建表、索引、視圖、存儲過程、函數。。。等許可權 revoke create, alter, drop on testdb.* from developer@'192.168.0.%'; -- 刪除操作 MySQL 外鍵許可權 revoke references on testdb.* from developer@'192.168.0.%'; -- 刪除操作 MySQL 臨時表許可權 revoke create temporary tables on testdb.* from developer@'192.168.0.%'; -- 刪除操作 MySQL 索引許可權 revoke index on testdb.* from developer@'192.168.0.%'; -- 刪除操作 MySQL 視圖、查看視圖源代碼 許可權 revoke create, show view on testdb.* from developer@'192.168.0.%';
-
DBA 許可權管理
-- 普通 DBA 管理某個 MySQL 資料庫的許可權 grant all [privileges] on testdb to dba@'localhost' -- 高級 DBA 管理 MySQL 中所有資料庫的許可權。 grant all on *.* to dba@'localhost'
-
細密度授權
-- 作用在整個 MySQL 伺服器上 grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有資料庫中的表 grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有資料庫 -- 作用在單個資料庫上 grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。 -- 作用在單個數據表上 grant select, insert, update, delete on testdb.t_orders to dba@localhost; -- 作用在表中的列上 grant select(id, username, sex) on testdb.t_user to dba@localhost;
-
許可權傳播與收回
-- 授權 dba 查詢許可權,並且可以將這些許可權 grant 給其他用戶 grant select on testdb.* to dba@localhost with grant option; -- 收回 dba 和其傳播用戶的許可權 revoke select on testdb.* from dba@localhost cascade;
Tips: 許可權發生改變後, 需要重新載入一下許可權,將許可權信息從記憶體中寫入資料庫;
-
Reference