久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql中賬戶和權限的示例分析

153次閱讀
沒有評論

共計 18752 個字符,預計需要花費 47 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 mysql 中賬戶和權限的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

當客戶端連接 MySQL 服務器時,必須提供有效的身份認證,例如用戶名和密碼。當用戶執行任何數據庫操作時,服務器將會驗證用戶是否具有相應的權限,例如查詢表需要 SELECT 權限,刪除對象需要 DROP 權限。

為了方便用戶權限的管理,MySQL 8.0 提供了角色的功能。角色(Role)是一組權限的集合。

本篇我們討論 MySQL 中的賬戶和權限的管理。

5.1 管理用戶

5.1.1 創建用戶

MySQL 使用 CREATE USER 語句創建用戶,基本語法如下:

CREATE USER [IF NOT EXISTS] account_name
IDENTIFIED BY  password

其中,account_name 是賬戶名稱;賬戶名稱分為兩個部分:用戶名(user_name)和主機名(host_name),使用 % 連接。IDENTIFIED BY 用于指定用戶的密碼。IF NOT EXISTS 用于避免創建重名賬戶時產生錯誤信息。

以下語句創建一個新的用戶 dev01,它可以從本機登錄(localhost):

mysql  CREATE USER dev01@localhost IDENTIFIED BY  Dev01@mysql 
Query OK, 0 rows affected (0.21 sec)

MySQL 中的賬戶由用戶名和主機名共同決定,主機 office.example.com 上的 dev01 和主機 home.example.com 上的 dev01 是兩個賬戶。如果不指定主機名,表示用戶可以從任何主機登錄:

user_name
user_name@%

% 是通配符,表示任何字符串;另外,_ 表示任意單個字符。

如果用戶名或主機名中包含特殊字符,例如空格或者 –,需要使用引號分別引用這兩部分內容:

user-name @ host-name

除了單引號之外,也可以使用反引號(`)或者雙引號()。

MySQL 中的賬戶信息存儲在系統數據庫 mysql 的 user 表中:

mysql  select host, user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | dev01 |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)

除了 dev01@localhost 之外,其他 4 個用戶都是初始化創建的系統用戶。

除了基本語法之外,創建用戶時還可以指定更多選項:

resource_option: {
 MAX_QUERIES_PER_HOUR count
 | MAX_UPDATES_PER_HOUR count
 | MAX_CONNECTIONS_PER_HOUR count
 | MAX_USER_CONNECTIONS count
}

resource_option 用于限制該用戶對系統資源的使用:

MAX_QUERIES_PER_HOUR,每小時允許執行的查詢次數。默認為 0,表示沒有限制;

MAX_UPDATES_PER_HOUR,每小時允許執行的更新次數。默認為 0,表示沒有限制;

MAX_CONNECTIONS_PER_HOUR,每小時允許執行的連接次數。默認為 0,表示沒有限制;

MAX_USER_CONNECTIONS,該用戶并發連接的數量。默認為 0,表示沒有限制;此時用戶的并發連接數由系統變量 max_user_connections 決定。

以下語句創建一個新的賬戶 dev02,允許從任何主機登錄。同時限制該用戶每小時最多執行 1000 次查詢和 100 次更新:

mysql  CREATE USER  dev02 @ % 
 -  WITH MAX_QUERIES_PER_HOUR 1000 MAX_UPDATES_PER_HOUR 100;
Query OK, 0 rows affected (0.01 sec)

注意第二行的 - 是客戶端的提示符,不是輸入的內容。查詢系統用戶表可以顯示以上設置:

mysql  select host, user, max_questions, max_updates from mysql.user;
+-----------+------------------+---------------+-------------+
| host | user | max_questions | max_updates |
+-----------+------------------+---------------+-------------+
| % | dev02 | 1000 | 100 |
| localhost | dev01 | 0 | 0 |
| localhost | mysql.infoschema | 0 | 0 |
| localhost | mysql.session | 0 | 0 |
| localhost | mysql.sys | 0 | 0 |
| localhost | root | 0 | 0 |
+-----------+------------------+---------------+-------------+
6 rows in set (0.00 sec)

以下是密碼管理選項:

password_option: { PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
 | PASSWORD HISTORY {DEFAULT | N}
 | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
 | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
}

密碼管理選項可以用于設置密碼的過期策略、重用策略和修改密碼時的驗證:

PASSWORD EXPIRE,將密碼立即設置為過期;PASSWORD EXPIRE DEFAULT,使用全局的密碼過期策略,由系統變量 default_password_lifetime 決定;PASSWORD EXPIRE NEVER,密碼永不過期;PASSWORD EXPIRE INTERVAL N DAY 密碼每隔 N 天過期;

PASSWORD HISTORY DEFAULT,使用全局的密碼重用策略,由系統變量 password_history 決定;PASSWORD HISTORY N,新密碼與最近 N 次密碼不能重復;

PASSWORD REUSE INTERVAL DEFAULT,使用全局的密碼重用策略(按照時間間隔指定),由系統變量 password_reuse_interval 決定;PASSWORD REUSE INTERVAL N DAY,新密碼與最近 N 天內的密碼不能重復;

PASSWORD REQUIRE CURRENT,用戶修改密碼時需要輸入當前密碼;PASSWORD REQUIRE CURRENT OPTIONAL,用戶修改密碼時不需要輸入當前密碼;PASSWORD REQUIRE CURRENT DEFAULT,使用全局策略,由系統變量 password_require_current 決定。

賬戶的密碼選項同樣可以通過 mysql.user 表查看:

mysql  select host,user,
 -  password_expired, password_last_changed,
 -  password_lifetime, password_reuse_history,
 -  password_reuse_time, password_require_current
 -  from mysql.user;
+-----------+------------------+------------------+-----------------------+-------------------+------------------------+---------------------+--------------------------+
| host | user | password_expired | password_last_changed | password_lifetime | password_reuse_history | password_reuse_time | password_require_current |
+-----------+------------------+------------------+-----------------------+-------------------+------------------------+---------------------+--------------------------+
| % | dev02 | N | 2019-09-23 15:02:47 | NULL | NULL | NULL | NULL |
| localhost | dev01 | N | 2019-09-23 14:23:39 | NULL | NULL | NULL | NULL |
| localhost | mysql.infoschema | N | 2019-08-28 10:07:39 | NULL | NULL | NULL | NULL |
| localhost | mysql.session | N | 2019-08-28 10:07:39 | NULL | NULL | NULL | NULL |
| localhost | mysql.sys | N | 2019-08-28 10:07:39 | NULL | NULL | NULL | NULL |
| localhost | root | N | 2019-08-28 10:07:44 | NULL | NULL | NULL | NULL |
+-----------+------------------+------------------+-----------------------+-------------------+------------------------+---------------------+--------------------------+
6 rows in set (0.00 sec)

以下是賬戶鎖定選項:

lock_option: {
 ACCOUNT LOCK
 | ACCOUNT UNLOCK
}

該選項用于指定是否鎖定賬戶,鎖定的賬戶無法使用;默認為 ACCOUNT UNLOCK,不鎖定賬戶。

5.1.2 修改用戶

ALTER USER 語句可以修改用戶的屬性,修改用戶的選項和創建用戶相同。

首先是修改用戶的密碼。以下語句用于修改用戶 dev01 的密碼:

mysql  ALTER USER dev01@localhost IDENTIFIED BY  Dev01@2019 
Query OK, 0 rows affected (0.25 sec)

MySQL 提供了 RENAME USER 語句,用于修改用戶名:

mysql  RENAME USER dev02 TO dev03;
Query OK, 0 rows affected (0.26 sec)

用戶 dev02 被重命名為 dev03。

RENAME USER 語句自動將舊用戶的權限授予新用戶,但是不會自動解決舊用戶上的對象依賴。例如,某個存儲過程的定義者為舊的用戶名,并且使用定義者權限運行時,將會產生錯誤。

另一個常見的用戶修改操作就是鎖定賬戶和解鎖賬戶:

mysql  ALTER USER dev01@localhost ACCOUNT LOCK;
Query OK, 0 rows affected (0.13 sec)

用戶 dev01 被鎖定,此時無法使用該用戶進行連接:

C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  -u dev01 -p
Enter password: **********
ERROR 3118 (HY000): Access denied for user  dev01 @ localhost . Account is locked.

系統變量 Locked_connects 用于記錄鎖定賬戶嘗試登錄的次數:

mysql  SHOW GLOBAL STATUS LIKE  Locked_connects 
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| Locked_connects | 1 |
+-----------------+-------+
1 row in set (0.00 sec)

最后我們將 dev01 進行解鎖:

mysql  ALTER USER dev01@localhost ACCOUNT UNLOCK;
Query OK, 0 rows affected (0.10 sec)

5.1.3 刪除用戶

DROP USER 語句用于刪除一個用戶。以下語句將會刪除用 dev03:

mysql  DROP USER dev03;
Query OK, 0 rows affected (0.14 sec)

如果被刪除的用戶已經連接到 MySQL 服務器,用戶可以繼續執行操作;但是無法建立新的連接。

5.2 管理權限

新創建的用戶默認只有 USAGE 權限,只能連接數據庫,而沒有任何操作權限。使用 SHOW GRANTS 命令可以查看用戶的權限:

mysql  SHOW GRANTS FOR dev01@localhost;
+-------------------------------------------+
| Grants for dev01@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `dev01`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

使用 GRANT 語句可以為用戶授予權限。

5.2.1 授予權限

GRANT 語句基本語法如下:

GRANT privilege, ... 
ON privilege_level 
TO account_name;

GRANT 語句支持一次授予多個權限,使用逗號進行分隔。

privilege_level 指定權限的作用級別,包括:

全局權限,作用于 MySQL 服務器中的所有數據庫。全局權限使用 *.* 表示,例如,以下語句授予 dev01@localhost 用戶查詢所有數據庫中的所有表的權限:

mysql  GRANT SELECT
 -  ON *.*
 -  TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+--------------------------------------------+
| Grants for dev01@localhost |
+--------------------------------------------+
| GRANT SELECT ON *.* TO `dev01`@`localhost` |
+--------------------------------------------+
1 row in set (0.00 sec)

全局權限存儲在 mysql.user 表中。

數據庫權限,作用于指定數據庫中的所有對象。數據庫權限使用 db_name.* 表示,例如,以下語句授予 dev01@localhost 用戶查詢數據庫 world 中的所有表的權限:

mysql  GRANT ALL
 -  ON world.*
 -  TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+----------------------------------------------------------+
| Grants for dev01@localhost |
+----------------------------------------------------------+
| GRANT SELECT ON *.* TO `dev01`@`localhost` |
| GRANT ALL PRIVILEGES ON `world`.* TO `dev01`@`localhost` |
+----------------------------------------------------------+
2 rows in set (0.00 sec)

數據庫權限存儲在 mysql.db 表中。

表權限,作用于指定表的所有列。數據庫權限使用 db_name.table_name 表示;如果不指定 db_name,使用默認數據庫;如果沒有默認數據庫,將會返回錯誤。例如,以下語句授予 dev01@localhost 用戶數據庫 world 中 country 表的增刪改查權限:

mysql  GRANT SELECT, INSERT, UPDATE, DELETE
 -  ON world.country
 -  TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+----------------------------------------------------------------------------------+
| Grants for dev01@localhost |
+----------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO `dev01`@`localhost` |
| GRANT ALL PRIVILEGES ON `world`.* TO `dev01`@`localhost` |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `world`.`country` TO `dev01`@`localhost` |
+----------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

表權限存儲在 mysql.tables_priv 表中。

列權限,作用于指定表的指定列。每個列權限都需要指定具體的列名。例如,以下語句授予 dev01@localhost 用戶在 world.country 表中 code 和 name 字段的查詢權限,以及 population 字段的修改權限:

mysql  GRANT SELECT(code, name), UPDATE(population)
 -  ON world.country
 -  TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+----------------------------------------------------------------------------------------------------------------------------------+
| Grants for dev01@localhost |
+----------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO `dev01`@`localhost` |
| GRANT ALL PRIVILEGES ON `world`.* TO `dev01`@`localhost` |
| GRANT SELECT, SELECT (`code`, `name`), INSERT, UPDATE, UPDATE (`population`), DELETE ON `world`.`country` TO `dev01`@`localhost` |
+----------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

列權限存儲在 mysql.columns_priv 表中。

存儲例程權限,作用于存儲例程(函數和過程)。存儲例程權限可以基于全局、數據庫或者單個例程進行指定。以下語句授予 dev01@localhost 用戶在數據庫 world.country 中創建存儲例程的權限:

mysql  GRANT CREATE ROUTINE
 -  ON world.*
 -  TO dev01@localhost;
Query OK, 0 rows affected (0.02 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for dev01@localhost |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO `dev01`@`localhost`|
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, ALTER ROUTINE, EVENT, TRIGGER ON `world`.* TO `dev01`@`localhost` |
| GRANT SELECT, SELECT (`code`, `name`), INSERT, UPDATE, UPDATE (`population`), DELETE ON `world`.`country` TO `dev01`@`localhost` |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

存儲例程權限存儲在 mysql.procs_priv 表中。

代理用戶權限,允許用戶作為其他用戶的代理。代理用戶擁有被代理用戶的所有權限。以下語句將 dev01@localhost 用戶設置為 root 用的代理:

mysql  GRANT PROXY
 -  ON root
 -  TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for dev01@localhost |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO `dev01`@`localhost` |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, ALTER ROUTINE, EVENT, TRIGGER ON `world`.* TO `dev01`@`localhost` |
| GRANT SELECT, SELECT (`code`, `name`), INSERT, UPDATE, UPDATE (`population`), DELETE ON `world`.`country` TO `dev01`@`localhost` |
| GRANT PROXY ON  root @ %  TO  dev01 @ localhost  |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

代理用戶權限存儲在 mysql.proxies_priv 表中。

5.2.2 撤銷權限

REVOKE 語句執行與 GRANT 語句相反的操作,撤銷授予用戶的權限。

REVOKE privilegee, ..
ON privilege_level
FROM account_name;

撤銷權限的參數與授予權限時類似,以下語句撤銷用戶 dev01@localhost 所有的權限:

mysql  REVOKE ALL, GRANT OPTION
 -  FROM dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+--------------------------------------------------+
| Grants for dev01@localhost |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO `dev01`@`localhost` |
| GRANT PROXY ON  root @ %  TO  dev01 @ localhost  |
+--------------------------------------------------+
2 rows in set (0.00 sec)

代理用戶權限需要單獨撤銷:

mysql  REVOKE PROXY
 -  ON root
 -  FROM dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql  SHOW GRANTS FOR dev01@localhost;
+-------------------------------------------+
| Grants for dev01@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `dev01`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

用戶 dev01@localhost 又恢復了初始的權限。

對于全局級別的權限,REVOKE 的效果在用戶下次登錄時生效;對于數據庫級別的權限,REVOKE 的效果在執行 USE 命令后生效;對于表級或者字段級別的權限,REVOKE 的效果隨后的查詢立即生效。

5.3 管理角色

當用戶越來越多時,權限的管理也越來越復雜;而實際上,許多用戶需要相同或類似的權限。為此,MySQL 8.0 引入了一個新的特性:角色(Role)。角色是一組權限的集合。

與賬戶類似,角色也可以授予權限;但是角色不能用于登錄數據庫。通過角色為用戶授權的步驟如下:

創建一個角色;

為角色授權權限;

為用戶指定角色。

5.3.1 創建角色

假設我們的應用需要使用 world 數據庫。開發人員需要該數據庫的完全訪問權限,測試人員需要表的讀寫權限,業務分析人員需要查詢數據的權限。

首先,使用 CREATE ROLE 語句創建 3 個角色:

mysql  CREATE ROLE devp_role, read_role, write_role;
Query OK, 0 rows affected (0.02 sec)

角色名稱和賬戶名稱類似,也可以包含 role_name 和 host_name 兩部分,使用 @ 連接。

此時如果查詢用戶表:

mysql  SELECT host,user,authentication_string FROM mysql.user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| % | devp_role | |
| % | read_role | |
| % | write_role | |
| localhost | dev01 | $A$005$lw58QcU;QI|L`ktULChFhIVFxy5dsYrYmEhJkJqko4mezqefUFyT0zgyE2 |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root | $A$005$kDqbW(q*0Uev;TyKgUe56D9KXiFzPtrSGVxKjvM23CYN5pgE9dLrO0eT8 |
+-----------+------------------+------------------------------------------------------------------------+
8 rows in set (0.00 sec)

可以看出,角色實際上也是一個用戶,但是沒有密碼。

5.3.2 為角色授權

為角色授權和用戶授權類似,也是使用 GRANT 語句。我們分別為上面的 3 個角色分配權限:

mysql  GRANT ALL ON world.* TO devp_role;
Query OK, 0 rows affected (0.01 sec)
mysql  GRANT SELECT ON world.* TO read_role;
Query OK, 0 rows affected (0.01 sec)
mysql  GRANT INSERT, UPDATE, DELETE ON world.* TO write_role;
Query OK, 0 rows affected (0.01 sec)

查看角色的權限和查詢用戶的權限類似:

mysql  SHOW GRANTS FOR devp_role;
+------------------------------------------------------+
| Grants for devp_role@% |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO `devp_role`@`%` |
| GRANT ALL PRIVILEGES ON `world`.* TO `devp_role`@`%` |
+------------------------------------------------------+
2 rows in set (0.00 sec)

5.3.2 為用戶指定角色

接下來我們創建幾個用戶,然后為他們分別指定角色。

mysql  CREATE USER devp1 IDENTIFIED BY  Devp1@2019 
Query OK, 0 rows affected (0.01 sec)
mysql  CREATE USER read1 IDENTIFIED BY  Read1@2019 
Query OK, 0 rows affected (0.01 sec)
mysql  CREATE USER test1 IDENTIFIED BY  Test1@2019 
Query OK, 0 rows affected (0.04 sec)

為用戶指定角色和授予權限類似,也是使用 GRANT 語句:

mysql  GRANT devp_role TO devp1;
Query OK, 0 rows affected (0.01 sec)
mysql  GRANT read_role TO read1;
Query OK, 0 rows affected (0.01 sec)
mysql  GRANT read_role, write_role TO test1;
Query OK, 0 rows affected (0.01 sec)

再次查詢用戶的權限:

mysql  SHOW GRANTS FOR devp1;
+--------------------------------------+
| Grants for devp1@% |
+--------------------------------------+
| GRANT USAGE ON *.* TO `devp1`@`%` |
| GRANT `devp_role`@`%` TO `devp1`@`%` |
+--------------------------------------+
2 rows in set (0.00 sec)

如果想要知道用戶通過角色獲得的具體權限,可以使用 USING 選項:

mysql  SHOW GRANTS FOR devp1 USING devp_role;
+--------------------------------------------------+
| Grants for devp1@% |
+--------------------------------------------------+
| GRANT USAGE ON *.* TO `devp1`@`%` |
| GRANT ALL PRIVILEGES ON `world`.* TO `devp1`@`%` |
| GRANT `devp_role`@`%` TO `devp1`@`%` |
+--------------------------------------------------+
3 rows in set (0.00 sec)

另外,也可以通過將一個用戶授予另一個用戶,實現權限的復制:

mysql  GRANT read1 TO test1;
Query OK, 0 rows affected (0.09 sec)

用戶是具有登錄權限的角色,角色是不能登錄的用戶。

5.3.4 設置默認角色

使用 devp1 連接數據庫:

C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  -u devp1 -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.17 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type  help;  or  \h  for help. Type  \c  to clear the current input statement.
mysql  use world;
ERROR 1044 (42000): Access denied for user  devp1 @ %  to database  world

我們已經為用戶 devp1 授予了 devp_role 角色,該角色擁有數據庫 world 上的所有權限;錯誤的原因在于該角色沒有自動激活。使用 CURRENT_ROLE() 函數查看當前啟動的角色:

mysql  SELECT current_role();
+----------------+
| current_role() |
+----------------+
| NONE |
+----------------+
1 row in set (0.00 sec)

結果顯示沒有任何角色。SET DEFAULT ROLE 命令可以設置用戶默認的活動角色:

mysql  SET DEFAULT ROLE ALL
 -  TO devp1;
Query OK, 0 rows affected (0.01 sec)

再次使用 devp1 連接數據庫后,將會激活該用戶所有的角色:

C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  -u devp1 -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.17 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type  help;  or  \h  for help. Type  \c  to clear the current input statement.
mysql  SELECT current_role();
+-----------------+
| current_role() |
+-----------------+
| `devp_role`@`%` |
+-----------------+
1 row in set (0.00 sec)
mysql  use world;
Database changed
mysql  select * from city limit 1;
+----+-------+-------------+----------+------------+
| ID | Name | CountryCode | District | Population |
+----+-------+-------------+----------+------------+
| 1 | Kabul | AFG | Kabol | 1780000 |
+----+-------+-------------+----------+------------+
1 row in set (0.00 sec)

另一種方式就是使用 SET ROLE 命令設置當前會話的活動角色:

SET ROLE NONE;
SET ROLE ALL;
SET ROLE DEFAULT;

以上語句分別表示不設置任何角色、設置所有角色以及設置默認的角色。

5.3.5 撤銷角色的權限

撤銷角色的權限與撤銷用戶的權限類似,撤銷角色的權限同時會影響到具有該角色的用戶。

以下語句撤銷角色 write_role 的 DELETE 權限:

mysql  REVOKE DELETE
 -  ON world.*
 -  FROM write_role;
Query OK, 0 rows affected (0.14 sec)

此時,用戶 test1 上的相應權限也被撤銷。

5.3.6 刪除角色

DROP ROLE 語句可以刪除角色:

DROP ROLE role_name, ...;

刪除角色的同時會撤銷為用戶指定的角色。以下語句將會刪除角色 read_role 和 write_role:

mysql  DROP ROLE read_role, write_role;
Query OK, 0 rows affected (0.10 sec)

看完了這篇文章,相信你對“mysql 中賬戶和權限的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-15發表,共計18752字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 罗江县| 凌海市| 阳城县| 青田县| 治县。| 蕉岭县| 阳信县| 灵丘县| 家居| 竹溪县| 新建县| 望都县| 梓潼县| 大连市| 靖西县| 额尔古纳市| 尚义县| 宾阳县| 景宁| 攀枝花市| 宽城| 杨浦区| 淮滨县| 兴海县| 财经| 富锦市| 灯塔市| 明溪县| 竹山县| 平和县| 赣榆县| 丰镇市| 延安市| 中西区| 于田县| 囊谦县| 南溪县| 亳州市| 塔城市| 浏阳市| 安平县|