2056793.jpg MySQL角色是指定的权限集合。像用户帐户一样,角色可以拥有授予和撤消的权限。可以授予用户帐户角色,授予该帐户与每个角色相关的权限。用户被授予角色权限,则该用户拥有该角色的权限。 以下列表总结了MySQL提供的角色管理功能:

  • CREATE ROLE和DROP ROLE角色创建和删除。
  • GRANT和REVOKE 为用户和角色分配和撤销权限。
  • SHOW GRANTS 显示用户和角色的权限和角色分配。
  • SET DEFAULT ROLE 指定哪些帐户角色默认处于活动状态。
  • SET ROLE 更改当前会话中的活动角色。
  • CURRENT_ROLE()功能显示当前会话中的活动角色。

创建和删除角色

mysql> create role s_dev;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select,insert,update,delete,alter,drop on test.* to 's_dev';
Query OK, 0 rows affected (0.00 sec)

mysql> drop role s_dev;
Query OK, 0 rows affected (0.06 sec)

为用户添加和撤销角色

mysql> grant 's_dev' to test_user@'%';
Query OK, 0 rows affected (0.06 sec)
mysql> revoke 's_dev' from test_user@'%';
Query OK, 0 rows affected (0.00 sec)

查看用户角色权限

mysql> grant 's_dev' to test_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for test_user;
+-----------------------------------------------------------------------+
| Grants for test_user@%                                                |
+-----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`%`                                 |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `sbtest`.* TO `test_user`@`%` |
| GRANT `s_dev`@`%` TO `test_user`@`%`                                  |
+-----------------------------------------------------------------------+
3 rows in set (0.00 sec)

如果要显示角色具体权限,需要添加using:

mysql> show grants for test_user using 's_dev';
+----------------------------------------------------------------------------------+
| Grants for test_user@%                                                           |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`%`                                            |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `sbtest`.* TO `test_user`@`%`            |
| GRANT SELECT, INSERT, UPDATE, DELETE, DROP, ALTER ON `test`.* TO `test_user`@`%` |
| GRANT `s_dev`@`%` TO `test_user`@`%`                                             |
+----------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

当前会话中的活动角色

mysql> select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE           |
+----------------+
1 row in set (0.00 sec)

设置角色激活状态

mysql> set default role s_dev to 'test_user';
Query OK, 0 rows affected (0.05 sec)

登录用户test_user查看:

mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `s_dev`@`%`    |
+----------------+
1 row in set (0.00 sec)

将当前会话中的活动角色设置为当前账户默认角色

mysql> SET ROLE DEFAULT;
Query OK, 0 rows affected (0.00 sec)