MySql的用户权限
用戶管理
MySQL數據庫中的表與其他任何關系表沒有區別,都可以通過典型的SQL命令修改其結構和數據。可以使用GRANT和REVOKE命令。通過這些命令,可以創建和禁用用戶,可以在線授予和撤回用戶訪問權限。在5.0版本中增加了兩個新命令:CREATE USER和DROP USER。從而能更容易地增加新用戶、刪除和重命名用戶,還增加了第三個命令RENAME USER用于重命名現有的用戶。
使用CREATE USER命令創建用戶
CREATE USER用于創建新的MySQL賬戶。要使用CREATE USER語句,您必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。對于每個賬戶,CREATE USER會在沒有權限的mysql.user表中創建一條新記錄。如果賬戶已經存在,則出現錯誤。使用自選的IDENTIFIED BY子句,'可以為賬戶設置一個密碼。user和密碼的設置方法與GRANT語句一樣。其命令的原型如下:
CREATE USER user [IDENTIFIED BY [PASSWORD 'PASSWORD']?[,user [IDENTIFIED BY [PASSWORD'PASSWORD']]……
create user temp identified by '123456';使用DROP USER命令刪除用戶
如果存在一個或是多個賬戶被閑置,應當考慮將其刪除,確保不會用于可能的違法活動。利用DROP USER命令就能很容易地從權限表中刪除用戶的所有信息,即來自所有授權表的賬戶權限記錄。DROP USER命令原型如下:
DROP USER user [,user] ……
ps"DROP USER不能自動關閉任何打開的用戶對話;而且,如果用戶有打開的對話,此時取消用戶,則命令不會生效,直到用戶對話被關閉后才生效。一旦對話被關閉,用戶也被取消,此用戶再次試圖登錄時將會失敗。
使用RENAME USER命令重命名用戶
RENAMEUSER語句用于對原有MySQL賬戶進行重命名。RENAMEUSER語句的命令原型如下:
RENAME USER old_user TO new_user?[,old_user TO new_user] ……
ps:如果舊賬戶不存在或者新賬戶已存在,則會出現錯誤。
權限管理
GRANT和REVOKE命令
GRANT和REVOKE命令用來管理訪問權限,也可以用來創建和刪除用戶,但在MySQL5.0.2中可以利用CREATE USER和DROP USER命令更容易地實現這些任務。GRANT和REVOKE命令對于誰可以操作服務器及其內容的各個方面提供了多程度的控制,從誰可以關閉服務器,到誰可以修改特定表字段中的信息都能控制。
如果授權表擁有含有mixed-case數據庫或表名稱的權限記錄,并且lower_case_table_names系統變量已設置,則不能使用REVOKE撤銷權限,必須直接操縱授權表。(當lower_case_table_names已設置時,GRANT將不會創建此類記錄,但是此類記錄可能已經在設置變量之前被創建了。)
授予的權限可以分為多個層級:
ps:當用戶使用GRANT和REVOKE命令更改用戶權限后,退出MySQL系統,用戶使用新賬戶名登錄MySQL的時候,可能會因為沒有刷新用戶授權表而導致登錄錯誤。這是因為在用戶設置完賬號后,只有重新加載授權表才能使之前設置的授權表生效。使用FLUSH PRIVILEGES命令可以重載授權表。另外,需要注意的是,只有如“root”這樣擁有全部權限的用戶才可以執行此命令。當用戶重載授權表后,退出MySQL后,使用新創建的用戶名即可正常登錄MySQL。
MySQL數據庫安全技術的常見問題
權限更改何時生效
MySQL服務器啟動的時候以及使用GRANT和REVOKE語句的時候,服務器會自動讀取grant表。但是,既然我們知道這些權限保存在什么地方以及它們是如何保存的,就可以手動修改它們。當手動更新它們的時候,MySQL服務器將不會注意到它們已經被修改了。
我們必須向服務器指出已經對權限進行了修改,有3種方法可以實現了這個任務。可以在MySQL命令提示符下(必須以管理員的身份登錄進入)鍵入如下命令:
flush privileges;
mysqladmin flush-privileges
mysqladmin reload
此后,當用戶下次再連接的時候,系統將檢查全局級別權限;當下一個命令被執行時,將檢查數據庫級別的權限;而表級別和列級別權限將在用戶下次請求的時候被檢查。
設置賬戶密碼
(1)可以用mysqladmin命令在命令行指定密碼:
mysqladmin -u user_name -h host_name password "newpwd"
mysqladmin -u root?password?"newpass" mysqladmin -u root?password?oldpass?"newpass"mysqladmin命令重設服務器為host_name,且用戶名為user_name的用戶的密碼,新密碼為“newpwd”。
(2)通過set password命令設置用戶的密碼:
set password for 'jeffrey'@'localhost'=password('biscuit');
只有以root用戶(可以更新mysql數據庫的用戶)身份登錄,才可以更改其他用戶的密碼。如果你沒有以匿名用戶連接,省略for子句便可以更改自己的密碼:
set password=password('biscuit');
(3)在全局級別下使用GRANT USAGE語句(在*.*)指定某個賬戶的密碼,而不影響賬戶當前的權限:
GRANT USAGE ON *.* TO 'jeffrey'@'localhost' IDENTIFIED BY 'biscuit';
(4)在創建新賬戶時建立密碼,要為password列提供一個具體值:
mysql -uroot -p mysql ?--制定use mysql數據庫
INSERT INTO user(Host, User, Password)VALUES('localhost','jeffrey',PASSWORD('biscuit'));
FLUSH PRIVILEGES;
(5)更改已有賬戶的密碼,要應用UPDATE語句來設置password列值:
mysql -uroot -p mysql
UPDATE user SET Password=PASSWORD('bagel')WHERE Host='localhost' AND User='francis';
FLUSH PRIVILEGES;
ps:
使密碼更安全
(1)在管理級別,切忌不能將mysql.user表的訪問權限授予任何非管理賬戶。
(2)采用下面的命令模式來連接服務器,以此來隱藏你的密碼。命令如下:
mysql -uroot -p db_name
Enter password:********
“*”字符指定輸入密碼的地方,輸入的密碼是不可見的。因為它對其他用戶不可見,與在命令行上指定它相比,這樣進入你的密碼更安全。
(3)如果想要從非交互式方式下運行一個腳本調用一個客戶端,就沒有從終端輸入密碼的機會。其最安全的方法是讓客戶端程序提示輸入密碼或在適當保護的選項文件中指定密碼。
?
轉載于:https://www.cnblogs.com/wade-luffy/p/6046590.html
總結
以上是生活随笔為你收集整理的MySql的用户权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 晚上梦到认识的人是怎么回事
- 下一篇: 匿名函数与闭包