用户/角色的权限

对于与角色/用户关联的实际权限,我们需要查看与 CREATE USER、GRANT 和 REVOKE 命令关联的底层系统表。
我们必须了解 CREATE USER、GRANT 和 REVOKE 命令是与这些系统表用于特权和访问。
MySQL 不建议直接修改底层系统表。
如果我们选择修改底层系统表,则风险自负!

在MySQL 8 中如何分配给用户的 角色和权限的信息

如何在不使用 SHOW GRANTS 的情况下收集有关分配给用户的 MySQL 8 角色和权限的信息

分配给用户的角色

我们可以使用 mysql.role_edges 表查看哪些角色分配给了哪些用户:

mysql> SELECT * FROM mysql.role_edges;
+-----------+-----------+-----------+---------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST   | TO_USER | WITH_ADMIN_OPTION |
+-----------+-----------+-----------+---------+-------------------+
| %         | myrole    | localhost | myuser  | N                 |
+-----------+-----------+-----------+---------+-------------------+
1 row in set (0.00 sec)

列出系统上可用的活动和非活动角色

活动角色:至少有 1 个用户帐户分配给角色的角色:

mysql> SELECT DISTINCT u.User 'Role Name', if(e.from_user is NULL,0, 1) Active
  FROM mysql.user u
    LEFT JOIN role_edges e ON e.from_user=u.user
  WHERE u.account_locked='Y' AND u.password_expired='Y' AND u.authentication_string='';
+-----------+--------+
| Role Name | Active |
+-----------+--------+
| myrole    |    1   |
| myrole2   |    0   |
+-----------+--------+
2 rows in set (0.00 sec)
更多: zhilu jiaocheng

用户/角色的全局权限

要了解用户/角色具有哪些特定的 GLOBAL 权限,我们可以访问 INFORMATION_SCHEMA.USER_PRIVILEGES 表:

mysql> select * from information_schema.user_privileges where GRANTEE='\'mysql.infoschema\'@\'localhost\''; 
+--------------------------------+---------------+----------------+--------------+ 
| GRANTEE                        | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE | 
+--------------------------------+---------------+----------------+--------------+ 
| 'mysql.infoschema'@'localhost' | def           | SELECT         | NO           | 
+--------------------------------+---------------+----------------+--------------+ 
1 row in set (0.00 sec)
日期:2020-09-17 00:11:06 来源:oir作者:oir