十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
use mysql(進(jìn)入mysql庫)
在孟州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都營銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),孟州網(wǎng)站建設(shè)費(fèi)用合理。
select user,host from user(查看你有哪些用戶)
show grants for '用戶名'@'***(該用戶host)';(查看該用戶有哪些權(quán)限)
phpmyadmin設(shè)置mysql數(shù)據(jù)庫用戶權(quán)限可以參考如下操作步驟。
1、用瀏覽器打開phpmyadmin,輸入用戶名和密碼登錄。
2、在左側(cè)選擇要設(shè)置權(quán)限的數(shù)據(jù)庫,并點(diǎn)擊權(quán)限。
3、在彈出的窗口單擊“編輯權(quán)限”。
4、進(jìn)入權(quán)限設(shè)置頁面,根據(jù)需要設(shè)置權(quán)限。
5、設(shè)置完成,點(diǎn)擊右下角的“執(zhí)行”,更新權(quán)限。
一、用戶管理
1、登錄mysql
mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL語句"
比如
mysql -uroot -p -hlocalhost -P3306 mysql -e "select host,user from user"
-h參數(shù) 后面接主機(jī)名或者主機(jī)IP,hostname為主機(jī),hostIP為主機(jī)IP。
-P參數(shù) 后面接MySQL服務(wù)的端口,通過該參數(shù)連接到指定的端口。MySQL服務(wù)的默認(rèn)端口是3306,
不使用該參數(shù)時(shí)自動連接到3306端口,port為連接的端口號。
-u參數(shù) 后面接用戶名,username為用戶名。
-p參數(shù) 會提示輸入密碼。
DatabaseName參數(shù) 指明登錄到哪一個(gè)數(shù)據(jù)庫中。如果沒有該參數(shù),就會直接登錄到MySQL數(shù)據(jù)庫
中,然后可以使用USE命令來選擇數(shù)據(jù)庫。
-e參數(shù) 后面可以直接加SQL語句。登錄MySQL服務(wù)器以后即可執(zhí)行這個(gè)SQL語句,然后退出MySQL
服務(wù)器。
2、創(chuàng)建用戶
CREATE USER 用戶名 [IDENTIFIED BY '密碼'][,用戶名 [IDENTIFIED BY '密碼']];
比如
CREATE USER 'kangshifu'@'localhost' IDENTIFIED BY '123456';
用戶名參數(shù)表示新建用戶的賬戶,由 用戶(User) 和 主機(jī)名(Host) 構(gòu)成;
“[ ]”表示可選,也就是說,可以指定用戶登錄時(shí)需要密碼驗(yàn)證,也可以不指定密碼驗(yàn)證,這樣用戶
可以直接登錄。不過,不指定密碼的方式不安全,不推薦使用。如果指定密碼值,這里需要使用
IDENTIFIED BY指定明文密碼值。
CREATE USER語句可以同時(shí)創(chuàng)建多個(gè)用戶。
3、更新用戶
UPDATE mysql.user SET USER='li4' WHERE USER='wang5';
FLUSH PRIVILEGES;
4、刪除用戶
方式1:使用DROP方式刪除(推薦)
使用DROP USER語句來刪除用戶時(shí),必須用于DROP USER權(quán)限。DROP USER語句的基本語法形式如下
DROP USER user[,user]…;
比如
DROP USER li4 ; # 默認(rèn)刪除host為%的用戶
DROP USER 'kangshifu'@'localhost';
方式2:使用DELETE方式刪除
DELETE FROM mysql.user WHERE Host=’hostname’ AND User=’username’;
FLUSH PRIVILEGES;
比如
DELETE FROM mysql.user WHERE Host='localhost' AND User='Emily';
FLUSH PRIVILEGES;
注意:不推薦通過 DELETE FROM USER u WHERE USER='li4' 進(jìn)行刪除,系統(tǒng)會有殘留信息保 留。而drop user命令會刪除用戶以及對應(yīng)的權(quán)限,執(zhí)行命令后你會發(fā)現(xiàn)mysql.user表和mysql.db表 的相應(yīng)記錄都消失了。
5、 設(shè)置當(dāng)前用戶密碼
舊的寫法
# 修改當(dāng)前用戶的密碼:(MySQL5.7測試有效)
SET PASSWORD = PASSWORD('123456');
推薦寫法
1. 使用ALTER USER命令來修改當(dāng)前用戶密碼 用戶可以使用ALTER命令來修改自身密碼,如下語句代表修 改當(dāng)前登錄用戶的密碼?;菊Z法如下:
ALTER USER USER() IDENTIFIED BY 'new_password';
2. 使用SET語句來修改當(dāng)前用戶密碼 使用root用戶登錄MySQL后,可以使用SET語句來修改密碼,具體 SQL語句如下: 該語句會自動將密碼加密后再賦給當(dāng)前用戶。
SET PASSWORD='new_password';
6、修改其他用戶密碼
1. 使用ALTER語句來修改普通用戶的密碼 可以使用ALTER USER語句來修改普通用戶的密碼?;菊Z法形 式如下:
ALTER USER user [IDENTIFIED BY '新密碼']
[,user[IDENTIFIED BY '新密碼']]…;
2. 使用SET命令來修改普通用戶的密碼 使用root用戶登錄到MySQL服務(wù)器后,可以使用SET語句來修改普 通用戶的密碼。SET語句的代碼如下:
SET PASSWORD FOR 'username'@'hostname'='new_password';
3. 使用UPDATE語句修改普通用戶的密碼(不推薦)
UPDATE MySQL.user SET authentication_string=PASSWORD("123456")
WHERE User = "username" AND Host = "hostname";
7、 MySQL8密碼管理(了解
7.1、密碼過期策略
在MySQL中,數(shù)據(jù)庫管理員可以 手動設(shè)置 賬號密碼過期,也可以建立一個(gè) 自動 密碼過期策略。 過期策略可以是 全局的 ,也可以為 每個(gè)賬號 設(shè)置單獨(dú)的過期策略
ALTER USER user PASSWORD EXPIRE;
比如
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE;
方式①:使用SQL語句更改該變量的值并持久化
SET PERSIST default_password_lifetime = 180; # 建立全局策略,設(shè)置密碼每隔180天過期
方式②:配置文件my.cnf中進(jìn)行維護(hù)
[mysqld]
default_password_lifetime=180 #建立全局策略,設(shè)置密碼每隔180天過期
手動設(shè)置指定時(shí)間過期方式2:單獨(dú)設(shè)置
每個(gè)賬號既可延用全局密碼過期策略,也可單獨(dú)設(shè)置策略。在 CREATE USER 和 ALTER USER 語句上加 入 PASSWORD EXPIRE 選項(xiàng)可實(shí)現(xiàn)單獨(dú)設(shè)置策略。下面是一些語句示例。
#設(shè)置kangshifu賬號密碼每90天過期:
CREATE USER 'kangshifu'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
#設(shè)置密碼永不過期:
CREATE USER 'kangshifu'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE NEVER;
#延用全局密碼過期策略:
CREATE USER 'kangshifu'@'localhost' PASSWORD EXPIRE DEFAULT;
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE DEFAULT;
7.2、密碼重置策略
手動設(shè)置密碼重用:全局
方式1:使用sql
SET PERSIST password_history = 6; #設(shè)置不能選擇最近使用過的6個(gè)密碼
SET PERSIST password_reuse_interval = 365; #設(shè)置不能選擇最近一年內(nèi)的密碼
方式2:配置文件
[mysqld]
password_history=6
password_reuse_interval=365
手動設(shè)置密碼重用:單獨(dú)設(shè)置
#不能使用最近5個(gè)密碼:
CREATE USER 'kangshifu'@'localhost' PASSWORD HISTORY 5;
ALTER USER 'kangshifu'@'localhost' PASSWORD HISTORY 5;
#不能使用最近365天內(nèi)的密碼:
CREATE USER 'kangshifu'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER 'kangshifu'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;
#既不能使用最近5個(gè)密碼,也不能使用365天內(nèi)的密碼
CREATE USER 'kangshifu'@'localhost'
PASSWORD HISTORY 5
PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER 'kangshifu'@'localhost'
PASSWORD HISTORY 5
PASSWORD REUSE INTERVAL 365 DAY;
二、權(quán)限管理
1、 權(quán)限列表
MySQL到底都有哪些權(quán)限呢?
mysql show privileges;
(1) CREATE和DROP權(quán)限 ,可以創(chuàng)建新的數(shù)據(jù)庫和表,或刪除(移掉)已有的數(shù)據(jù)庫和表。如果將 MySQL數(shù)據(jù)庫中的DROP權(quán)限授予某用戶,用戶就可以刪除MySQL訪問權(quán)限保存的數(shù)據(jù)庫。 (2) SELECT、INSERT、UPDATE和DELETE權(quán)限 允許在一個(gè)數(shù)據(jù)庫現(xiàn)有的表上實(shí)施操作。 (3) SELECT權(quán)限 只有在它們真正從一個(gè)表中檢索行時(shí)才被用到。 (4) INDEX權(quán)限 允許創(chuàng)建或刪除索引,INDEX適用于已 有的表。如果具有某個(gè)表的CREATE權(quán)限,就可以在CREATE TABLE語句中包括索引定義。 (5) ALTER權(quán) 限 可以使用ALTER TABLE來更改表的結(jié)構(gòu)和重新命名表。 (6) CREATE ROUTINE權(quán)限 用來創(chuàng)建保存的 程序(函數(shù)和程序),ALTER ROUTINE權(quán)限用來更改和刪除保存的程序, EXECUTE權(quán)限 用來執(zhí)行保存的 程序。 (7) GRANT權(quán)限 允許授權(quán)給其他用戶,可用于數(shù)據(jù)庫、表和保存的程序。 (8) FILE權(quán)限 使用 戶可以使用LOAD DATA INFILE和SELECT ... INTO OUTFILE語句讀或?qū)懛?wù)器上的文件,任何被授予FILE權(quán) 限的用戶都能讀或?qū)慚ySQL服務(wù)器上的任何文件(說明用戶可以讀任何數(shù)據(jù)庫目錄下的文件,因?yàn)榉?wù) 器可以訪問這些文件)。
2、 授予權(quán)限的原則
權(quán)限控制主要是出于安全因素,因此需要遵循以下幾個(gè) 經(jīng)驗(yàn)原則 :
1、只授予能 滿足需要的最小權(quán)限 ,防止用戶干壞事。比如用戶只是需要查詢,那就只給select權(quán)限就可 以了,不要給用戶賦予update、insert或者delete權(quán)限。
2、創(chuàng)建用戶的時(shí)候 限制用戶的登錄主機(jī) ,一般是限制成指定IP或者內(nèi)網(wǎng)IP段。
3、為每個(gè)用戶 設(shè)置滿足密碼復(fù)雜度的密碼 。
4、 定期清理不需要的用戶 ,回收權(quán)限或者刪除用戶。
3、 授予權(quán)限
給用戶授權(quán)的方式有 2 種,分別是通過把 角色賦予用戶給用戶授權(quán) 和 直接給用戶授權(quán) 。用戶是數(shù)據(jù)庫的 使用者,我們可以通過給用戶授予訪問數(shù)據(jù)庫中資源的權(quán)限,來控制使用者對數(shù)據(jù)庫的訪問,消除安全 隱患。 授權(quán)命令:
GRANT 權(quán)限1,權(quán)限2,…權(quán)限n ON 數(shù)據(jù)庫名稱.表名稱 TO 用戶名@用戶地址 [IDENTIFIED BY ‘密碼口令’];
比如給li4用戶用本地命令行方式,授予atguigudb這個(gè)庫下的所有表的插刪改查的權(quán)限
GRANT SELECT,INSERT,DELETE,UPDATE ON atguigudb.* TO li4@localhost ;
比如授予通過網(wǎng)絡(luò)方式登錄的joe用戶 ,對所有庫所有表的全部權(quán)限,密碼設(shè)為123。注意這里唯獨(dú)不包
括grant的權(quán)限
GRANT ALL PRIVILEGES ON *.* TO joe@'%' IDENTIFIED BY '123';
我們在開發(fā)應(yīng)用的時(shí)候,經(jīng)常會遇到一種需求,就是要根據(jù)用戶的不同,對數(shù)據(jù)進(jìn)行橫向和縱向的 分組。 所謂橫向的分組,就是指用戶可以接觸到的數(shù)據(jù)的范圍,比如可以看到哪些表的數(shù)據(jù);
所謂縱向的分組,就是指用戶對接觸到的數(shù)據(jù)能訪問到什么程度,比如能看、能改,甚至是 刪除。
4、 查看權(quán)限
查看當(dāng)前用戶權(quán)限
SHOW GRANTS;
# 或
SHOW GRANTS FOR CURRENT_USER;
# 或
SHOW GRANTS FOR CURRENT_USER();
查看某用戶的全局權(quán)限
SHOW GRANTS FOR 'user'@'主機(jī)地址' ;
5、收回權(quán)限
收回權(quán)限就是取消已經(jīng)賦予用戶的某些權(quán)限。收回用戶不必要的權(quán)限可以在一定程度上保證系統(tǒng)的安全 性。MySQL中使用 REVOKE語句 取消用戶的某些權(quán)限。使用REVOKE收回權(quán)限之后,用戶賬戶的記錄將從 db、host、tables_priv和columns_priv表中刪除,但是用戶賬戶記錄仍然在user表中保存(刪除user表中 的賬戶記錄使用DROP USER語句)。 注意:在將用戶賬戶從user表刪除之前,應(yīng)該收回相應(yīng)用戶的所有權(quán)限。
REVOKE 權(quán)限1,權(quán)限2,…權(quán)限n ON 數(shù)據(jù)庫名稱.表名稱 FROM 用戶名@用戶地址;
比如
#收回全庫全表的所有權(quán)限
REVOKE ALL PRIVILEGES ON *.* FROM joe@'%';
#收回mysql庫下的所有表的插刪改查權(quán)限
REVOKE SELECT,INSERT,UPDATE,DELETE ON mysql.* FROM joe@localhost;
注意: 須用戶重新登錄后才能生效
三、權(quán)限表
1、user表
user表是MySQL中最重要的一個(gè)權(quán)限表, 記錄用戶賬號和權(quán)限信息 ,有49個(gè)字段。如下圖:
這些字段可以分成4類,分別是范圍列(或用戶列)、權(quán)限列、安全列和資源控制列
范圍列(或用戶列)
權(quán)限列
安全列
安全列只有6個(gè)字段,其中兩個(gè)是ssl相關(guān)的(ssl_type、ssl_cipher),用于 加密 ;兩個(gè)是x509 相關(guān)的(x509_issuer、x509_subject),用于 標(biāo)識用戶 ;另外兩個(gè)Plugin字段用于 驗(yàn)證用戶身份 的插件, 該字段不能為空。如果該字段為空,服務(wù)器就使用內(nèi)建授權(quán)驗(yàn)證機(jī)制驗(yàn)證用戶身份。
資源控制列
資源控制列的字段用來 限制用戶使用的資源 ,包含4個(gè)字段,分別為: ①max_questions,用戶每小時(shí)允許執(zhí)行的查詢操作次數(shù); ②max_updates,用戶每小時(shí)允許執(zhí)行的更新 操作次數(shù); ③max_connections,用戶每小時(shí)允許執(zhí)行的連接操作次數(shù); ④max_user_connections,用戶 允許同時(shí)建立的連接次數(shù)。 查看字段:
DESC mysql.user;
查看用戶, 以列的方式顯示數(shù)據(jù): SELECT * FROM mysql.user \G;
查詢特定字段:
SELECT host,user,authentication_string,select_priv,insert_priv,drop_priv
FROM mysql.user;
2、db表
使用DESCRIBE查看db表的基本結(jié)構(gòu): DESCRIBE mysql.db;
1. 用戶列 db表用戶列有3個(gè)字段,分別是Host、User、Db。這3個(gè)字段分別表示主機(jī)名、用戶名和數(shù)據(jù)庫 名。表示從某個(gè)主機(jī)連接某個(gè)用戶對某個(gè)數(shù)據(jù)庫的操作權(quán)限,這3個(gè)字段的組合構(gòu)成了db表的主鍵。
2. 權(quán)限列 Create_routine_priv和Alter_routine_priv這兩個(gè)字段決定用戶是否具有創(chuàng)建和修改存儲過程的權(quán)限。
3、 tables_priv表和columns_priv表
tables_priv表用來 對表設(shè)置操作權(quán)限 ,columns_priv表用來對表的 某一列設(shè)置權(quán)限 。tables_priv表和 columns_priv表的結(jié)構(gòu)分別如圖: desc mysql.tables_priv;
tables_priv表有8個(gè)字段,分別是Host、Db、User、Table_name、Grantor、Timestamp、Table_priv和 Column_priv,各個(gè)字段說明如下:
Host 、 Db 、 User 和 Table_name 四個(gè)字段分別表示主機(jī)名、數(shù)據(jù)庫名、用戶名和表名。
Grantor表示修改該記錄的用戶。
Timestamp表示修改該記錄的時(shí)間。
Table_priv 表示對象的操作權(quán)限。包括Select、Insert、Update、Delete、Create、Drop、Grant、
References、Index和Alter。
Column_priv字段表示對表中的列的操作權(quán)限,包括Select、Insert、Update和References。
desc mysql.columns_priv;
4、 procs_priv表
procs_priv表可以對 存儲過程和存儲函數(shù)設(shè)置操作權(quán)限 ,表結(jié)構(gòu)如圖: desc mysql.procs_priv;
四、訪問控制
1、連接核實(shí)階段
當(dāng)用戶試圖連接MySQL服務(wù)器時(shí),服務(wù)器基于用戶的身份以及用戶是否能提供正確的密碼驗(yàn)證身份來確 定接受或者拒絕連接。即客戶端用戶會在連接請求中提供用戶名、主機(jī)地址、用戶密碼,MySQL服務(wù)器 接收到用戶請求后,會使用user表中的host、user和authentication_string這3個(gè)字段匹配客戶端提供信 息。 服務(wù)器只有在user表記錄的Host和User字段匹配客戶端主機(jī)名和用戶名,并且提供正確的密碼時(shí)才接受 連接。如果連接核實(shí)沒有通過,服務(wù)器就完全拒絕訪問;否則,服務(wù)器接受連接,然后進(jìn)入階段2等待 用戶請求。
2、 請求核實(shí)階段
一旦建立了連接,服務(wù)器就進(jìn)入了訪問控制的階段2,也就是請求核實(shí)階段。對此連接上進(jìn)來的每個(gè)請 求,服務(wù)器檢查該請求要執(zhí)行什么操作、是否有足夠的權(quán)限來執(zhí)行它,這正是需要授權(quán)表中的權(quán)限列發(fā) 揮作用的地方。這些權(quán)限可以來自user、db、table_priv和column_priv表。 確認(rèn)權(quán)限時(shí),MySQL首先 檢查user表 ,如果指定的權(quán)限沒有在user表中被授予,那么MySQL就會繼續(xù) 檢 查db表 ,db表是下一安全層級,其中的權(quán)限限定于數(shù)據(jù)庫層級,在該層級的SELECT權(quán)限允許用戶查看指 定數(shù)據(jù)庫的所有表中的數(shù)據(jù);如果在該層級沒有找到限定的權(quán)限,則MySQL繼續(xù) 檢查tables_priv表 以 及 columns_priv表 ,如果所有權(quán)限表都檢查完畢,但還是沒有找到允許的權(quán)限操作,MySQL將 返回錯(cuò) 誤信息 ,用戶請求的操作不能執(zhí)行,操作失敗。
提示: MySQL通過向下層級的順序(從user表到columns_priv表)檢查權(quán)限表,但并不是所有的權(quán) 限都要執(zhí)行該過程。例如,一個(gè)用戶登錄到MySQL服務(wù)器之后只執(zhí)行對MySQL的管理操作,此時(shí)只 涉及管理權(quán)限,因此MySQL只檢查user表。另外,如果請求的權(quán)限操作不被允許,MySQL也不會繼 續(xù)檢查下一層級的表。
五、角色管理
1、創(chuàng)建角色
CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]...
角色名稱的命名規(guī)則和用戶名類似。如果 host_name省略,默認(rèn)為% , role_name不可省略 ,不可為 空。
練習(xí):我們現(xiàn)在需要創(chuàng)建一個(gè)經(jīng)理的角色,就可以用下面的代碼:
CREATE ROLE 'manager'@'localhost';
2、給角色賦予權(quán)限
創(chuàng)建角色之后,默認(rèn)這個(gè)角色是沒有任何權(quán)限的,我們需要給角色授權(quán)。給角色授權(quán)的語法結(jié)構(gòu)是:
GRANT privileges ON table_name TO 'role_name'[@'host_name'];
上述語句中privileges代表權(quán)限的名稱,多個(gè)權(quán)限以逗號隔開??墒褂肧HOW語句查詢權(quán)限名稱,圖11-43 列出了部分權(quán)限列表。
SHOW PRIVILEGES\G;
練習(xí)1:我們現(xiàn)在想給經(jīng)理角色授予商品信息表、盤點(diǎn)表和應(yīng)付賬款表的只讀權(quán)限,就可以用下面的代碼 來實(shí)現(xiàn):
GRANT SELECT ON demo.settlement TO 'manager';
GRANT SELECT ON demo.goodsmaster TO 'manager';
GRANT SELECT ON demo.invcount TO 'manager';
3、查看角色權(quán)限
賦予角色權(quán)限之后,我們可以通過 SHOW GRANTS 語句,來查看權(quán)限是否創(chuàng)建成功了:
只要你創(chuàng)建了一個(gè)角色,系統(tǒng)就會自動給你一個(gè)“ USAGE ”權(quán)限,意思是 連接登錄數(shù)據(jù)庫的權(quán)限 。代碼的 最后三行代表了我們給角色“manager”賦予的權(quán)限,也就是對商品信息表、盤點(diǎn)表和應(yīng)付賬款表的只讀權(quán) 限。 結(jié)果顯示,庫管角色擁有商品信息表的只讀權(quán)限和盤點(diǎn)表的增刪改查權(quán)限。
4、回收角色權(quán)限
角色授權(quán)后,可以對角色的權(quán)限進(jìn)行維護(hù),對權(quán)限進(jìn)行添加或撤銷。添加權(quán)限使用GRANT語句,與角色 授權(quán)相同。撤銷角色或角色權(quán)限使用REVOKE語句。 修改了角色的權(quán)限,會影響擁有該角色的賬戶的權(quán)限。 撤銷角色權(quán)限的SQL語法如下:
REVOKE privileges ON tablename FROM 'rolename';
練習(xí):撤銷school_write角色的權(quán)限。 (
(1)使用如下語句撤銷school_write角色的權(quán)限。
REVOKE INSERT, UPDATE, DELETE ON school.* FROM 'school_write';
(2)撤銷后使用SHOW語句查看school_write對應(yīng)的權(quán)限,語句如下。
SHOW GRANTS FOR 'school_write';
5、刪除角色
當(dāng)我們需要對業(yè)務(wù)重新整合的時(shí)候,可能就需要對之前創(chuàng)建的角色進(jìn)行清理,刪除一些不會再使用的角 色。刪除角色的操作很簡單,你只要掌握語法結(jié)構(gòu)就行了。
DROP ROLE role [,role2]...
注意, 如果你刪除了角色,那么用戶也就失去了通過這個(gè)角色所獲得的所有權(quán)限 。 練習(xí):執(zhí)行如下SQL刪除角色school_read。
DROP ROLE 'school_read';
6、給用戶賦予角色
角色創(chuàng)建并授權(quán)后,要賦給用戶并處于 激活狀態(tài) 才能發(fā)揮作用。給用戶添加角色可使用GRANT語句,語 法形式如下:
GRANT role [,role2,...] TO user [,user2,...];
在上述語句中,role代表角色,user代表用戶??蓪⒍鄠€(gè)角色同時(shí)賦予多個(gè)用戶,用逗號隔開即可。 練習(xí):給kangshifu用戶添加角色school_read權(quán)限。 (1)使用GRANT語句給kangshifu添加school_read權(quán) 限,SQL語句如下。
GRANT 'school_read' TO 'kangshifu'@'localhost';
(2)添加完成后使用SHOW語句查看是否添加成功,SQL語句如下。
SHOW GRANTS FOR 'kangshifu'@'localhost';
(3)使用kangshifu用戶登錄,然后查詢當(dāng)前角色,如果角色未激活,結(jié)果將顯示NONE。SQL語句如 下。
SELECT CURRENT_ROLE();
7、激活角色
方式1:使用set default role 命令激活角色
SET DEFAULT ROLE ALL TO 'kangshifu'@'localhost';
使用 SET DEFAULT ROLE 為下面4個(gè)用戶默認(rèn)激活所有已擁有的角色如下:
SET DEFAULT ROLE ALL TO
'dev1'@'localhost',
'read_user1'@'localhost',
'read_user2'@'localhost',
'rw_user1'@'localhost';
方式2:將activate_all_roles_on_login設(shè)置為ON
show variables like 'activate_all_roles_on_login';
SET GLOBAL activate_all_roles_on_login=ON;
這條 SQL 語句的意思是,對 所有角色永久激活 。運(yùn)行這條語句之后,用戶才真正擁有了賦予角色的所有 權(quán)限。
8、撤銷用戶角色
REVOKE role FROM user;
練習(xí):撤銷kangshifu用戶的school_read角色。 (1)撤銷的SQL語句如下
REVOKE 'school_read' FROM 'kangshifu'@'localhost';
(2)撤銷后,執(zhí)行如下查詢語句,查看kangshifu用戶的角色信息
SHOW GRANTS FOR 'kangshifu'@'localhost';
9、設(shè)置強(qiáng)制角色
設(shè)置強(qiáng)制角色(mandatory role)
方式1:服務(wù)啟動前設(shè)置
[mysqld]
mandatory_roles='role1,role2@localhost,r3@%.atguigu.com'
方式2:運(yùn)行時(shí)設(shè)置
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; #系統(tǒng)重啟后仍然 有效 SET GLOBAL mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; #系統(tǒng)重啟后失效
查看MySQL用戶權(quán)限: show grants for 你的用戶比如: show grants for root@'localhost';Grant 用法GRANT USAGE ON *.* TO 'discuz'@'localhost' IDENTIFIED BY PASSWORD '*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB'; GRANT ALL PRIVILEGES ON `discuz`.* TO 'discuz'@'localhost'; 我先按我的理解解釋一下上面兩句的意思 建立一個(gè)只可以在本地登陸的 不能操作的用用戶名 discuz 密碼為 ***** 已經(jīng)加密了的 然后第二句的意思是 ,給這個(gè)discuz用戶操作discuz數(shù)據(jù)庫的所有權(quán)限使用GRANTGRANT命令用來建立新用戶,指定用戶口令并增加用戶權(quán)限。其格式如下: mysql GRANT privileges ON what - TO user [IDENTIFIED BY password] - [WITH GRANT OPTION]; 正如你看到的源碼天空 ,在這個(gè)命令中有許多待填的內(nèi)容。讓我們逐一地對它們進(jìn)行介紹,并最終給出一些例子以讓你對它們的協(xié)同工作有一個(gè)了解。 privileges是一個(gè)用逗號分隔的你想要賦予的MySQL用戶權(quán)限的列表。你可以指定的權(quán)限可以分為三種類型: 數(shù)據(jù)庫/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限: Alter: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。 Create: 建立新的數(shù)據(jù)庫或數(shù)據(jù)表。 Delete: 刪除表的記錄。 Drop: 刪除數(shù)據(jù)表或數(shù)據(jù)庫。 INDEX: 建立或刪除索引。 Insert: 增加表的記錄。 Select: 顯示/搜索表的記錄。 Update: 修改表中已存在的記錄。 全局管理MySQL用戶權(quán)限: file: 在MySQL服務(wù)器上讀寫文件。 PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程。 RELOAD: 重載訪問控制表,刷新日志等。 SHUTDOWN: 關(guān)閉MySQL服務(wù)。 特別的權(quán)限: ALL: 允許做任何事(和root一樣)。
mysql 查看用戶權(quán)限 show grants for bacchus;
MySQL命令行創(chuàng)建用戶與授權(quán)
如果需要查看MySQL用戶權(quán)限,應(yīng)該如何實(shí)現(xiàn)呢?下面就為您介紹查看MySQL用戶權(quán)限的方法,并對授予MySQL用戶權(quán)限的語句進(jìn)行介紹,供您參考。
查看MySQL用戶權(quán)限:
show grants for 你的用戶
比如:
show grants for root@'localhost';
Grant 用法
GRANT USAGE ON *.* TO 'discuz'@'localhost' IDENTIFIED BY PASSWORD '*C242DDD213BE9C6F8DA28D49245BF69FC79A86EB';
GRANT ALL PRIVILEGES ON `discuz`.* TO 'discuz'@'localhost';
我先按我的理解解釋一下上面兩句的意思
建立一個(gè)只可以在本地登陸的 不能操作的用用戶名 discuz 密碼為 ***** 已經(jīng)加密了的
然后第二句的意思是 ,給這個(gè)discuz用戶操作discuz數(shù)據(jù)庫的所有權(quán)限
使用GRANT
GRANT命令用來建立新用戶,指定用戶口令并增加用戶權(quán)限。其格式如下:
mysql GRANT privileges ON what
- TO user [IDENTIFIED BY "password"]
- [WITH GRANT OPTION];
正如你看到的,在這個(gè)命令中有許多待填的內(nèi)容。讓我們逐一地對它們進(jìn)行介紹,并最終給出一些例子以讓你對它們的協(xié)同工作有一個(gè)了解。
privileges是一個(gè)用逗號分隔的你想要賦予的MySQL用戶權(quán)限的列表。你可以指定的權(quán)限可以分為三種類型:
數(shù)據(jù)庫/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限: Alter: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。
Create: 建立新的數(shù)據(jù)庫或數(shù)據(jù)表。
Delete: 刪除表的記錄。
Drop: 刪除數(shù)據(jù)表或數(shù)據(jù)庫。
INDEX: 建立或刪除索引。
Insert: 增加表的記錄。
Select: 顯示/搜索表的記錄。
Update: 修改表中已存在的記錄。
全局管理MySQL用戶權(quán)限:
file: 在MySQL服務(wù)器上讀寫文件。
PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程。
RELOAD: 重載訪問控制表,刷新日志等。
SHUTDOWN: 關(guān)閉MySQL服務(wù)。
特別的權(quán)限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄--其它什么也不允許做。