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


一.概述

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

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

    對於身份認證, mysql是通過ip地址和用戶名聯合進行確認的, 例如在mysql安裝后默認創建的用戶root@localhost表示用戶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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM