資料庫 MySQL許可權系統

2021-09-26 19:34:47 字數 3841 閱讀 9315

許可權表

通過網路連線伺服器的客戶對mysql資料庫的訪問由許可權表內容來控制。這些表位於mysql資料庫中,並在第1次安裝mysql的過程中初始化。共有5個許可權表:user、db、tables_priv、columns_priv和procs_priv。當mysql服務啟動時,首先讀取mysql中的許可權表,並將表中的資料裝入記憶體。當使用者進行訪問操作時,mysql會根據這些表中的資料進行相應的許可權控制。

許可權表user和db的結構和作用

user表是mysql中最重要的乙個許可權表,記錄允許連線到伺服器的賬號資訊。user表列出連線伺服器的使用者及其口令,並且指定他們有哪種全域性(超級使用者)許可權。在user表啟用的任何許可權均是全域性許可權,並適用於所有資料庫。mysql 5.7中的user表有45個字段,共分為4類:

db表也是mysql資料庫中非常重要的許可權表。db表中儲存了使用者對某個資料庫的操作許可權,決定使用者能從哪個主機訪問哪個資料庫。db許可權表對給定主機上資料庫級操作許可權進行更細緻的控制。字段大致可以分為兩類:

tables_priv表、columns_priv表和procs_priv表

tables_priv表用來對錶設定操作許可權,columns_priv表用來對錶的某一列設定許可權,procs_priv表可以對儲存過程和儲存函式設定操作許可權。

mysql許可權系統的工作原理

為了確保資料庫的安全性與完整性,系統並不希望每個使用者都可以執行所有的資料庫操作。當mysql允許乙個使用者執行各種操作時,它將首先核實使用者向mysql伺服器傳送的連線請求,然後確保使用者的操作請求是否被允許。mysql的訪問控制分為兩個階段:連線核實階段和請求核實階段。

連線核實階段

當使用者試圖連線mysql伺服器時,伺服器基於使用者提供的資訊來驗證使用者身份,如果不能通過身份驗證,伺服器就完全拒絕該使用者的訪問。如果能夠通過身份驗證,則伺服器接受連線,然後進入第2個階段等待使用者請求。mysql使用user表中的3個字段(host、user和authentication_string)檢測身份,伺服器只有在使用者提供主機名、使用者名稱和密碼並與user表中對應的字段值完全匹配時才接受連線。user表中的非空authentication_string值是經過加密的使用者密碼。mysql不以任何人均可見的純文字格式儲存密碼,相反,正在試圖連線的乙個使用者提供的密碼被加密(使用password()函式),並且與儲存在user表中的已經加密的版本比較。如果它們匹配,那麼說明密碼是正確的。

請求核實階段

一旦連線得到許可,伺服器便進入請求核實階段。在這一階段,mysql伺服器對當前使用者的每個操作都進行許可權檢查,判斷使用者是否有足夠的許可權來執行它。使用者的許可權儲存在user、db、tables_priv或columns_priv許可權表中。在mysql許可權表的結構中,user表在最頂層,是全域性級的。下面是db表,這兩個表是資料庫層級的。最後才是tables_priv表和columns_priv表,它們是表級和列級的。低等級的表只能是從高等級得到必要的範圍或許可權。

確認許可權時,mysql首先檢查user表,如果指定的許可權沒有在user表中被授權,則mysql伺服器檢查db表,在該層級的select許可權允許使用者檢視指定資料庫的所有表的資料。如果在該層級沒有找到限定的許可權,則mysql繼續檢查tables_priv表以及columns_priv表。如果所有許可權表都檢查完畢,依舊沒有找到允許的許可權操作,則mysql伺服器將返回錯誤資訊,使用者操作不能執行,操作失敗。

mysql通過向下層級的順序檢查許可權表(從user表到columns_priv表),並不是所有的許可權都要執行該過程。例如,乙個使用者登入到mysql伺服器後,只執行對mysql的管理操作,此時只涉及管理操作,mysql將只檢查user表。另外,如果請求的許可權不被允許,mysql就不會繼續檢查下一層級的表。

使用者管理

mysql的賬戶管理包括登入和退出mysql伺服器、建立使用者、刪除使用者、密碼管理和許可權管理等內容。通過賬戶管理,可以保證mysql資料庫的安全性。

# 建立新使用者

create user user [identified by [password]'password'] [,user [identified by [password]'password']] [,...];

或grant priv_type on database.table to user [identified by [password]'password'] [with grant option];

或insert into mysql.user (host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)

values('hostname','username',password('authentication_string'),'','','');

flush privileges; # 使使用者生效

# 刪除使用者

drop user user_name[,user_name] [,...];

或delete from mysql.user where host='hostname' and user='username';

# 修改使用者名稱

rename user old_user to new_user [,old_user to new_user] [,...];

# 修改密碼

mysqladmin -u username -h localhost -p password 'newpassword'; # 命令列

或update mysql.user set authentication_string=password('newpassword') where user='root' and host='localhost';

與set password [for user]= password('newpassword');

如果刪除的使用者已經建立了表、索引或其他的資料庫物件,它們將繼續保留,因為mysql並沒有記錄是誰建立了這些物件。

user的值必須以'user_name'@'host_name'的格式給定。

許可權管理

許可權管理主要是對登入到mysql的使用者進行許可權驗證。所有使用者的許可權都儲存在mysql的許可權表中。在mysql啟動時,伺服器將mysql資料庫中的許可權資訊讀入記憶體。

# 授權

grant priv_type [(column_list)] [,priv_type [(column_list)]] [,...]

on to user[identified by [password]'password'] [,user[identified by [password]'password']] [,...]

[with grant option];

with grant optiin:

grant option、max_queries_per_hour count、max_updates_per_hour count、

max_connections_per_hour count、max_user_per_hour count

# 收回許可權

revoke all privileges, grant option from 'username'@'hostname' [,'username'@'hostname'] [,...];

或revoke priv_type [(column_list)] [,priv_type [(column_list)]] [,...]

on from 'username'@'hostname' [,'username'@'hostname'] [,...];

# 檢視許可權

show grants for 'username'@'hostname';

(最近更新:2023年09月03日)

mysql資料庫賬號許可權 MySQL資料庫賬號許可權

本文主要向大家介紹了mysql資料庫賬號許可權 通過具體的內容向大家展現,希望對大家學習mysql資料庫有所幫助。mysql許可權分為全域性許可權 庫許可權 表許可權,對應於mysql庫裡面的user表 db表 tables priv表。grant all privileges on 操作mysql...

許可權系統 資料庫設計

字段型別 長度釋義 索引約束 menu id int5主鍵 唯一menu code varchar 20選單編碼 唯一 menu name varchar 20選單名稱 menu url varchar 30選單位址 唯一 menu css varchar 30選單圖示 非空 level int1 ...

mysql資料庫許可權管理

1 在mysql的user表中增加新的連線使用者帳號,使用grant語句進行授權 grant usage on to username localhost identified by password 這樣子建立的新使用者不具有任何許可權 2 賦予使用者對應的許可權 grant select,ins...