MySQL用戶和數(shù)據(jù)權限管理詳解
1、管理用戶
1.1、添加用戶
可以使用CREATE USER語句添加一個或多個用戶,并設置相應的密碼
語法格式:
CREATE USER 用戶名 [IDENTIFIED BY [PASSWORD]'密碼']
CREATE USER用于創(chuàng)建新的MySQL賬戶。CREATE USER會在系統(tǒng)本身的mysql數(shù)據(jù)庫的user表中添加一個新記錄。要使用CREATE USER,必須擁有mysql數(shù)據(jù)庫的全局CREATE USER權限或INSERT權限。如果賬戶已經(jīng)存在,則出現(xiàn)錯誤(報錯)。
例:添加一個新用戶usr1,密碼為123456
CREATE USER usr1@localhost IDENTIFIED BY'123456';
在用戶名的后面聲明了關鍵字localhost。該關鍵字指定用戶創(chuàng)建所使用的MySQL服務器來自于主機。如果一個用戶名和主機名中包含特殊符號_或通配符%,則需要用單引號將其括起,%表示一組主機。
1.2、刪除用戶
語法格式:
DROP USER 用戶名
要使用該語句,必須有mysql數(shù)據(jù)庫的全局CREATE USER權限或DELETE權限。DROP USER語句用于刪除一個或多個MySQL賬戶,并取消其權限。
例:刪除用戶usr1
DROP USER usr1@localhost;
1.3、修改用戶名
語法格式:
RENAME USER 舊用戶名 TO 新用戶名
要使用該語句,必須有全局CREATE USER權限或mysql數(shù)據(jù)庫的UPDATE權限。如果舊賬戶不存在或者新賬戶已存在,則會出現(xiàn)錯誤(報錯)。該語句用于對原有MySQL賬戶進行重命名,可以一次對多個用戶更名。
例:將用戶usr1和usr2的名字分別修改為user1和user2
RENAME USER usr1@localhost TO user1@localhost, usr2@localhost TO user2@localhost;
1.4、修改密碼
語法格式:
SET PASSWORD [ FOR 用戶名 ]=PASSWORD('新密碼')
如果不加FOR用戶名,表示修改當前用戶的密碼。加了FOR用戶名則是修改當前主機上的特定用戶的密碼。用戶名的值必須以user_name@host_name的格式給定。
例:將用戶user1的密碼修改為king
SET PASSWORD FOR user1@localhost=PASSWORD('king');
2、授予權限和回收權限
2.1、授予權限
新的SQL用戶不允許訪問屬于其他SQL用戶的表,也不能立即創(chuàng)建自己的表,它必須被授權,可以授予的權限有以下幾組:
1、列權限:和表中的一個具體列相關。例如,使用UPDATE語句更新表Book書號列值的權限。
2、表權限:和一個具體表中的所有數(shù)據(jù)相關。例如,使用SELECT語句查詢表Book所有數(shù)據(jù)的權限。
3、數(shù)據(jù)庫權限:和一個具體的數(shù)據(jù)庫中所有表相關。例如,在已有的Bookstore數(shù)據(jù)庫中創(chuàng)建新表的權限。
4、用戶權限:和MySQL所有的數(shù)據(jù)庫相關。例如,刪除已有的數(shù)據(jù)庫或者創(chuàng)建一個新數(shù)據(jù)庫的權限。
給某用戶授予權限可以使用GRANT語句。使用SHOW GRANTS語句可以查看當前賬戶擁有的權限。
語法格式:
GRANT 權限1[(列名列表1)][,權限2[(列名列表2)]...
ON [目標]{表名 | * | *.* | 庫名.*}
TO 用戶1 [IDENTIFIED BY [PASSWORD]'密碼1']
[,用戶2 [IDENTIFIED BY [PASSWORD]'密碼2']]...
[WITH 權限限制1[權限限制2]...]
2.1.1、授予表權限
授予表權限時,權限可以是以下值:
1、SELECT:授予用戶使用SELECT語句訪問特定表(或視圖)的權力。對于視圖,用戶必須對視圖中指定的每個表(或視圖)都有SELECT權限。
2、INSERT:授予用戶使用INSERT語句向一個特定表中添加行的權力
3、DELETE:授予用戶使用DELETE語句向一個特定表中刪除行的權力
4、UPDATE:授予用戶使用UPDATE語句修改特定表中值的權力
5、REFERENCES:授予用戶創(chuàng)建一個外鍵來參照特定的表的權力
6、CREATE:授予用戶使用特定的名字創(chuàng)建一個表的權力
7、ALTER:授予用戶使用ALTER TABLE語句修改表的權力
8、INDEX:授予用戶在表上定義索引的權力
9、DROP:授予用戶刪除表的權力
10、ALL或ALL PRIVILEGES:表示所有權限
在授予表權限時,ON關鍵字后面跟表名,指定授予權限的為表名或視圖名
例:授予用戶user1在Book表上的SELECT權限
USE Bookstore; GRANT SELECT ON Book TO user1@localhost;
這里假設是在root用戶輸入了這些語句,這樣用戶user1就可以使用SELECT語句來查詢Book表,而不管是誰創(chuàng)建了該表。
若在TO子句中給存在的用戶指定密碼,則新密碼將原密碼覆蓋。如果權限授予了一個不存在的用戶,MySQL會自動執(zhí)行一條CREATE USER語句來創(chuàng)建這個用戶,但必須為該用戶指定密碼。
例:用戶liu和zhang不存在,授予他們在Book表上的SELECT和UPDATE權限
GRANT SELECT,UPDATE ON Book TO liu@localhost IDENTIFIED BY'123456', zhang@localhost IDENTIFIED BY'123';
2.1.2、授予列權限
對于列權限,權限的值只能取SELECT、INSERT和UPDATE。權限的后面需要加上列名列表。
例:授予user1在Book表上的圖書編號列和書名列的UPDATE權限。
GRANT UPDATE(圖書編號,書名) ON Book TO user1@localhost;
2.1.3、授予數(shù)據(jù)庫權限
表權限適用于一個特定的表,MySQL還支持針對整個數(shù)據(jù)庫的權限。授予數(shù)據(jù)庫權限時,權限可以是以下值:
1、SELECT:授予用戶使用SELECT語句訪問特定數(shù)據(jù)庫中所有表和視圖的權力
2、INSERT:授予用戶使用INSERT語句向特定數(shù)據(jù)庫所有表中添加行的權力
3、DELETE:授予用戶使用DELETE語句在特定數(shù)據(jù)庫所有表中刪除行的權力
4、UPDATE:授予用戶使用UPDATE語句更新特定數(shù)據(jù)庫所有表中值的權力
5、REFERENCES:授予用戶創(chuàng)建指向特定數(shù)據(jù)庫中的表外鍵的權力
6、CREATE:授予用戶使用CREATE TABLE語句在特定數(shù)據(jù)庫中創(chuàng)建新表的權力
7、ALTER:授予用戶使用ALTER TABLE語句修改特定數(shù)據(jù)庫中所有表的結構的權力
8、INDEX:授予用戶在特定數(shù)據(jù)庫中的所有表上定義和刪除索引的權力
9、DROP:授予用戶刪除特定數(shù)據(jù)庫中所有表和視圖的權力
10、CREATE TEMPORARY TABLES:授予用戶在特定數(shù)據(jù)庫中創(chuàng)建臨時表的權力
11、CREATE VIEW:授予用戶在特定數(shù)據(jù)庫中創(chuàng)建新視圖的權力
12、SHOW VIEW:授予用戶查看特定數(shù)據(jù)庫中已有視圖的視圖定義的權力
13、CREATE ROUTINE:授予用戶為特定數(shù)據(jù)庫創(chuàng)建存儲過程和存儲函數(shù)的權力
14、ALTER ROUTINE:授予用戶更新和刪除數(shù)據(jù)庫中已有存儲過程和存儲函數(shù)的權力
15、EXECUTE ROUTINE:授予用戶調用特定數(shù)據(jù)庫的存儲過程和存儲函數(shù)的權力
16、LOOK TABLES:授予用戶鎖定特定數(shù)據(jù)庫中已有表的權力
17、ALL或ALL PRIVILEGES:表示以上所有權限
在GRANT語法格式中,授予數(shù)據(jù)庫權限時ON關鍵字后面跟*和“庫名.*”。*表示當前數(shù)據(jù)庫中的所有表。“庫名.*”表示某個數(shù)據(jù)庫中的所有表。
例:授予user1在Bookstore數(shù)據(jù)庫中所有表的SELECT權限
GRANT SELECT ON Bookstore.* TO user1@localhost;
2.1.4、授予用戶權限
最有效率的權限就是用戶權限,可以將授予數(shù)據(jù)庫的權限直接授予用戶,使用戶獲得對服務器上所有數(shù)據(jù)庫的該權限。
MySQL授予用戶權限時權限還可以是以下值:
1、CREATE USER:授予用戶創(chuàng)建和刪除新用戶的權限
2、SHOW DATABASES:授予用戶使用SHOW DATABASES語句查看所有已有數(shù)據(jù)庫的定義的權力
在GRANT語法格式中,授予用戶權限時ON子句中使用“*.*”,表示所有數(shù)據(jù)庫的所有表
例:授予user2對所有數(shù)據(jù)庫中所有表的CREATE、ALTERT和DROP權限
GRANT CREATE,ALTER,DROP ON *.* TO user2@localhost IDENTIFIED BY'123456';
例:授予user2創(chuàng)建新用戶的權限
GRANT CREATE USER ON *.* TO user2@localhost;
2.2、權限的轉移和限制
GRANT語句的最后可以使用WITH子句。如果指定權限限制為GRANT OPTION,則表示TO子句中指定的所有用戶都有把自己所擁有的權限授予其他用戶的權力,而不管其他用戶是否擁有該權限。
例:授予user3在Book表上的SELECT權限,并允許其將該權限授予其他用戶
GRANT SELECT ON Bookstore.Book TO user3@localhost IDENTIFIED BY'123456' WITH GRANT OPTION;
使用了WITH GRANT OPTION子句后,如果user3在該表上還擁有其他權限,他可以將其他權限也授予其他用戶而不僅限于SELECT。
WITH子句后的權限限制也可以對一個用戶授予使用限制,其中,MAX_QUERIES_PER_HOUR次數(shù)表示每小時可以查詢數(shù)據(jù)庫的次數(shù)。
MAX_CONNECTIONS_PER_HOUR次數(shù)表示每小時可以連接數(shù)據(jù)庫的次數(shù)。
MAX_UPDATES_PES_HOUR次數(shù)表示每小時可以修改數(shù)據(jù)庫的次數(shù)。
MAX_USER_CONNECTIONS次數(shù)表示同時連接MySQL的最大用戶數(shù)。
次數(shù)是一個數(shù)值,對于前3個權限限制指定,次數(shù)如果為0則表示不起限制作用。
例:授予D每小時只能處理一條SELECT語句的權限
GRANT SELECT ON Book TO D@localhost WITH MAX_QUERIES_PER_HOUR 1;
2.3、回收權限
要從一個用戶回收權限,但不從mysql數(shù)據(jù)庫的user表中刪除該用戶,可以使用REVOKE語句,該語句和GRANT語句格式相似,但具有相反的效果。要使用REVOKE語句,用戶必須擁有mysql數(shù)據(jù)庫的全局CREATE USER權限或UPDATE權限。
語法格式:
REVOKE 權限[(列名列表)]...
ON {表名 | * | *.* | 庫名.* }
FROM 用戶...
或
REVOKE ALL PRIVILEGES,GRANT OPTION FROM 用戶
第一種格式用來回收用戶的某些特定權限,第二種格式回收用戶的所有權限
例:回收用戶user在Book表上的SELECT權限
REVOKE SELECT ON Book FROM user@localhost;
到此這篇關于MySQL用戶和數(shù)據(jù)權限管理詳解的文章就介紹到這了,更多相關MySQL權限管理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解如何用SQL取出字段內是json的數(shù)據(jù)
數(shù)據(jù)庫中會遇到字段里面存的JSON結果的數(shù)據(jù),那么如果我們想直接取到JSON里的值該怎么辦呢?其實SQL自帶的函數(shù)就可解決本文就詳細的給大家介紹了如何用SQL取出字段內是json的數(shù)據(jù),需要的朋友可以參考下2023-10-10MySQL SELECT同時UPDATE同一張表問題發(fā)生及解決
例如用統(tǒng)計數(shù)據(jù)更新表的字段(此時需要用group子句返回統(tǒng)計值),從某一條記錄的字段update另一條記錄,而不必使用非標準的語句,等等感興趣的朋友可以參考下哈2013-03-03Mysql 5.7.18 解壓版下載安裝及啟動mysql服務的圖文詳解
這篇文章主要介紹了Mysql 5.7.18 解壓版下載安裝及啟動mysql服務的圖文詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05MySQL5.6 GTID模式下同步復制報錯不能跳過的解決方法
搭建虛擬機centos6.0, mysql5.6.10主從復制,死活不同步,搞了一整天找到這篇文章終于OK了,特分享一下,需要的朋友可以參考下2020-04-04IDEA 鏈接Mysql數(shù)據(jù)庫并執(zhí)行查詢操作的完整代碼
這篇文章主要介紹了IDEA 鏈接Mysql數(shù)據(jù)庫并執(zhí)行查詢操作的完整代碼,代碼不難,詳細大家看完本文肯定有意向不到的收獲,感興趣的朋友跟隨小編一起看看吧2021-05-05簡單實現(xiàn)MySQL服務器的優(yōu)化配置方法
我們今天主要向大家描述的是MySQL服務器的優(yōu)化配置的時機操作步驟,以及在MySQL服務器的優(yōu)化配置的的過程中值得我們主義的事項的介紹。2011-03-03mysql(master/slave)主從復制原理及配置圖文詳解
這篇文章主要介紹了mysql(master/slave)主從復制原理及配置圖文詳解,以前腳本之家小編發(fā)過相關的內容,但這么好的非常少見特分享一下,需要的朋友可以參考下2016-05-05Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運行狀態(tài)
這篇文章主要介紹了Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運行狀態(tài),需要的朋友可以參考下2014-08-08