檢視( 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...