mysql 的權限體系大緻分為5個層級:
全局層級
全局權限适用于一個給定伺服器中的所有資料庫。這些權限存儲在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*隻授予和撤銷全局權限。
資料庫層級
資料庫權限适用于一個給定資料庫中的所有目标。這些權限存儲在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*隻授予和撤銷資料庫權限。
表層級
表權限适用于一個給定表中的所有列。這些權限存儲在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name隻授予和撤銷表權限。
列層級
列權限适用于一個給定表中的單一列。這些權限存儲在mysql.columns_priv表中。當使用REVOKE時,您必須指定與被授權列相同的列。
子程式層級
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT權限适用于已存儲的子程式。這些權限可以被授予為全局層級和資料庫層級。而且,除了CREATE ROUTINE外,這些權限可以被授予為子程式層級,并存儲在mysql.procs_priv表中。
這些權限資訊存儲在下面的系統表中:
mysql.user
mysql.db
mysql.host
mysql.table_priv
mysql.column_priv
當使用者連接配接進來,mysqld會通過上面的這些表對使用者權限進行驗證!
注意:
當後續目标是一個表、一個已存儲的函數或一個已存儲的過程時,object_type子句應被指定為TABLE、FUNCTION或PROCEDURE。當從舊版本的MySQL更新時,要使用本子句,您必須更新您的授權表。請
我們可以用 CREATE USER 或 GRANT 建立使用者,後者還同時配置設定相關權限。而 REVOKE 則用于删除使用者權限,DROP USER 删除賬戶。
MySQL 賦予使用者權限指令文法為:
grant 權限 on 資料庫對象 to 使用者;
grant 權限 on 資料庫對象 to 使用者 identified by "密碼";
grant 權限 on 資料庫對象 to 使用者@"ip" identified by "密碼"
GRANT 文法:
GRANT privileges (columns)
ON what
TO user IDENTIFIED BY "password"
WITH GRANT OPTION;
privileges 清單:
* ALTER: 修改表和索引。
* CREATE: 建立資料庫和表。
* DELETE: 删除表中已有的記錄。
* DROP: 抛棄(删除)資料庫和表。
* INDEX: 建立或抛棄索引。
* INSERT: 向表中插入新行。
* REFERENCE:未使用。
* SELECT: 檢索表中的記錄。
* UPDATE: 修改現存表記錄。
* FILE: 讀或寫伺服器上的檔案。
* PROCESS: 檢視伺服器中執行的線程資訊或殺死線程。
* RELOAD: 重載授權表或清空日志、主機緩存或表緩存。
* SHUTDOWN: 關閉伺服器。
* ALL: 所有權限,ALL PRIVILEGES同義詞。
* USAGE: 特殊的 "無權限" 權限。
子句 "WITH GRANT OPTION" 表示該使用者可以為其他使用者配置設定權限。使用grant 指令建立使用者或者進行授權之後,需要使用flush privileges重新整理MySQL的系統權限相關表,否則會出現拒絕通路,或者重新啟動mysql伺服器,來使新設定生效。當然後者并不是一種好想法!
比如:
一 grant普通資料使用者yangql402查詢、插入、更新、删除 資料庫(test)中所有表資料的權利。
二 grant資料庫開發人員(yangql402),建立表、索引、視圖、存儲過程、函數。。。等權限。
grant建立、修改、删除 MySQL 資料表結構權限。
grant 操作 MySQL 外鍵權限,官方文檔上說未使用!
grant 操作 MySQL 臨時表權限。
grant 操作 MySQL 索引權限。
grant 操作 MySQL 視圖、檢視視圖源代碼 權限。
grant 操作 MySQL 存儲過程、函數 權限。
三 grant 普通DBA管理某個MySQL資料庫(test)的權限。
其中,關鍵字 “privileges” 可以省略。
四 grant 進階 DBA 管理 MySQL 中所有資料庫的權限。
五 MySQL grant 權限,分别可以作用在多個層次上。
a. grant 作用在整個 MySQL 伺服器上:
b. grant 作用在單個資料庫上:
c. grant 作用在單個資料表上:
d. grant 作用在表中的列上:
e. grant 作用在存儲過程、函數上:
六 檢視使用者權限
檢視目前使用者自己的權限:
show grants;
檢視其他 MySQL 使用者權限:
七 撤銷使用者權限
使用revoke 指令來登出使用者的權限,具體文法:
要撤銷所有權限,需使用以下文法。此文法用于取消對于已命名的使用者的所有全局層級、資料庫層級、表層級和列層級的權限。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
也可以指定具體的權限比如:
1 使用GRANT或REVOKE,操作者必須擁有GRANT OPTION權限,并且您必須用于您正在授予或撤銷的權限。
2 使用REVOKE撤銷全部權限,操作者必須擁有mysql資料庫的全局CREATE USER權限或UPDATE權限。
八 删除使用者:
DROP USER user;
mysql> drop user yangql402;
Query OK, 0 rows affected (0.01 sec)
本文轉自 wws5201985 51CTO部落格,原文連結:http://blog.51cto.com/wws5201985/785377,如需轉載請自行聯系原作者