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!
總結
以上是生活随笔為你收集整理的MySQL笔记-mysql用户管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言删除链表的倒数第N个节点
- 下一篇: 三峡大学计算机学院毕业答辩问题,毕业答辩