mysql 許可權控制詳解,mysql許可權控制

來源:互聯網
上載者:User

mysql 許可權控制詳解,mysql許可權控制
概述

mysql許可權控制在不同的上下文和不同的操作水平上都可以進行控制,他們包括如下幾個
** 系統管理權限可以允許使用者管理mysql server的操作。這些許可權控制是全域的,不是針對某個特定的資料庫的
** 資料庫許可權對應到一個資料庫和裡面的對象。這些許可權被用來控制特定的資料庫或者全域的,他們能夠應用到所有的資料庫
** 資料庫物件的許可權對應到資料庫表,索引,視圖,和預存程序,可以對資料庫內部的某個對象進行授權控制。

許可權的儲存位置

** 帳號許可權資訊被儲存在mysql資料庫的user,db,tables_priv ,columns_priv ,procs_priv 表中。
** mysql啟動的時候讀取這些資訊到記憶體中去,或者在許可權變更生效的時候,重新讀取到記憶體中去

mysql 帳號管理

mysql 帳號名字由使用者名稱和主機名稱組成。這樣可以允許同已使用者在不同主機上分別控制許可權。這一部分描述如何分配賬戶名字包括特定的值和模糊
匹配規則,在sql語句中,create user, grant ,set password的時候,會用到這些規則:
- ‘user_name’@’host_name’ 就是賬戶名字的文法規則
- 僅僅包含使用者名稱的帳號等同於 ‘username’@’%’
- 如果使用者名稱是合法的字元,使用者名稱和主機名稱不必用引號引起來。在你的使用者名稱包含’-‘這樣的字元的時候,需要用引號引起來。或者說主機名稱有
萬用字元的時候需要引起來。
- 引號可以用單引號也可以用雙引號。
- 主機和使用者名稱必須分別被引號括起來,如果必須要括的話。
mysql在mysql資料庫中分別用兩個列去儲存使用者名稱和主機名稱:
- 使用者表每個賬戶一行記錄,次表也表示了帳號有哪些全域許可權。
- 其他授權表表示了帳號擁有的資料庫和資料庫內的對象。這些表都有使用者名稱和主機列。每行的賬戶資訊和user表的賬戶資訊是奕揚的。
使用者名稱和主機名稱可以包含特殊字元或者萬用字元,下面是這些規則:
使用者名稱要麼是一個非Null 字元串字面上必須匹配連接字串中指名的使用者名稱,或者一個Null 字元串就會匹配人戶使用者名稱。空使用者名稱是一個匿名使用者。
主機名稱也可以又好多形式,或者萬用字元:
- 主機名稱可以是一個IP地址或者一個localhost樣的字串。
- %和sql中的like的效果是一樣的。例如 ’%.mysql.com’ 就會匹配 a.mysql.com.

許可權控制階段1:串連校正

當你嘗試去串連到mysql伺服器,伺服器基於下面兩點條件去接受或者拒絕串連:
- 你的身份標識以及正確的密碼
- 你的帳號是否被鎖定了
伺服器先校正密碼是否正確,然後校正是否鎖定。任何一個步驟失敗,伺服器將會拒絕串連。如果通過教研,伺服器接受串連,然後進入第二階段
並且等候請求。
認證檢查線檢查user表的三個列,host,user,password。鎖定狀態是在user表的account_locked列中記錄著的。帳號鎖定狀態可以通過alter user
語句來變更。
你的身份由兩部分來組成,你串連的客戶主機以及你的mysql使用者名稱。如果使用者名稱不空,則必須全字元匹配才可以,如果使用者名稱是空的,則匹配
任何使用者。如果使用者表匹配到一個空使用者名稱,這個使用者被認為是一個匿名使用者,二不是客戶實際提供的。這意味著空使用者名稱是用來進一步檢查用的
也就是階段2.
密碼可以為空白,這個不是一個萬用字元,不意味著匹配任何密碼。它的意思是使用者必須無密碼串連。如果服務起授權一個客戶都安使用一個外掛程式,這樣
該外掛程式實現的認證體系或許沒有用密碼列。在這樣的情況下,外部密碼也可以用來去認證mysql伺服器。
非空密碼都是加密儲存的,mysql沒有儲存任何純文字密碼。並且,使用者提供的密碼也是被加密的。這個加密的密碼後來在串連過程中,來檢查密碼是
否正確。
從mysql的觀點來看,加密的密碼才是真正的密碼,所以不要告訴任何人這個加密的密碼。
如果在user表中有多行被匹配,伺服器必須決定用哪一個,它的規則是這樣的:
- 任何時候伺服器讀取使用者表到記憶體中的時候,它會排序。
- 伺服器檢查的伺候伺服器按行順序去檢查
- 伺服器使用第一個匹配的行
伺服器排序的規則是字面的在前面,統配的在後面。

許可權控制階段2:請求校正

當通過了串連校正,你和伺服器建立了串連後,伺服器進入許可權控制的第二個階段。你的每個請求,伺服器決定出你想做什麼操作,然後檢查你是否有
許可權去做。此時,grant 表的privilege列就該出場了。這些列可以出自 user,db,tables_priv,columns_priv,procs_priv。不再細講這些表了。

什麼時候去許可權變更生效

當伺服器啟動的時候,grant表的資料被讀入記憶體。如果你使用賬戶管理語句去更新許可權控制,伺服器將會知道這些變更,然後重新讀取它們。如果你
直接用sql語句去更新這些表,你的變更不會生效知道你重新啟動伺服器或者你告訴伺服器去重建緩衝。
你可以通過執行一個重新整理許可權操作來通知伺服器重建緩衝。下面三個語句都可以達到效果:
- flush_privileges
- mysqladmin_flush-privileges
- mysqladmin_reload
如果啟動參數是 –skip-grant-tables ,那麼伺服器不再校正任何許可權,很不安全。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.