1. 程式人生 > 實用技巧 >MySQL學習筆記(四)

MySQL學習筆記(四)

MySQL許可權工作原理

使用者識別方式
  MySQL為了安全性考慮,採⽤主機名+⽤戶名來判斷⼀個⽤戶的⾝份,因為在互聯⽹中很難通過⽤戶名來判斷⼀個⽤戶的⾝份,但是我們可以通過IP或者主機名判斷⼀臺機器,某個⽤戶通過這個機器過來的,我們可以識別為⼀個⽤戶,所以MySQL中採⽤⽤戶名+主機名來識別⽤戶的⾝份。當⼀個⽤戶對MySQL傳送指令的時候,MySQL就是通過⽤戶名和來源(主機)來斷定⽤戶的許可權。
許可權驗證方式

  1. 階段1:連線資料庫,此時MySQL會根據你的⽤戶名及你的來源(IP或者主機名稱)判斷是否有許可權連線
  2. 階段2:對MySQL伺服器發起請求操作,如CREATE TABLE、SELECT、DELETE、UPDATE、CREATE INDEX等操作,此時MySQL會判斷你是否有許可權操作這些指令

許可權生效時間
  ⽤戶及許可權資訊放在庫名為mysql的庫中,MySQL啟動時,這些內容被讀進記憶體並且從此時⽣效,所以如果通過直接操作這些表來修改⽤戶及許可權資訊的,需要重啟MySQL或者執⾏FLUSH PRIVILEDGE;才可以⽣效。⽤戶登入之後,MySQL會和當前⽤戶之間建立⼀個連線,此時⽤戶相關的許可權資訊都儲存在這個連線中,存放在記憶體中,此時如果有其他地⽅修改了當前⽤戶的許可權,這些變更的許可權會在下⼀次登入時才會⽣效。

建立和刪除使用者及管理使用者許可權

  使用者資訊儲存在mysql資料庫下的user表中,表中User欄位表示使用者名稱,Host欄位表示主機名,authcation_string欄位表示登入密碼。
可使用CREATE USER 和DROP USER來建立和刪除使用者,也可通過直接操縱表的方式來建立和刪除使用者

  • 檢視MySQL中所有使用者資訊

  • 通過CREATE USER建立

  CREATE USER常用語法如下,詳細語法可通過help CREATE USER命令檢視。
CREATE USER <使用者名稱>[@<主機名>] IDENTIFIED BY '<密碼>';
示例:

  • 修改使用者密碼

  1. 通過SET PASSWORD 指令修改

  SET PASSWORD指令語法如下
SET PASSWORD [FOR <使用者名稱@主機名>] auth_option [REPLACE '<當前密碼>'] [RETAIN CURRENT PASSWORD];


其中auth_option: { = '<密碼>'| TO RANDOM}

2. #### 通過操縱user表修改

注: 通過表修改需要FLUSH PRIVILEDGES或者重新登入才生效

  • 檢視使用者許可權

  通過SHOW GRANTS命令檢視,命令語法如下:
SHOW GRANTS [FOR <使用者名稱@主機名>];
示例:

  • 授予使用者許可權

  使用GRANT命令來給使用者授權,該命令常用語法如下,具體語法可使用help GRANT檢視
GRANT priv_type[(<欄位列表>)] [,priv_type[(<欄位列表>)]]... ON priv_level TO <使用者>[,<使用者>]...
priv_type:{ALL |SELECT | INSERT | UPDATE | DELETE | CREATE | DROP | ALTER | 其他許可權型別可檢視手冊}
priv_level: { *| *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name}
示例:


  • 撤銷使用者許可權

  使用REVOKE命令來給使用者授權,該命令常用語法如下,具體語法可使用help GRANT檢視
REVOKE priv_type[(<欄位列表>)] [,priv_type[(<欄位列表>)]]...ON priv_level FROM <使用者>[,<使用者>]...

  • 刪除使用者

1. 通過DEOP USER 刪除使用者

  DROP USER常用語法如下,詳細語法可通過help DROP USER命令檢視。
DROP USER <使用者名稱>[@<主機名>]
示例:

2. 通過操縱user表刪除使用者

示例:

注: 通過表修改需要FLUSH PRIVILEDGES或者重新登入才生效

授權原則說明

  • 只授予能滿⾜需要的最⼩許可權,防⽌⽤戶⼲壞事,⽐如⽤戶只是需要查詢,那就只給
    SELECT許可權就可以了,不要給⽤戶賦予UPDATE、INSERT或者DELETE許可權
  • 建立⽤戶的時候限制⽤戶的登入主機,⼀般是限制成指定IP或者內⽹IP段
  • 初始化資料庫的時候刪除沒有密碼的⽤戶,安裝完資料庫的時候會⾃動建立⼀些⽤
    戶,這些⽤戶預設沒有密碼
  • 為每個⽤戶設定滿⾜密碼複雜度的密碼
  • 定期清理不需要的⽤戶,回收許可權或者刪除⽤戶