MySQL筆記-mysql使用者管理
使用者建立(create user)、修改(alter user)、分配許可權(grant)、刪除(drop user)都屬於資料庫管理語句中的使用者管理語句(Database Administration Statements——>Account Management Statements)。現記錄下簡單使用方法:
一、使用者建立
說明:
建立使用者時,mysql服務將自動分配一個認證外掛(預設為mysql_native_password,可在mysql.user表中檢視)。可使用IDENTIFIED WITH指定外掛(後面可選的AS子句指定密碼)。也可用IDENTIFIED BY 指定密碼(此時外掛即為預設的)。user格式為"userName"@"hostName",萬用字元'_'與'%'可用於hostName中,hostName的幾點說明:
1、localhost:表示本地主機;
2、127.0.0.1:IPv4的輪詢介面;
3、::1:IPv6的輪詢介面;
4、192.168.1.%:匹配一個子網的中所有主機。為保證訪問的安全性,所以mysql中此處%將不能匹配數字加點形式的主機名,如192.168.1.2.somewhere.com將不會被匹配。
5、對IPv4,可以使用子網掩碼,使該用於可通過子網中所有主機訪問。語法:host_ip/netmask,如:192.58.197.0/255.255.255.0。只有客戶端ip(client_ip)滿足client_ip&netmask=host_ip的客戶端主機可訪問。和第4條相似,但更加靈活,因為此處是三級網路結構。
6、建議DNS伺服器返回的主機名格式與account中設定的相同,以避免DNS返回格式導致的無法訪問錯誤。
CURRENT_USER或CURRENT_USER函式能快速返回當前的account。如:select CURRENT_USER;
簡單示例:
注:
1、建立使用者也可直接通過root根使用者操作mysql.user,新增使用者記錄,並分配許可權。
2、新建使用者後必須重啟mysql服務,新使用者才能登陸,否則提示1045錯誤:Access denied for...導致該錯誤的另一原因也可能是使用者沒有訪問許可權,即當前主機的hostName不在所訪問的資料庫伺服器的使用者資訊('userName'@'hostName')中的hostName中。
二、分配許可權
以root使用者登入mysql,查詢mysql資料庫中的user表,會發現,剛建立的使用者所有許可權的值都是預設的"N",所以需要分配許可權,才能執行SELECT等操作。語法:
簡單實踐:為新建的user_test使用者分配一個查詢與插入test.test_procedure表的許可權。
之後一定要重啟mysql服務,否則以新建使用者登入時會提示1045:Access denied...訪問取消錯誤。
以user_test登入並查詢具有許可權的表:
說明:
1、當試圖查詢mysql.user表時提示1142:查詢命令取消錯誤,因為沒許可權。
2、再次以root登入mysql,在mysql資料庫的user表中檢視為test_user分配的許可權,發現select與insert許可權值還是為N,也許是因為只是在某個表上分配了許可權的原因。
3、未演示對分配userA對某些user(如:userB、userC...)的管理許可權。分配後應該可以實現分層管理。
問題:
對只分配了某個表的select與insert許可權的使用者,也能對該表進行增刪改查等操作,且也能建新表,難道這些許可權是預設的?那為什麼mysql.user表中顯示的全是N?個人的理解是,其實建立的user也是資料庫管理員,只是級別比root低,只有將所有資料庫所有表的所有許可權配給user時,在mysql.user中該user的許可權才顯示為Y,進行了簡單實踐也卻是如此。
三、修改使用者
5.6.7版本只有一條(ALTER USER),且前面的版本沒有此項。必須要求有建立使用者許可權方可操作,換句話說,執行此命令的使用者要能管理其他使用者。
5.6.24文件說明:
翻譯:
該條語句表現為在mysql.user表中的password_expired列值被設為Y。在嚴格模型中,如果一個使用者的密碼expire(失效,期滿),則在會話期間的操作將導致錯誤(1820),直到該使用者重設密碼。
疑問:
管理員應該什麼時候用該語句,告訴使用者該改密碼呢?
四、刪除使用者
語法:
DROP user 'userName'@'hostName';
五、使用者代理
具有使用者代理許可權的使用者,可在被代理使用者允許登入的主機上登入被代理使用者可訪問的資料庫。分配使用者代理許可權,見上面分配許可權圖。
未實踐
注:MySQL中schema與database幾乎相同,但shemale是預設對所有使用者都有許可權的,無需分配許可權。如任意使用者A新建一個schema,則只能訪問資料庫databaseB的使用者B執行show databases也能看見A建的schema!