mysql 開發進階篇系列 51 許可權與安全(許可權表user,db詳細介紹 )
一.概述
mysql 的許可權系統主要用來對連線到資料庫的使用者進行許可權驗證,以此來判斷此使用者是否屬於合法使用者,以及合法使用者給予的相應資料庫許可權。下面將介紹許可權系統的工作原理,以及將要熟練掌握賬號的管理和使用方法(mysql版本 5.7)。
1.1 許可權系統的工作原理
mysql 許可權系統通過兩個階段進行認證:(1) 對連線的使用者進行身份認證,合法的使用者通過認證,不合法的使用者拒絕連線;(2) 對通過認證的合法使用者賦予相應的許可權,使用者可以在這些許可權範圍內對資料庫做相應操作。
對於身份認證, mysql是通過ip地址和使用者名稱聯合進行確認的, 例如在mysql安裝後預設建立的使用者
如下圖所示,mysql.user表中第一行的host列限定是localhost 代表本地:
mysql許可權表在資料庫啟動的時候就載入記憶體了,當用戶通過身份認證後,就在記憶體中進行相應許可權的存取,這樣,此使用者就可以在資料庫中做許可權範圍內的各種操作了。
1.2 許可權表的許可權介紹
在許可權表存取的兩個過程中,系統會用到"mysql" 資料庫(安裝mysql時被建立, 資料庫名稱叫" mysql ")中的user,host,db這3個最重要的許可權表(在MySQL 5.6.7中刪除了mysql.host表)。
表名 | user | db | 描述 |
使用者列 | Host | Host | 允許使用者登入所使用的IP |
User(對應的使用者名稱稱) | Db(對應的庫名稱) | ||
Password (5.7 版本 authentication_string) |
User | ||
許可權列 | |||
Select_priv | Select_priv | 是否通過SELECT命令查詢資料 | |
Insert_priv | Insert_priv | 是否通過INSERT命令插入資料; | |
Update_priv | Update_priv | 是否通過UPDATE命令修改現有資料 | |
Delete_priv | Delete_priv | 是否通過DELETE命令刪除現有資料 | |
Create_priv | Create_priv | 是否可以建立新的資料庫和表 | |
Drop_priv | Drop_priv | 是否可以刪除現有資料庫和表 | |
Reload_priv | 是否可以執行重新整理和重新載入MySQL所用各種內部快取的特定命令,包括日誌、許可權、主機、查詢和表;重新載入許可權表 | ||
Shutdown_priv | 是否可以關閉MySQL伺服器 | ||
Process_priv | 是否可以通過SHOW PROCESSLIST命令檢視其他使用者的程序;伺服器管理 | ||
File_priv | 是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令;載入伺服器上的檔案 | ||
Grant_priv | Grant_priv | 是否可以將自己的許可權再授予其他使用者 | |
References_priv | References_priv | 建立外來鍵約束 | |
Index_priv | Index_priv | 是否可以建立和刪除表索引;用索引查詢表 | |
Alter_priv | Alter_priv | 是否可以重新命名和修改表結構 | |
Show_db_priv | 是否可以檢視伺服器上所有資料庫的名字,包括使用者擁有足夠訪問許可權的資料庫 | ||
Super_priv | 是否可以執行某些強大的管理功能,例如通過KILL命令刪除使用者程序,使用SET GLOBAL修改全域性MySQL變數,執行關於複製和日誌的各種命令;超級許可權 | ||
Create_tmp_table_priv | Create_tmp_table_priv | 是否可以建立臨時表 | |
Lock_tables_priv | Lock_tables_priv | 是否可以使用LOCK TABLES命令阻止對錶的訪問/修改; | |
Execute_priv | Execute_priv | 是否可以執行儲存過程 | |
Repl_slave_priv | 是否可以讀取用於維護複製資料庫環境的二進位制日誌檔案;此使用者位於主系統中,有利於主機和客戶機之間的通訊;主伺服器管理 | ||
Repl_client_priv | 是否可以確定複製從伺服器和主伺服器的位置;從伺服器管理 | ||
Create_view_priv | Create_view_priv | 是否可以建立檢視 | |
Show_view_priv | Show_view_priv | 是否可以檢視檢視 | |
Create_routine_priv | Create_routine_priv | 是否可以更改或放棄儲存過程和函式 | |
Alter_routine_priv | Alter_routine_priv | 是否可以修改或刪除儲存函式及函式 | |
Create_user_priv | 是否可以執行CREATE USER命令,這個命令用於建立新的MySQL賬戶 | ||
Event_priv | Event_priv | 是否能否建立、修改和刪除事件 | |
Trigger_priv | Trigger_priv | 是否能否建立和刪除觸發器 | |
Create_tablespace_priv | 是否可以建立表空間 | ||
安全列 | |||
ssl_type | 支援ssl標準加密安全欄位 | ||
ssl_cipher | 支援ssl標準加密安全欄位 | ||
x509_issuer | 支援x509標準欄位 | ||
x509_subject | 支援x509標準欄位 | ||
資源控制列 | |||
max_questions | 每小時允許執行多少次查詢 | ||
max_updates | 每小時可以執行多少次更新 | ||
max_connections | 每小時可以建立的多少次連線 | ||
max_user_connections | 單使用者可以同時具有的連線數 | ||
安全列 | |||
plugin | 引入plugins以進行使用者連線時的密碼驗證,plugin建立外部/代理使用者 | ||
password_expired | 密碼是否過期 (y 已過期) | ||
password_last_changed | |||
password_lifetime | |||
account_locked |
在這二個表中,最重要的是user表,其次是db表,在user表中通常使用最多的是使用者列和許可權列, 許可權列分為普通許可權和管理許可權。
普通許可權主要用於資料庫操作,如seelct_priv,create_priv等。
管理許可權主要用來對資料庫進行管理的操作包括:Create_tablespace_priv ,Create_user_priv ,process_priv,
Reload_priv, Repl_client_priv , Repl_slave_priv , Show_db_priv ,Shutdown_priv ,super_priv。
最後許可權表中許可權列,對應的許可權名(privilege)如下圖所示(在下一章中有用GRANT賦予許可權時會用到,例如許可權列Delete_priv對應的是DELETE許可權):
詳細的許可權文件參考:
https://dev.mysql.com/doc/mysql-security-excerpt/5.7/en/privileges-provided.html#priv_references