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];
-
刷新
FLUSH PRIVILEGES;
GRANT 栗子
-
授予 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 栗子
-
回收全部權限
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} X X X CREATE
允許用戶創建數據庫和表 X X X CREATE ROUTINE
可以使用{create | alter | drop} 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: 權限發生改變后, 需要重新加載一下權限,將權限信息從內存中寫入數據庫;
-
Via