我由具有全局权限的用户在 MariaDB 中创建角色:
CREATE ROLE role_test
创建后,角色在“角色映射”中可见:
SELECT * from mysql.roles_mapping;
但在“适用角色”中看不到:
SELECT * FROM information_schema.APPLICABLE_ROLES;
并且无法将角色授予用户。
但是,如果我使用也具有全局权限的用户“root@localhost”创建角色,那么该角色会立即出现在“适用角色”中:
我做错了什么?
您的问题中缺少一些信息来准确指出问题,但我会尽力解释发生了什么事,希望您能找到问题所在。
INFORMATION_SCHEMA.applicable_roles
中进行选择时,您将获得当前登录用户可以激活(使用 SET ROLE
)的角色列表。因此,内容会根据您登录的用户身份而有所不同。INFORMATION_SCHEMA.applicable_roles
中进行选择时,用户拥有什么全局权限并不重要。重要的是 mysql.role_mappings
中的内容。如果将角色授予用户,它将显示在 INFORMATION_SCHEMA.applicable_roles
when 以该用户身份查询 applicable_roles
。root@localhost
创建了角色,当您查询以 INFORMATION_SCHEMA.applicable_roles
登录的 root@localhost
时,您将看到该角色,并且您会看到 IS_GRANTABLE
设置为 YES
。能够为用户提供
GRANT
角色由 WITH_ADMIN
中的 mysql.role_mappings
标志控制。
为了让用户
A@%
能够将角色 R1 授予任何其他用户,用户 A 必须已授予角色 R1,如下所示:
GRANT R1 TO A WITH ADMIN OPTION;
没有
WITH ADMIN OPTION
,A@%
只能为自己激活角色,不能授予他人。