MySQL預設資料庫之mysql庫

lhrbest發表於2019-07-21


MySQL預設資料庫之mysql庫


參考連結如下: https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html


MySQL 訪問許可權系統表包含如下幾張表:

  • user:包含使用者帳戶和全域性許可權和其他非許可權列表(安全配置選項和資源控制選項列)

  • db:資料庫級別的許可權表

  • tables_priv:表級別的許可權表

  • columns_priv:列級許可權表

  • procs_priv:儲存過程和函式許可權表

  • proxies_priv:代理使用者許可權表


PS:

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

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


1、user

該表提供查詢全域性許可權資訊,該表中的帳號密碼資訊在認證1階段(關於認證階段相關的內容我們會在下一期進行介紹)決定著是否允許使用者連線,對於通過帳號密碼認證階段的連線,如果同時通過user表中的許可權檢查,那麼就代表著該使用者擁有全域性許可權,該表中記錄的許可權資訊代表著使用者是否擁有該例項下所有資料庫的相應全域性許可權

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

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

root@localhost : mysql 12:51:40> select * from mysql.user limit 1\G;
*************************** 1. row ***************************
              Host: %
              User: qfsys
       Select_priv: Y
       Insert_priv: N
       Update_priv: N
       Delete_priv: N
       Create_priv: N
         Drop_priv: N
       Reload_priv: Y
     Shutdown_priv: Y
      Process_priv: Y
         File_priv: Y
        Grant_priv: N
   References_priv: N
        Index_priv: N
        Alter_priv: N
      Show_db_priv: N
        Super_priv: Y
 Create_tmp_table_priv: N
  Lock_tables_priv: Y
      Execute_priv: N
   Repl_slave_priv: Y
  Repl_client_priv: Y
  Create_view_priv: N
    Show_view_priv: N
   Create_routine_priv: N
Alter_routine_priv: N
  Create_user_priv: N
        Event_priv: N
      Trigger_priv: N
Create_tablespace_priv: N
          ssl_type: 
        ssl_cipher: 
       x509_issuer: 
      x509_subject: 
     max_questions: 0
       max_updates: 0
   max_connections: 0
  max_user_connections: 0
            plugin: mysql_native_password
 authentication_string: *3B3D7D2FD587C29C730F36CD52B4BA8CCF4C744F
  password_expired: N
 password_last_changed: 2017-07-01 14:37:32
 password_lifetime: NULL
    account_locked: N
1 row in set (0.00 sec)

表欄位含義:

  • 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:代表該行記錄中的使用者每小時的最大併發連線數


2、db

該表提供查詢庫級別物件許可權資訊, 該表中記錄的許可權資訊代表著使用者是否可以使用這些許可權來訪問哪些資料庫下的所有物件(表或儲存程式)

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

root@localhost : mysql 12:53:28> select * from db limit 1\G;
*************************** 1. row ***************************
             Host: localhost
               Db: performance_schema
             User: mysql.session
      Select_priv: Y
      Insert_priv: N
      Update_priv: N
      Delete_priv: N
      Create_priv: N
        Drop_priv: N
       Grant_priv: N
  References_priv: N
       Index_priv: N
       Alter_priv: N
Create_tmp_table_priv: N
 Lock_tables_priv: N
 Create_view_priv: N
   Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Execute_priv: N
       Event_priv: N
     Trigger_priv: N
1 row in set (0.00 sec)

表欄位含義:

  • 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等欄位,即代表著這些欄位對應的許可權是全域性範圍的,不區分庫表級別


3、tables_priv

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

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

root@localhost : mysql 12:54:14> select * from tables_priv;
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| Host      | Db     | User          | Table_name | Grantor        | Timestamp           | Table_priv                                                                                   | Column_priv          |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| localhost | sys    | mysql.sys     | sys_config | root@localhost | 2017-07-01 14:31:32 | Select                                                                                       |                      |
| localhost | mysql  | mysql.session | user       | root@localhost | 2017-12-11 23:41:19 | Select                                                                                       |                      |
| %         | sbtest | xx            | sbtest1    | root@localhost | 0000-00-00 00:00:00 |                                                                                              | Select,Insert,Update |
| %         | sbtest | test_table    | sbtest1    | root@localhost | 0000-00-00 00:00:00 | Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger |                      |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
4 rows in set (0.00 sec)

表欄位含義:

  • 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表示的帳號許可權時的時間戳

 

4、columns_priv

該表提供查詢列級別許可權資訊, 與db表類似,但粒度更細,columns_priv表中記錄的許可權資訊代表著使用者可以使用這些許可權來訪問某個表的指定列

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

root@localhost : mysql 12:55:13> select * from columns_priv;
+------+--------+------+------------+-------------+---------------------+----------------------+
| Host | Db     | User | Table_name | Column_name | Timestamp           | Column_priv          |
+------+--------+------+------------+-------------+---------------------+----------------------+
| %    | sbtest | xx   | sbtest1    | id          | 0000-00-00 00:00:00 | Select,Insert,Update |
+------+--------+------+------------+-------------+---------------------+----------------------+
1 row in set (0.00 sec)

表欄位含義:

  • host、db、user、Table_name、Column_name五個列官方稱為範圍列,可以理解為這兩個欄位構成了允許訪問的客戶端範圍以及客戶端可以訪問的列物件資源範圍

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

  • 其他欄位 
    * Timestamp: 與tables_priv表中的Timestamp列含義相同


5、procs_priv

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

表欄位含義:

  • host、db、user、Routine_name、Routine_type五個列官方稱為範圍列,可以理解為這兩個欄位構成了允許訪問的客戶端範圍以及客戶端可以訪問的儲存物件資源

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

  • 其他列:  
    * Timestamp: 和tables_priv表中的Timestamp欄位含義相同 
    * Grantor: 和tables_priv表中的Grantor欄位含義相同

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


6、proxies_priv

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

  • 如果一個使用者需要將它的PROXY許可權授予其他帳號,那麼它必須在該表中有一行許可權資訊,且With_grant欄位必須為1

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

root@localhost : mysql 12:58:16> select * from proxies_priv;
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| Host      | User | Proxied_host | Proxied_user | With_grant | Grantor              | Timestamp           |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| localhost | root |              |              |          1 | boot@connecting host | 0000-00-00 00:00:00 |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
1 row in set (0.00 sec)

表欄位含義:

  • 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個字元







About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 (滿) 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-07-01 06:00 ~ 2019-07-31 24:00 在西安完成

● 最新修改時間:2019-07-01 06:00 ~ 2019-07-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店 https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書 http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班 http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁 https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端 掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2651251/,如需轉載,請註明出處,否則將追究法律責任。

相關文章