天天看點

權限系統表 | 全方位認識 mysql 系統庫(一)

前面我們已經完整的介紹了performance_schema 、sys、information_schema三個系統庫,今天開始我們為大家開啟"全方位認識 mysql 系統庫"系列,這也是MySQL中的最後一個系統庫 ,在更早之前,我們在《MySQL 的 help 指令你真的會用嗎?》一文中其實已經介紹過mysql 系統庫的幫助資訊表了。在接下來的系列文章中,我們将全面介紹 mysql 系統庫。下面,請跟随我們一起開始mysql 系統庫 的學習之旅吧。

MySQL 通路權限系統表包含如下幾張表:

user:包含使用者帳戶和全局權限和其他非權限清單(安全配置選項和資源控制選項列)

db:資料庫級别的權限表

tables_priv:表級别的權限表

columns_priv:列級權限表

procs_priv:存儲過程和函數權限表

proxies_priv:代理使用者權限表

PS:

要更改權限表的内容,推薦使用帳号管理語句(如:CREATE USER、GRANT、REVOKE等)來間接修改,不建議直接使用DML語句修改權限表,否則後果自負

以下内容主要針對MySQL 5.7版本進行整理

該表提供查詢全局權限資訊,該表中的帳号密碼資訊在認證1階段(關于認證階段相關的内容我們會在下一期進行介紹)決定着是否允許使用者連接配接,對于通過帳号密碼認證階段的連接配接,如果同時通過user表中的權限檢查,那麼就代表着該使用者擁有全局權限,該表中記錄的權限資訊代表着使用者是否擁有該執行個體下所有資料庫的相應全局權限

注意:在user表中有任意一個權限列為Y的,就被認為擁有全局權限,是以使用者在使用show databases或者使用information_schema的schemata表查詢時,可以查詢到所有資料庫名稱清單

下面是該表中存儲的資訊内容

表字段含義:

host和user兩個列官方稱為範圍列,可以了解為這兩個字段構成了允許通路的用戶端範圍以及用戶端可以通路的資料庫資源範圍(這裡沒有像db表那樣的db字段限制庫範圍,可以了解為整個執行個體範圍的資料庫) 

* host:代表允許使用者從哪些主機通路資料庫,可以用通配符和DNS

* user:使用者名

權限列:從 Select_priv到Create_tablespace_priv及其之間的列,官方稱為權限列,每一個列對應一個具體的權限,為Y代表有權限,為N代表沒權限

以下列官方稱為安全列,與用戶端與服務端之間的安全、加密通訊有關 

* ssl_type:如果使用者配置了使用加密ssl連接配接,則該字段記錄使用者使用的加密證書類型 

* ssl_cipher:表示用于SSL連接配接握手中可能使用到的密碼清單 

* x509_issuer:x509證書相關字段 

* x509_subject:x509證書相關字段 

* plugin:代表該使用者使用的密碼認證插件名稱 

* authentication_string:表示使用者密碼的md5加密字元串 

* password_expired:表示使用者密碼是否過期,為Y試表示使用者密碼會過期,為N表示使用者密碼永不過期 

* password_last_changed:表示使用者密碼的最近一次修改時間,該字段如果使用MySQL内建的認證插件(mysql_native_password or sha256_password)則該字段為非空,如果是使用外部認證插件則該字段為空,當使用MySQL内建的認證插件時,該字段初始值為CREATE USER、ALTER USER、SET PASSWORD、GRANT語句執行建立使用者或者修改密碼時的時間 

* password_lifetime:如果password_expired字段為Y,則該字段記錄該使用者剩餘的密碼未過期天數,假設該字段值為N,則表示使用者需要每N天修改一次密碼。如果使用者未單獨指定該值,則使用全局系統變量default_password_lifetime的值代替。當該字段值為NULL且全局系統變量default_password_lifetime為0時或者該字段值為0時,表示該使用者的密碼永不過期 

* account_locked:代表使用者目前狀态是鎖定狀态還是處于激活可用狀态

以下列官方稱為資源控制列,用于限制使用者的一些通路資源 

* max_questions:代表所有使用者每小時的最大并發查詢數 

* max_updates:代表所有使用者每小時最大并發更新次數 

* max_connections:代表所有使用者每小時的最大并發連接配接數 

* max_user_connections:代表該行記錄中的使用者每小時的最大并發連接配接數

該表提供查詢庫級别對象權限資訊, 該表中記錄的權限資訊代表着使用者是否可以使用這些權限來通路哪些資料庫下的所有對象(表或存儲程式)

host、db、user三個列官方稱為範圍列,可以了解為這兩個字段構成了允許通路的用戶端範圍以及用戶端可以通路的資料庫資源範圍 

* host:與user表的host字段含義相同 

* db:代表該使用者權限記錄所屬的哪個庫級别範圍 

* user:與user表的user字段含義相同

xxx_priv:與user表的xxx_priv字段含義相同,每一個字段對應相應的權限,,為Y代表有權限,為N代表沒權限 

* 與user表相比,少了Reload_priv 、Shutdown_priv 、Process_priv 、File_priv、Show_db_priv、Super_priv、Repl_slave_priv、Repl_client_priv、Create_user_priv、Create_tablespace_priv等字段,即代表着這些字段對應的權限是全局範圍的,不區分庫表級别

該表提供查詢表表級别權限資訊,與db表類似,但粒度更細,tables_priv表中記錄的權限資訊代表着使用者是否可以使用這些權限通路某個表中的所有列

host、db、user、Table_name四個列官方稱為範圍列,可以了解為這兩個字段構成了允許通路的用戶端範圍以及用戶端可以通路的表對象資源範圍

Table_priv和Column_priv官方稱為權限列,對應這表級别權限和列級别權限,需要注意的是,這兩列權限列與user和db表不同,這兩列是set類型,記錄着表級别和列級别的權限集合,而不是對應具體的某個權限。Table_priv對應着表級别的'Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger'權限,Column_priv對應着列級别的'Select','Insert','Update','References'權限

其他字段: 

* Grantor:代表該表中記錄的使用者權限被誰授予的,即該表中的使用者權限在被授予時的current_user函數傳回的使用者值(account形式) 

* Timestamp:代表授予Grantor表示的帳号權限時的時間戳

該表提供查詢列級别權限資訊, 與db表類似,但粒度更細,columns_priv表中記錄的權限資訊代表着使用者可以使用這些權限來通路某個表的指定列

host、db、user、Table_name、Column_name五個列官方稱為範圍列,可以了解為這兩個字段構成了允許通路的用戶端範圍以及用戶端可以通路的列對象資源範圍

Column_priv官方稱為權限列,與tables_priv表中的Column_priv列含義相同,也是一個集合,對應列級别的'Select','Insert','Update','References'權限

其他字段 

* Timestamp:與tables_priv表中的Timestamp列含義相同

該表提供查詢存儲程式的權限資訊,該表中記錄的權限資訊代表着使用者是否可以使用這些權限來通路指定的存儲程式(存儲過程和函數)

host、db、user、Routine_name、Routine_type五個列官方稱為範圍列,可以了解為這兩個字段構成了允許通路的用戶端範圍以及用戶端可以通路的存儲對象資源

Proc_priv官方稱為權限列,該權限列也是一個集合類型,代表存儲程式的'Execute','Alter Routine','Grant'權限

其他列: 

* Timestamp:和tables_priv表中的Timestamp字段含義相同 

* Grantor:和tables_priv表中的Grantor字段含義相同

PS:該表權限資料為空,目前并未找到使表中填充資料的方法

該表提供查詢代理使用者權限資訊, 該表中記錄的權限資訊代表着使用者可以充當哪些使用者的代理,以及使用者是否可以将PROXY權限授予其他使用者

如果一個使用者需要将它的PROXY權限授予其他帳号,那麼它必須在該表中有一行權限資訊,且With_grant字段必須為1

host、user字段含義與前面其他權限表相同

Proxied_host和Proxied_user表示被授予proxy權限的account(對應的host和user字元串)

其他列的含義和tables_priv含義相同

注意事項:權限表中一些字段有長度存儲限制,具體如下:

Host, Proxied_host:長度限制 60個字元

User, Proxied_user:長度限制 32個字元

Password:長度限制 41個字元

Db:長度限制 64個字元

Table_name:長度限制 64個字元

Column_name:長度限制 64個字元

Routine_name:長度限制 64個字元

繼續閱讀