tft每日頭條

 > 生活

 > mysql系統權限和對象權限

mysql系統權限和對象權限

生活 更新时间:2024-12-26 13:52:13
概述

最近一周主要是在梳理Oracle、mysql、sqlserver的權限,所以今天順便總結下mysql用戶和權限管理。


MySQL用戶權限表

MySQL的認證是“用戶”加“主機”而權限是訪問資源對象,MySQL服務器通過權限表來控制用戶對數據庫的訪問,權限表存放在mysql數據庫中,由mysql_install_db腳本初始化。存儲賬戶權限信息表主要有:user,db,tables_priv,columns_priv,procs_priv這五張表(5.6之前還有host表,現在已經把host内容整合進user表),5張表其含義分别是:

1、user表

user表時MySQL中最重要的一個權限表,記錄允許連接到服務器的賬号信息,裡面的權限是全局級的。例如:一個用戶在user表中被授予了DELETE權限,則該用戶可以删除MySQL服務器上所有數據庫的任何記錄。MySQL5.6中user表有43個字段,這些字段大概可以分為4類,分别是用戶列、權限列、安全列和資源控制列,詳細解釋如下圖:

mysql系統權限和對象權限(詳解MySQL用戶和權限管理--5大用戶權限表)1

2、db表

db表存儲了用戶對某個數據庫的操作權限,決定用戶能從哪個主機存儲哪個數據庫。User表中存儲了某個主機對數據庫的操作權限,配置和db權限表對給定主機上數據庫級操作權限做更細緻的控制。這個權限表不受GRANT和REVOKE語句的影響,字段大緻可以分為兩類:用戶列和權限列,詳細解釋如下圖:

mysql系統權限和對象權限(詳解MySQL用戶和權限管理--5大用戶權限表)2

3、tables_priv and columns_priv表

tables_priv表用來對表設置操作權限,有8個字段分别是Host、Db、User、Table_name、Grantor、Timestamp、Table_priv和Column_priv,各個字段說明如下:

1) Host、Db、User和Table_name4個字段分表示主機名、數據庫名、用戶名和表明。

2) Grantor表示修改該記錄的用戶。

3) Timestamp字段表示修改該記錄的時間。

4) Table_priv表示對表的操作權限包括、select、insert、update、delete、create、drop、grant、references、index和alter。

5) Column_priv字段表示對表中的列的操作權限,包括select、insert、update和references。

4、procs_priv表

存儲過程和存儲函數相關的權限,分别是Host、Db、User、Routine_name、Routine_type、Grantor、Proc_priv和Timestamp,各個字段的說明如下:

1) Host、Db和User字段分别表示主機名、數據庫名和用戶名。Routine_name表示存儲過程或函數的名稱。

2) Routine_type表示存儲過程或函數的類型。

3) Routine_type字段有兩個值,分别是FUNCTION和PROCEDURE。FUNCTION表示這是一個函數;PROCEDURE表示這是一個存儲過程。

4) Grantor是插入或修改該記錄的用戶。

5) Proc_priv表示擁有的權限,包括Execute、Alter Routine、Grant這3種。

6) Timestamp表示記錄更新時間。


MySQL訪問控制兩階段

1、客戶端連接核實階段

客戶端連接核實階段,當連接MySQL服務器時,服務器基于用戶的身份以及用戶是否能通過正确的密碼身份驗證,來接受或拒絕連接。即客戶端用戶連接請求中會提供用戶名稱、主機地址和密碼,MySQL使用user表中的三個字段(Host、User、Password)執行身份檢查,服務器隻有在user表記錄的Host和User字段匹配客戶端主機名和用戶名,并且提供正确的面貌時才接受連接。如果連接核實沒有通過,服務器完全拒絕訪問;否則,服務器接受連接,然後進入階段2等待用戶請求。

2、客戶端操作核實階段

客戶端操作核實階段,當客戶端的連接請求被MySQL服務器端通過其身份認證後。那麼接下來就可以發送數據庫的操作命令給服務器端處理,服務器檢查用戶要執行的操作,在确認權限時,MySQL首先檢查user表,如果指定的權限沒有在user表中被授權;MySQL将檢查db表,db表時下一安全層級,其中的權限限定于數據庫層級,在該層級的SELECT權限允許用戶查看指定數據庫的所有表中的數據;如果在該層級沒有找到限定的權限,則MySQL繼續檢查tables_priv表以及columns_priv表,如果所有權限表都檢查完畢,但還是沒有找到允許的權限操作,MySQL将返回錯誤信息,用戶請求的操作不能執行,操作失敗。其過程大概如下圖:

mysql系統權限和對象權限(詳解MySQL用戶和權限管理--5大用戶權限表)3


MySQL權限管理

權限管理主要是對登錄到MySQL的用戶進行權限驗證,所有用戶的權限都存儲在MySQL的權限表中,不合理的權限規劃會給MySQL服務器帶來安全隐患。數據庫管理員要對所有用戶的權限進行合理規劃管理。MySQL權限系統的主要功能時證實連接到一台給定主機的用戶,并且賦予該用戶在數據庫上的SELECT/INSERT/UPDATE和DELETE權限。

1、MySQL權限說明

賬戶權限信息被存儲在MySQL數據庫的幾張權限表中,在MySQL啟動時,服務器将這些數據庫表中權限信息的内容讀入内存。其中GRANT和REVOKE語句所涉及的常用權限大緻如下這些:CREATE、DROP、SELECT、INSERT、UPDATE、DELETE、INDEX、ALTER、CREATE、ROUTINE、FILE等,還有一個特殊的proxy權限,是用來賦予某個用戶具有給他人賦予權限的權限。

2、MySQL用戶授權

授權就是為某個用戶授予權限,合理的授權可以保證數據庫的安全,MySQL中可以使用GRANT語句為用戶授予權限。授權可以分為多個層次:

全局層級:全局權限适用于一個給定服務器中的所有數據庫,這些權限存儲在mysql.user表中。

數據庫層級:數據庫權限适用于一個給定數據庫中的所有目标,這些權限存儲在mysql.db表中。

表層級:表權限适用于一個給定表中的所有列,這些權限存儲在mysql.tables_priv表中。

列層級:列權限使用于一個給定表中的單一列,這些權限存儲在mysql.columns_priv表中。

子程序層級:CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT權限适用于已存儲的子程序。這些權限可以被授予為全局層級和數據庫層級。而且,除了CREATE ROUTINE外,這些權限可以被授予子程序層級,并存儲在mysql.procs_priv表中。

PS:MySQL中必須擁有GRANT權限的用戶才可以執行GRANT語句。


後面會分享更多devops和DBA方面的内容,感興趣的朋友可以關注一下~

mysql系統權限和對象權限(詳解MySQL用戶和權限管理--5大用戶權限表)4

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved