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