MySQL知識(二十一)——用戶管理之權限管理、訪問控制

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 從零開始學》筆記摘抄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章