Mysql——許可權管理

來源:互聯網
上載者:User

標籤:

安裝Mysql時會自動安裝一個名為mysql的資料庫。這個資料庫下面儲存的是許可權表
Mysql會根據這些許可權表的內容為每個使用者賦予相應的許可權
所以我們也是通過這些表來實現系統管理使用者和許可權的

use mysql;show tables;+---------------------------+| Tables_in_mysql           |+---------------------------+| columns_priv              || db                        || event                     || func                      || general_log               || help_category             || help_keyword              || help_relation             || help_topic                || innodb_index_stats        || innodb_table_stats        || ndb_binlog_index          || plugin                    || proc                      || procs_priv                || proxies_priv              || servers                   || slave_master_info         || slave_relay_log_info      || slave_worker_info         || slow_log                  || tables_priv               || time_zone                 || time_zone_leap_second     || time_zone_name            || time_zone_transition      || time_zone_transition_type || user                      |+---------------------------+

 

user表
1. user表的作用相當與mysql工作流程中的"使用者管理模組",它決定著我們對一個串連允許或拒絕
2. user表用於記錄允許串連到伺服器的使用者帳號資訊,裡面的許可權是全域級的

3. 根據user表結構,表的欄位可以分為4類
(1) 使用者列
      Host主機名稱、User使用者名稱、Password密碼             
(2) 許可權列(以priv結尾的)
      包含普通許可權:查詢許可權、修改許可權等
      和進階系統管理權限:關閉服務許可權、超級許可權、載入使用者
      這些欄位只有N和Y兩個選項,為安全期間預設值都設為N
      Grant_priv是否有Grant許可權、Shutdown_priv是否有停止mysql服務的許可權
      Super_priv是否有超級許可權、Execute_priv是否有執行預存程序和函數的許可權
(3) 安全列
(4) 資源控制列  
      這些欄位預設值為0,表示沒有限制                  
      max_questions   每小時允許執行多少次查詢
      max_updates     每小時允許執行多少次更新
      max_connections 每小時允許建立多少串連
      max_user_connections 單個使用者可以同時具有的串連數

desc user;+------------------------+-----------------------------------+------+-----+----| Field                  | Type          | Null | Key | Default   | Extra |+------------------------+-----------------------------------+------+-----+---| Host                 | char(60)      | NO   | PRI |                       |       || User                   | char(16)      | NO   | PRI |                       |       || Password               | char(41)      | NO   |     |                       |       || Select_priv          | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Insert_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Update_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Delete_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Create_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Drop_priv              | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Reload_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Shutdown_priv          | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Process_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || File_priv              | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Grant_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || References_priv        | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Index_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Alter_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Show_db_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Super_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Create_tmp_table_priv  | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Lock_tables_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Execute_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Repl_slave_priv        | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Repl_client_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Create_view_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Show_view_priv         | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Create_routine_priv    | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Alter_routine_priv     | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Create_user_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Event_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Trigger_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || Create_tablespace_priv | enum(‘N‘,‘Y‘) | NO   |     | N                     |       || ssl_type               | enum(‘‘,‘ANY‘,‘X509‘,‘SPECIFIED‘) | NO   |     |          | ssl_cipher             | blob          | NO   |     | NULL                  |       || x509_issuer            | blob          | NO   |     | NULL                  |       || x509_subject           | blob          | NO   |     | NULL                  |       || max_questions          | int(11) unsigned | NO   |     | 0                     |       || max_updates            | int(11) unsigned | NO   |     | 0                     |       || max_connections        | int(11) unsigned | NO   |     | 0                     |       || max_user_connections   | int(11) unsigned | NO   |     | 0                     |       || plugin                 | char(64)         | YES  |     | mysql_native_password |       || authentication_string  | text             | YES  |     | NULL                  |       || password_expired       | enum(‘N‘,‘Y‘)    | NO   |     | N                     |       |+------------------------+-----------------------------------+------+-----+----------------

 

db表
1. 使用者被允許串連了,但是是不是可以就能操作所有資料庫了呢?
2. 所以我們需要db表/host表,用來規定某一個使用者對一個資料庫的許可權
3. db表的欄位分為兩類:
   (1)使用者列
        Host主機名稱、Db資料庫名、User使用者名稱
   (2)許可權列
       使用者是先根據user表的內容獲得許可權,再根據db表的內容擷取許可權    
       例如,user表中某使用者的Select_priv欄位為‘N’,表示所有資料庫中的表它都無權查詢
       但db表中這一使用者對student表的Select_priv欄位設為了‘Y’,表示它只有查詢student表的許可權

desc db;+-----------------------+---------------+------+-----+---------+-------+| Field                 | Type          | Null | Key | Default | Extra |+-----------------------+---------------+------+-----+---------+-------+| Host                  | char(60)      | NO   | PRI |         |       || Db                    | char(64)      | NO   | PRI |         |       || User                  | char(16)      | NO   | PRI |         |       || Select_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Insert_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Update_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Delete_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Create_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Drop_priv             | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Grant_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       || References_priv       | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Index_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Alter_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Create_tmp_table_priv | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Lock_tables_priv      | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Create_view_priv      | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Show_view_priv        | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Create_routine_priv   | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Alter_routine_priv    | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Execute_priv          | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Event_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       || Trigger_priv          | enum(‘N‘,‘Y‘) | NO   |     | N       |       |+-----------------------+---------------+------+-----+---------+-------+

 

 

tables_priv表和columns_priv表
1. 同理,即便使用者有權對某一資料庫操作,那麼是不是對所有表都可以操作?對錶中的所有記錄都可以操作?
2. tables_priv表用來對單個表進行使用權限設定
3. columns_priv表用來對單條記錄(列)進行使用權限設定
4. 其包含的欄位主要有:
Host 主機名稱
Db    資料庫名
User 使用者名稱
Table_name表名
Table_priv對錶進行操作的許可權(select,insert,update,delete,create,drop,grant,references,index,alter)
Column_priv對記錄進行操作的許可權(select,insert,update,references)
Timestamp修改許可權的時間
Grantor  許可權的設定者

 

使用者的許可權分配規則
(1)Mysql的許可權分配是按照user表--->db表--->tables_priv表--->columns_priv表的順序進行分配的
(2)如果user表中某一許可權的值為Y,就不許要檢查往後的表了
(3)如果user表中某一許可權的值為N,則一次往後檢查每一張表

 

 

 

 

Mysql——許可權管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.