1. 程式人生 > >mysql 開發進階篇系列 51 許可權與安全(許可權表user,db詳細介紹 )

mysql 開發進階篇系列 51 許可權與安全(許可權表user,db詳細介紹 )

一.概述

  mysql 的許可權系統主要用來對連線到資料庫的使用者進行許可權驗證,以此來判斷此使用者是否屬於合法使用者,以及合法使用者給予的相應資料庫許可權。下面將介紹許可權系統的工作原理,以及將要熟練掌握賬號的管理和使用方法(mysql版本 5.7)。

  1.1  許可權系統的工作原理
    mysql 許可權系統通過兩個階段進行認證:(1) 對連線的使用者進行身份認證,合法的使用者通過認證,不合法的使用者拒絕連線;(2) 對通過認證的合法使用者賦予相應的許可權,使用者可以在這些許可權範圍內對資料庫做相應操作。

    對於身份認證, mysql是通過ip地址和使用者名稱聯合進行確認的, 例如在mysql安裝後預設建立的使用者

[email protected]表示使用者root 只能從本地(localhost)進行連線才可以通過認證,此使用者從其它任何主機上對資料庫進行的連線都將被拒絕。 可以說同樣一個使用者名稱,如果來自不同的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