1 權限管理
權限管理主要是對登錄到MySQL的用戶進行權限驗證。所有用戶的權限都存儲在MySQL的權限表中,不合理的權限規劃會給MySQL服務器帶來安全隱患。
MySQL權限系統的主要功能是證實連接到一臺給定主機的用戶,並且賦予該用戶在數據庫上的SELECT、INSERT、UPDATE和DELETE權限。
1.1 MySQL的各種權限
賬戶權限信息被存儲在MySQL數據庫的user、db、host、tables_priv、column_priv和procs_priv表中。MySQL啓動時,服務器將這些數據庫表中的權限信息的內容讀入內存。
GRANT和REVOKE語句所涉及的權限的名稱如下:
(1)CREATE和DROP權限,可以創建新數據庫和表,或刪除已有數據庫和表。
(2)SELECT、INSERT、UPDATE和DELETE權限,允許在數據庫表上進行操作
(3)INDEX權限允許創建或刪除索引
(4)ALTER,允許更改表的結構和重命名錶
(5)CREATE ROUTINE,創建保存函數和程序
(6)GRANT,允許授權給其他用戶
(7)FILE權限,允許用戶能讀或寫MySQL服務器上的任何文件。
1.2 授權
授權就是爲某個用戶授予權限。授予的權限可以分爲多個層級:
(1)全局層級
適用於一個給定服務器中的所有數據庫,權限存儲在mysql.user表中,例如GRANT ALL ON *.*和REVOKE ALL ON *.*
(2)數據庫層級
…一個給定數據庫中的所有目標。…mysql.db和mysql.host表…,GRANT ALL ON db_name.和REVOKE ALL ON db_name.
(3)表層級
…給定表中的所有列。…mysql.table_priv表。GRANT ALL ON db_name.tbl_name 和REVOKE ALL ON db_name.tbl_name…
(4)列層級
…一個給定表中的單一列。…mysql.columns_priv表。
(5)子程序層級
…
例子:使用GRANT語句創建一個新的用戶grantUser,密碼爲‘grantpwd’。用戶grantUser對所有的數據有查詢、插入權限。並授於GRANT權限
GRANT SELECT,INSERT ON *.* TO 'grantUser'@'localhost'
IDENTIFIED BY 'grantpwd'
WITH GRANT OPTION;
1.3 收回權限
收回權限就是取消已經賦予用戶的某些權限。MySQL中使用REVOKE語句取消用戶的某系權限。
(1)收回用戶所有權限
REVOKE ALL PRIVILEGES,GRANT OPTION
FROM 'user'@'host'[,'user'@'host'...]
(2)收回用戶指定權限
REVOKE pri_type [(columns)][,priv_type[(columns)]]...
ON table1,table2,...,tablen
FROM 'user'@'host'[,'user'@'host'...]
priv_type:表示權限類型
columns:表示權限作用於哪些列上,默認作用域整個表
table1,table2,…,tablen:表示從那個表中收回權限
‘user’@’host’:表示用戶賬戶
(3)例子,取消用戶testUser的更新權限
mysql> REVOKE UPDATE ON *.* FROM 'testUser'@'localhost';
Query OK, 0 rows affected
mysql> SELECT Host,User,Select_priv,Update_priv,Grant_priv FROM mysql.user WHERE user='testUser';
+-----------+----------+-------------+-------------+------------+
| Host | User | Select_priv | Update_priv | Grant_priv |
+-----------+----------+-------------+-------------+------------+
| localhost | testUser | Y | N | N |
+-----------+----------+-------------+-------------+------------+
1 row in set
1.4 查看權限
SHOW GRANTS FOR 'user'@'host';
例如查看testUser用戶d權限信息:
mysql> SHOW GRANTS FOR 'testUser'@'localhost';
+------------------------------------------------------------------------------------------------------------------+
| Grants for testUser@localhost |
+------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'testUser'@'localhost' IDENTIFIED BY PASSWORD '*633B5898492ADFB22FB272BD8F047574F383F043' |
+------------------------------------------------------------------------------------------------------------------+
1 row in set
2 訪問控制
正常情況下,並不希望每個用戶都可以執行所有的數據庫操作。當MySQL允許一個用戶執行各種操作時,它將首先覈實該用戶向MySQL服務器發送的連接請求,然後確認用戶的操作請求是否被允許。
2.1 連接覈實階段
即客戶端用戶向服務器提供用戶名、密碼、主機地址,進行連接覈實。
2.2 請求覈實階段
即對連接上的每個請求,服務器檢查用戶要執行的操作,然後檢查是否有足夠的權限來執行它。
2.3 圖解
說明
閱讀《MySQL5.5 從零開始學》筆記摘抄。