MySQL資料庫許可權體系入門 1 工作原理

2021-05-27 22:03:41 字數 1688 閱讀 2224

檢視( 337 ) /

評分( 0 / 0 )

oracle等大型資料庫的許可權驗證,一般都是

xx擁有

zz的許可權,而

mysql

資料庫的許可權驗證在設計階段就體現的有所不同,它在這中間又加了一級緯度,變成:從yy

來的那個

xx擁有

zz的許可權,如果換乙個角度來描述,也可以說是:

xx只有從

yy連線過來,才能夠訪問

zz。這樣理解的話,就跟

oracle

這類資料庫的身份驗證機制相同了,只不過

oracle

這類資料庫中,預設是不加

yy這一層的

(如果想加當然也可以支援

),而在

mysql

中,yy

成了乙個必選項。

在本文正式開始前先描述這樣一段,並不是想說mysql

有多麼高階或先進,只是想表達這樣一種看法,

mysql

確實有所不同。

ok,接下來,跟隨三思一起,進入

mysql

的許可權世界吧

~~~~

所有許可權認證的根本目地,都是為了保證使用者只能做允許它做的事情,mysql

也不例外,大家

(範指資料庫產品

)實現的原理也都差不多,只不過機制上稍有差異,在許可權粒度控制上有所不同。

mysql資料庫對許可權的驗證有兩個層面:

l 能不能連線:主要由mysql.user,mysql.db,mysql.host

三個字典表控制

(事實上截止到

5.1版本,

host

表也基本沒啥用,主要由

user,db

兩表控制);

l 能不能執行操作:這個複雜一點點,除了上面三個字典表外,另外還有mysql.tables_priv

、mysql.columns_priv

、mysql.proc_priv

三個字典表做更細粒度的控制。

由上可以看出,mysql

資料庫主要是通過這六個字典表,來實現不同粒度的許可權需求,關於這幾個檢視後面會有章節詳細描述,這裡簡要介紹其處理邏輯。

mysql啟動時將這幾個表中的內容讀到記憶體裡,當有使用者連線或執行操作時,根據記憶體中的資料來檢查使用者是否有許可權執行相應的操作。

注意,如果你讀的足夠認真並且大腦持續在進行思考,這會兒應該會產生這樣的乙個疑問:如果使用者連線上資料庫後,又有其它人對其許可權進行了修改操作,是否會即時生效呢?這個問題的答案是:看情況!

l 如果是通過grant

、revoke

、set password

、rename user

等命令執行的修改,那麼會馬上生效,這些命令將觸發系統重新載入授權表

(grant tables)。

l 如果是手動修改字典表方式(insert,update,delete)

,那麼許可權並不會馬上生效,除非重啟伺服器,或管理使用者顯式的重新裝載了授權表。

授權表被重新裝載後,對當前已連線的客戶端影響如下:

l 表或列的許可權將在客戶端下次執行操作時生效;

l 資料庫的許可權將在客戶端執行use db_name

語句時生效;

l 全域性許可權和密碼修改對已連線的客戶端無效,下次連線時才會生效。

mysql 資料庫許可權體系

例見 mysql 建立使用者報錯error 1396 hy000 operation create user failed for x x 因為從mysql.user中刪除建立過的同名使用者後,並沒有重新整理許可權,所以在重新建立同名使用者時,報錯。如果指定all on 無法收回 db.的許可權,這...

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

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

MySQL資料庫總結(1)入門語句

把以前總結在有道雲筆記的知識移到部落格上,順便複習一下 伺服器位址 可用ip,網域名稱 埠 3306 使用者名稱 密碼 mysql h localhost uusername ppasswd mysql h localhost u root p 回車 輸入密碼 h 如果不寫,則預設連localhos...