mysql許可權控制在不同的上下文和不同的操作水平上都能夠進行控制,他們包括例如以下幾個
** 管理許可權能夠同意使用者管理mysql server的操作。
這些許可權控制是全域性的,不是針對某個特定的資料庫的
** 資料庫許可權相應到乙個資料庫和裡面的物件。這些許可權被用來控制特定的資料庫或者全域性的,他們能夠應用到全部的資料庫
** 資料庫物件的許可權相應到資料庫表,索引。檢視。和儲存過程,能夠對資料庫內部的某個物件進行授權控制。
** 賬號許可權資訊被儲存在mysql資料庫的user,db,tables_priv ,columns_priv ,procs_priv 表中。
** mysql啟動的時候讀取這些資訊到記憶體中去。或者在許可權變更生效的時候,又一次讀取到記憶體中去
mysql 賬號名字由username和主機名組成。這樣能夠同意同已使用者在不同主機上分別控制許可權。
這一部分描寫敘述怎樣分配賬戶名字包括特定的值和模糊
匹配規則,在sql語句中,create user, grant ,set password的時候。會用到這些規則:
- 『user_name』@』host_name』 就是賬戶名字的語法規則
- 只包括username的賬號等同於 『username』@』%』
- 假設username是合法的字元,username和主機名不必用引號引起來。
在你的username包括』-『這種字元的時候,須要用引號引起來。或者說主機名有
萬用字元的時候須要引起來。
- 引號能夠用單引號也能夠用雙引號。
- 主機和username必須分別被引號括起來。假設必須要括的話。
mysql在mysql資料庫中分別用兩個列去儲存username和主機名:
- 使用者表每乙個賬戶一行記錄,此表也表示了賬號有哪些全域性許可權。
- 其它授權表表示了賬號擁有的資料庫和資料庫內的物件。這些表都實username和主機列。每行的賬戶資訊和user表的賬戶資訊是奕揚的。
username和主機名能夠包括特殊字元或者萬用字元,以下是這些規則:
username要麼是乙個非空字串字面上必須匹配連線字串中指名的username,或者乙個空字串就會匹配人戶username。空username是乙個匿名使用者。
主機名也能夠又好多形式。或者萬用字元:
- 主機名能夠是乙個ip位址或者乙個localhost樣的字串。
- %和sql中的like的效果是一樣的。比如 』%.mysql.com』 就會匹配 a.mysql.com.
當你嘗試去連線到mysqlserver,server基於以下兩點條件去接受或者拒絕連線:
- 你的身份標識以及正確的password
- 你的賬號是否被鎖定了
server先校驗password是否正確,然後校驗是否鎖定。
不論什麼乙個步驟失敗,server將會拒絕連線。
假設通過校驗。server接受連線。然後進入第二階段而且等候請求。
認證檢查先檢查user表的三個列。host,user,password。鎖定狀態是在user表的account_locked列中記錄著的。賬號鎖定狀態能夠通過alter user語句來變更。
你的身份由兩部分來組成,你連線的客戶主機以及你的mysqlusername。假設username不空,則必須全字元匹配才幹夠,假設username是空的,則匹配不論什麼使用者。假設使用者表匹配到乙個空username,這個使用者被覺得是乙個匿名使用者。二不是客戶實際提供的。這意味著空username是用來進一步檢查用的也就是階段2.
password能夠為空,這個不是乙個萬用字元。不意味著匹配不論什麼password。它的意思是使用者必須無password連線。假設服務起授權乙個客戶都安使用乙個外掛程式。這樣
該外掛程式實現的認證體系也許沒實用password列。在這種情況下,外部password也能夠用來去認證mysqlserver。
非空password都是加密儲存的,mysql沒有儲存不論什麼明文password。而且使用者提供的password也是被加密的。這個加密的password後來在連線過程中,來檢查password是否正確。
從mysql的觀點來看,加密的password才是真正的password,所以不要告訴不論什麼人這個加密的password。
假設在user表中有多行被匹配,server必須決定用哪乙個,它的規則是這種:
- 不論什麼時候server讀取使用者表到記憶體中的時候,它會排序。
- server檢查的侍奉server按行順序去檢查
- server使用第乙個匹配的行
server排序的規則是無萬用字元的在前面,統配的在後面。
當通過了連線校驗,你和server建立了連線後,server進入許可權控制的第二個階段。你的每乙個請求,server決定出你想做什麼操作,然後檢查你是否有
許可權去做。此時。grant 表的privilege列就該出場了。這些列能夠出自 user,db,tables_priv,columns_priv,procs_priv。不再細講這些表了。
當server啟動的時候,grant表的資料被讀入記憶體。
假設你使用賬戶管理語句去更新許可權控制,server將會知道這些變更,然後又一次讀取它們。假設你
直接用sql語句去更新這些表,你的變更不會生效,直到你又一次啟動server或者你告訴server去重建快取。
你能夠通過執行乙個重新整理許可權操作來通知server重建快取。以下三個語句都能夠達到效果:
- flush_privileges
- mysqladmin_flush-privileges
- mysqladmin_reload
假設啟動引數是 –skip-grant-tables ,那麼server不再校驗不論什麼許可權,非常不安全。
mysql 許可權控制
mysql許可權檢查原理 使用者 伺服器,分為兩個階段 1.使用者有沒有許可權連線上來 2.有沒有許可權執行此操作 增刪查改 對於1 伺服器如何判斷使用者有沒有許可權連線 根據host,user,password這三個引數判斷的,使用者的這三個資訊儲存在mysql.user表中 修改host域,使i...
mysql 許可權控制
1 mysql的許可權是,從某處來的使用者對某物件的許可權。2 mysql的許可權採用白名單策略,指定使用者能做什麼,沒有指定的都不能做。3 許可權校驗分成兩個步驟 a 能不能連線,檢查從 來,使用者名稱和密碼,常見錯誤 error 1045 28000 access denied for user...
linux diff具體解釋
diff是unix系統的乙個非常重要的工具程式。它用來比較兩個文字檔案的差異,是 版本號管理的基石之中的乙個。你在命令列下,輸入 diff 變動前的檔案 變動後的檔案 diff就會告訴你,這兩個檔案有何差異。它的顯示結果不太好懂,以下我就來說明,怎樣讀懂diff。一 diff的三種格式 因為歷史原因...