42-MySQL用戶與權(quán)限管理

一、用戶管理

1、登陸 MySQL 服務(wù)器

啟動 MySQL 服務(wù)后,可以通過 mysql 命令來登錄 MySQL 服務(wù)器

mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL語句"
  • -h參數(shù):后面接主機名或主機IP,hostname為主機,hostIP為主機IP

  • -P參數(shù):后面接MySQL服務(wù)的端口,通過該參數(shù)連接到指定的端口。MySQL服務(wù)的默認端口是3306,不使用該參數(shù)時自動連接到3306端口,port為連接的端口號

  • -u參數(shù):后面接用戶名,username為用戶名

  • -p參數(shù):會提示輸入密碼

  • DatabaseName參數(shù):指明登錄到哪一個數(shù)據(jù)庫中。如果沒有該參數(shù),就會直接登錄到MySQL數(shù)據(jù)庫中,然后可以使用USE命令來選擇數(shù)據(jù)庫

  • -e參數(shù):后面可以直接加SQL語句。登錄MySQL服務(wù)器以后即可執(zhí)行這個SQL語句,然后退出MySQL服務(wù)器

  • 舉例

mysql -uroot -p -hlocalhost -P3306 mysql -e "select host,user from user"

2、創(chuàng)建用戶

  • CREATE USER語句的基本語法形式如下:
CREATE USER 用戶名 [IDENTIFIED BY '密碼'][,用戶名 [IDENTIFIED BY '密碼']];
  • 用戶名參數(shù)表示新建用戶的賬戶,由 用戶(User) 和 主機名(Host) 構(gòu)成;

  • “[ ]”表示可選,也就是說,可以指定用戶登錄時需要密碼驗證,也可以不指定密碼驗證,這樣用戶可以直接登錄。不過,不指定密碼的方式不安全,不推薦使用。如果指定密碼值,這里需要使用IDENTIFIED BY指定明文密碼值。

  • CREATE USER語句可以同時創(chuàng)建多個用戶

  • 舉例

CREATE USER 'raven-1'@'localhost' IDENTIFIED BY 'aaabbb-';
  • 查詢當前數(shù)據(jù)庫用戶
SELECT host, user FROM mysql.user;
image.png
  • 通過安裝MySQL服務(wù)器直接登錄
    image.png
  • 在其他機器上無法登錄

  • 舉例-可以遠程登錄

CREATE USER 'raven-2'@'%' IDENTIFIED BY 'abc-';

3、修改用戶

UPDATE mysql.user SET user = 'raven2' WHERE user = 'raven-2';
  • 刷新權(quán)限
FLUSH PRIVILEGES ;

4、刪除用戶

方式1:使用 DROP 方式刪除

使用 DROP USER 語句來刪除用戶時,必須用于 DROP USER 權(quán)限。DROP USER語句的基本語法形式如下

DROP USER user[,user]…;
  • 刪除用戶
DROP USER 'raven-1'@'localhost';
DROP USER `raven-3`;

方式2:使用DELETE方式刪除(不推薦)

DELETE FROM mysql.user WHERE Host=’hostname’ AND User=’username’;

FLUSH PRIVILEGES;
  • 舉例
DELETE
FROM mysql.user
WHERE host='%' AND user='raven2';

FLUSH PRIVILEGES;
  • 注意

不推薦通過 DELETE FROM USER u WHERE USER='li4' 進行刪除,系統(tǒng)會有殘留信息保留。而drop user命令會刪除用戶以及對應(yīng)的權(quán)限,執(zhí)行命令后你會發(fā)現(xiàn)mysql.user表和mysql.db表的相應(yīng)記錄都消失了。

二、用戶密碼修改

1、設(shè)置當前用戶密碼

1、 使用ALTER USER命令來修改當前用戶密碼 用戶可以使用ALTER命令來修改自身密碼,如下語句代表修改當前登錄用戶的密碼。基本語法如下:
ALTER USER USER() IDENTIFIED BY 'new_password';
2、使用SET語句來修改當前用戶密碼 使用root用戶登錄MySQL后,可以使用SET語句來修改密碼,具體SQL語句如下:
SET PASSWORD='new_password';

2、修改其他用戶密碼

方式1. 使用ALTER語句來修改普通用戶的密碼 可以使用ALTER USER語句來修改普通用戶的密碼。基本語法形

式如下:

ALTER USER user [IDENTIFIED BY '新密碼'] 
[,user[IDENTIFIED BY '新密碼']]…;
  • 舉例
ALTER USER 'raven4' IDENTIFIED BY 'xxxx';
方式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";

三、MySQL8密碼管理

1、密碼過期策略

  • 在MySQL中,數(shù)據(jù)庫管理員可以 手動設(shè)置 賬號密碼過期,也可以建立一個 自動 密碼過期策略
  • 過期策略可以是 全局的 ,也可以為 每個賬號 設(shè)置單獨的過期策略
  • 語法格式:
ALTER USER user PASSWORD EXPIRE;
  • 舉例
ALTER USER 'raven-1'@'localhost' PASSWORD EXPIRE;
  • 方式1使用SQL語句更改該變量的值并持久化
# 建立全局策略,設(shè)置密碼每隔180天過期
SET PERSIST default_password_lifetime = 180; 
  • 方式2:配置文件my.cnf中進行維護
[mysqld] 
default_password_lifetime=180 #建立全局策略,設(shè)置密碼每隔180天過期
  • 手動設(shè)置指定時間過期方式2:單獨設(shè)置

每個賬號既可延用全局密碼過期策略,也可單獨設(shè)置策略。在 CREATE USERALTER USER 語句上加入 PASSWORD EXPIRE 選項可實現(xiàn)單獨設(shè)置策略。

#設(shè)置 raven-1 賬號密碼每90天過期: 
CREATE USER 'raven-1'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; 
ALTER USER 'raven-1'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

 #設(shè)置密碼永不過期: 
CREATE USER 'raven-1'@'localhost' PASSWORD EXPIRE NEVER; 
ALTER USER 'raven-1'@'localhost' PASSWORD EXPIRE NEVER; 

#延用全局密碼過期策略: 
CREATE USER 'raven-1'@'localhost' PASSWORD EXPIRE DEFAULT; 
ALTER USER 'raven-1'@'localhost' PASSWORD EXPIRE DEFAULT;

2、密碼重用策略

  • 手動設(shè)置密碼重用方式1:全局

    • 方式1:使用SQL
    SET PERSIST password_history = 6; #設(shè)置不能選擇最近使用過的6個密碼
    
    SET PERSIST password_reuse_interval = 365; #設(shè)置不能選擇最近一年內(nèi)的密碼
    
    • 方式2:my.cnf配置文件
    [mysqld] 
    password_history=6 
    password_reuse_interval=365
    
  • 手動設(shè)置密碼重用方式2:單獨設(shè)置

#不能使用最近5個密碼:
CREATE USER 'raven-1'@'localhost' PASSWORD HISTORY 5;
ALTER USER 'raven-1'@'localhost' PASSWORD HISTORY 5;

#不能使用最近365天內(nèi)的密碼:
CREATE USER 'raven-1'@'localhost' PASSWORD REUSE INTERVAL 365 DAY; 
ALTER USER 'raven-1'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;

#既不能使用最近5個密碼,也不能使用365天內(nèi)的密碼
CREATE USER 'raven-1'@'localhost' PASSWORD HISTORY 5 PASSWORD REUSE INTERVAL 365 DAY;

ALTER USER 'raven-1'@'localhost
PASSWORD HISTORY 5 
PASSWORD REUSE INTERVAL 365 DAY;

四、權(quán)限管理

1、權(quán)限列表

SHOW PRIVILEGES ;
權(quán)限列表.png
  • CREATE和DROP權(quán)限:可以創(chuàng)建新的數(shù)據(jù)庫和表,或刪除(移掉)已有的數(shù)據(jù)庫和表。如果將MySQL數(shù)據(jù)庫中的DROP權(quán)限授予某用戶,用戶就可以刪除MySQL訪問權(quán)限保存的數(shù)據(jù)庫。
  • SELECT、INSERT、UPDATE和DELETE權(quán)限:允許在一個數(shù)據(jù)庫現(xiàn)有的表上實施操作。
  • SELECT權(quán)限:只有在它們真正從一個表中檢索行時才被用到。
  • INDEX權(quán)限:允許創(chuàng)建或刪除索引,INDEX適用于已有的表。如果具有某個表的CREATE權(quán)限,就可以在CREATE TABLE語句中包括索引定義。
  • ALTER權(quán)限:可以使用ALTER TABLE來更改表的結(jié)構(gòu)和重新命名表。
  • CREATE ROUTINE權(quán)限:用來創(chuàng)建保存的程序(函數(shù)和程序),ALTER ROUTINE權(quán)限用來更改和刪除保存的程序,EXECUTE權(quán)限 用來執(zhí)行保存的程序。
  • GRANT權(quán)限:允許授權(quán)給其他用戶,可用于數(shù)據(jù)庫、表和保存的程序。
  • FILE權(quán)限:使用戶可以使用LOAD DATA INFILE和SELECT ... INTO OUTFILE語句讀或?qū)懛?wù)器上的文件,任何被授予FILE權(quán)限的用戶都能讀或?qū)慚ySQL服務(wù)器上的任何文件(說明用戶可以讀任何數(shù)據(jù)庫目錄下的文件,因為服務(wù)器可以訪問這些文件)。

2、授予權(quán)限的原則

權(quán)限控制主要是出于安全因素,因此需要遵循以下幾個 經(jīng)驗原則

  • 1、只授予能 滿足需要的最小權(quán)限 ,防止用戶干壞事。比如用戶只是需要查詢,那就只給select權(quán)限就可以了,不要給用戶賦予update、insert或者delete權(quán)限。
  • 2、創(chuàng)建用戶的時候 限制用戶的登錄主機 ,一般是限制成指定IP或者內(nèi)網(wǎng)IP段。
  • 3、為每個用戶 設(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 ‘密碼口令’];
  • 舉例:給用戶用本地命令行方式,授予test這個庫下的所有表的插改查的權(quán)限。

    • 1、登錄raven4用戶查看數(shù)據(jù)庫


      登錄raven4用戶查看數(shù)據(jù)庫.png
    • 2、使用 root 用戶給 raven4 分配權(quán)限

    grant select, insert, update on test.* TO 'raven4';
    
    • 3、raven4 查看數(shù)據(jù)庫
      image.png
    • 4、raven4 使用 DELETE

    DELETE
    FROM emp
    WHERE id = 100;
    
沒有權(quán)限使用 DELETE .png
  • 授權(quán)全部權(quán)限

授予通過網(wǎng)絡(luò)方式登錄的joe用戶 ,對所有庫所有表的全部權(quán)限,密碼設(shè)為123。注意這里唯獨不包括grant的權(quán)限

GRANT ALL PRIVILEGES ON *.* TO joe@'%' IDENTIFIED BY '123';

4、查看權(quán)限

  • 查看當前用戶權(quán)限
SHOW GRANTS;
或
SHOW GRANTS FOR CURRENT_USER;
或
SHOW GRANTS FOR CURRENT_USER();
  • 查看某用戶的全局權(quán)限
SHOW GRANTS FOR 'user'@'主機地址' ;

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)限。

  • 收回權(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;
  • 舉例:回收 raven4 用戶的 UPDATE 權(quán)限
REVOKE UPDATE ON test.* FROM 'raven4'@'%';
  • 注意: 須用戶重新登錄后才能生效
    image.png

五、權(quán)限表

1、user表

user表是MySQL中最重要的一個權(quán)限表, 記錄用戶賬號和權(quán)限信息。這些字段可以分成4類,分別是范圍列(或用戶列)、權(quán)限列、安全列和資源控制列

image.png

1、范圍列(或用戶列)

  • host : 表示連接類型

    • % 表示所有遠程通過 TCP方式的連接
    • IP 地址 如 (192.168.1.2、127.0.0.1) 通過制定ip地址進行的TCP方式的連接
    • 機器名 通過制定網(wǎng)絡(luò)中的機器名進行的TCP方式的連接
    • ::1 IPv6的本地ip地址,等同于IPv4的 127.0.0.1
    • localhost 本地方式通過命令行方式的連接 ,比如mysql -u xxx -p xxx 方式的連接
  • user : 表示用戶名,同一用戶通過不同方式鏈接的權(quán)限是不一樣的

  • password : 密碼

    • 所有密碼串通過 password(明文字符串) 生成的密文字符串。MySQL 8.0 在用戶管理方面增加了角色管理,默認的密碼加密方式也做了調(diào)整,由之前的 SHA1 改為了 SHA2 ,不可逆 。同時加上 MySQL 5.7 的禁用用戶和用戶過期的功能,MySQL 在用戶管理方面的功能和安全性都較之前版本大大的增強了
    • mysql 5.7 及之后版本的密碼保存到 authentication_string 字段中不再使用password 字段

2、權(quán)限列

  • Grant_priv字段:表示是否擁有GRANT權(quán)限
  • Shutdown_priv字段:表示是否擁有停止MySQL服務(wù)的權(quán)限
  • Super_priv字段:表示是否擁有超級權(quán)限
  • Execute_priv字段:表示是否擁有EXECUTE權(quán)限。擁有EXECUTE權(quán)限,可以執(zhí)行存儲過程和函數(shù)
  • Select_priv , Insert_priv等為該用戶所擁有的權(quán)限。

3、 安全列

安全列只有6個字段,其中兩個是ssl相關(guān)的(ssl_type、ssl_cipher),用于 加密 ;兩個是x509相關(guān)的(x509_issuer、x509_subject),用于 標識用戶 ;另外兩個Plugin字段用于 驗證用戶身份 的插件,該字段不能為空。如果該字段為空,服務(wù)器就使用內(nèi)建授權(quán)驗證機制驗證用戶身份

4、資源控制列

資源控制列的字段用來 限制用戶使用的資源

  • max_questions,用戶每小時允許執(zhí)行的查詢操作次數(shù);
  • max_updates,用戶每小時允許執(zhí)行的更新操作次數(shù);
  • max_connections,用戶每小時允許執(zhí)行的連接操作次數(shù);
  • max_user_connections,用戶允許同時建立的連接次數(shù)

2、db表

  • 查看db表的基本結(jié)構(gòu)
DESC mysql.db;
db表.png

2.1. 用戶列

db表用戶列有3個字段,分別是Host、User、Db。這3個字段分別表示主機名、用戶名和數(shù)據(jù)庫名。表示從某個主機連接某個用戶對某個數(shù)據(jù)庫的操作權(quán)限,這3個字段的組合構(gòu)成了db表的主鍵

2.2. 權(quán)限列

Create_routine_priv和Alter_routine_priv這兩個字段決定用戶是否具有創(chuàng)建和修改存儲過程的權(quán)限

2.3. tables_priv表和columns_priv表

tables_priv表用來 對表設(shè)置操作權(quán)限 ,columns_priv表用來對表的 某一列設(shè)置權(quán)限 。

  • 查看 tables_priv 結(jié)構(gòu)
DESC mysql.tables_priv;
image.png
  • Host 、 DbUserTable_name 四個字段分別表示主機名、數(shù)據(jù)庫名、用戶名和表名

  • Grantor表示修改該記錄的用戶

  • Timestamp表示修改該記錄的時間

  • Table_priv 表示對象的操作權(quán)限。包括Select、Insert、Update、Delete、Create、Drop、Grant、 References、Index和Alter

  • Column_priv字段表示對表中的列的操作權(quán)限,包括Select、Insert、Update和References

  • 查看 columns_priv 結(jié)構(gòu)
    columns_priv 結(jié)構(gòu).png

2.4. procs_priv表

procs_priv表可以對 存儲過程和存儲函數(shù)設(shè)置操作權(quán)限

  • 查看 procs_priv 表結(jié)構(gòu)
DESC mysql.procs_priv;
image.png

3、訪問控制

3.1、連接核實階段

當用戶試圖連接MySQL服務(wù)器時,服務(wù)器基于用戶的身份以及用戶是否能提供正確的密碼驗證身份來確定接受或者拒絕連接。即客戶端用戶會在連接請求中提供用戶名、主機地址、用戶密碼,MySQL服務(wù)器
接收到用戶請求后,會使用user表中的host、user和authentication_string這3個字段匹配客戶端提供信息。
服務(wù)器只有在user表記錄的Host和User字段匹配客戶端主機名和用戶名,并且提供正確的密碼時才接受
連接。如果連接核實沒有通過,服務(wù)器就完全拒絕訪問;否則,服務(wù)器接受連接,然后進入階段2等待用戶請求

3.2 請求核實階段

一旦建立了連接,服務(wù)器就進入了訪問控制的階段2,也就是請求核實階段。對此連接上進來的每個請求,服務(wù)器檢查該請求要執(zhí)行什么操作、是否有足夠的權(quán)限來執(zhí)行它,這正是需要授權(quán)表中的權(quán)限列發(fā)揮作用的地方。這些權(quán)限可以來自user、db、table_priv和column_priv表。
確認權(quán)限時,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將 返回錯誤信息 ,用戶請求的操作不能執(zhí)行,操作失敗

  • 注意: MySQL通過向下層級的順序(從user表到columns_priv表)檢查權(quán)限表,但并不是所有的權(quán)
    限都要執(zhí)行該過程。例如,一個用戶登錄到MySQL服務(wù)器之后只執(zhí)行對MySQL的管理操作,此時只
    涉及管理權(quán)限,因此MySQL只檢查user表。另外,如果請求的權(quán)限操作不被允許,MySQL也不會繼
    續(xù)檢查下一層級的表

六、角色管理

引入角色的目的是 方便管理擁有相同權(quán)限的用戶 。恰當?shù)臋?quán)限設(shè)定,可以確保數(shù)據(jù)的安全性,這是至關(guān)重要的

角色管理.png

1、創(chuàng)建角色

  • 創(chuàng)建角色使用 CREATE ROLE 語句,語法如下
CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]...
  • 角色名稱的命名規(guī)則和用戶名類似。如果 host_name省略,默認為% , role_name不可省略 ,不可為空

  • 創(chuàng)建角色

CREATE ROLE 'manager'@'%';
或
CREATE ROLE 'manager';

2、給角色賦予權(quán)限

創(chuàng)建角色之后,默認這個角色是沒有任何權(quán)限的,我們需要給角色授權(quán)。給角色授權(quán)的語法結(jié)構(gòu)是

GRANT privileges ON table_name TO 'role_name'[@'host_name'];
  • 上述語句中privileges代表權(quán)限的名稱,多個權(quán)限以逗號隔開??墒褂肧HOW語句查詢權(quán)限名稱
SHOW PRIVILEGES ;
  • 舉例:給 manager角色
GRANT SELECT ON test.emp TO 'manager';

GRANT UPDATE ON test.dept TO 'manager';
  • 查看角色的權(quán)限
SHOW GRANTS FOR 'manager';
image.png
  • 只要你創(chuàng)建了一個角色,系統(tǒng)就會自動給你一個“ USAGE ”權(quán)限,意思是 連接登錄數(shù)據(jù)庫的權(quán)限 。代碼的最后2行代表了我們給角色“manager”賦予的權(quán)限

3、回收角色的權(quán)限

角色授權(quán)后,可以對角色的權(quán)限進行維護,對權(quán)限進行添加或撤銷。添加權(quán)限使用GRANT語句,與角色授權(quán)相同。撤銷角色或角色權(quán)限使用REVOKE語句。修改了角色的權(quán)限,會影響擁有該角色的賬戶的權(quán)限

  • 撤銷角色權(quán)限的SQL語法如下
REVOKE privileges ON tablename FROM 'rolename';
  • 舉例
REVOKE INSERT, UPDATE, DELETE ON school.* FROM 'school_write';

4、刪除角色

當我們需要對業(yè)務(wù)重新整合的時候,可能就需要對之前創(chuàng)建的角色進行清理,刪除一些不會再使用的角色。刪除角色的操作很簡單,你只要掌握語法結(jié)構(gòu)就行了。

DROP ROLE role [,role2]...

5、給用戶賦予角色

角色創(chuàng)建并授權(quán)后,要賦給用戶并處于 激活狀態(tài) 才能發(fā)揮作用。給用戶添加角色可使用GRANT語句,語法形式如下:

GRANT role [,role2,...] TO user [,user2,...];
  • 舉例:給raven4用戶添加 manager 角色
GRANT 'manager' TO raven4;
  • 使用 raven4 用戶登錄,然后查詢當前角色,如果角色未激活,結(jié)果將顯示NONE。SQL語句如下。
SELECT CURRENT_ROLE();
image.png

6、激活角色

  • 方式1:使用set default role 命令激活角色
SET DEFAULT ROLE ALL TO 'raven4';
  • 方式2:將activate_all_roles_on_login設(shè)置為ON
show variables like 'activate_all_roles_on_login';
  • 這條 SQL 語句的意思是,對 所有角色永久激活 。運行這條語句之后,用戶才真正擁有了賦予角色的所有
    權(quán)限
SET GLOBAL activate_all_roles_on_login=ON;

7、撤銷用戶的角色

REVOKE role FROM user;
  • 舉例
REVOKE 'school_read' FROM 'raven4';
  • 撤銷后,執(zhí)行如下查詢語句,查看 raven 用戶的角色信息
SHOW GRANTS FOR 'raven4';

8、設(shè)置強制角色(mandatory role)

  • 方式1:服務(wù)啟動前設(shè)置
[mysqld] 
mandatory_roles='role1,role2@localhost,r3@%.atguigu.com'
  • 方式2:運行時設(shè)置
#系統(tǒng)重啟后仍然 有效
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; 
#系統(tǒng)重啟后失效
SET GLOBAL mandatory_roles = 'role1,role2@localhost,r3@%.example.com'; 

七、綜合實戰(zhàn)

以下的所有分配和創(chuàng)建用戶、角色、權(quán)限都是在有改權(quán)限的賬號(root)下執(zhí)行

1、創(chuàng)建用戶

CREATE USER 'raven-1' IDENTIFIED BY 'password';

2、創(chuàng)建角色

CREATE ROLE 'select_role';
CREATE ROLE 'update_role';

3、給角色分配權(quán)限

# 只讀權(quán)限
GRANT SELECT ON test.* TO 'select_role';

#修改權(quán)限
GRANT UPDATE ON test.* TO 'update_role';

4、給用戶分配 角色

每次分配角色和收回角色都需要重新登錄后才能生效

GRANT 'select_role' TO 'raven-1';
GRANT 'update_role' TO 'raven-1';

5、如果沒有激活角色需要激活

SET GLOBAL activate_all_roles_on_login=ON;

6、回收角色

REVOKE 'update_role' FROM 'raven-1';
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容