Error number: MY-010967; Symbol: ER_ANONYMOUS_AUTH_ID_NOT_ALLOWED_IN_MANDATORY_ROLES; SQLSTATE: HY000
Message: Can’t set mandatory_role %s@%s: Anonymous authorization IDs are not allowed as roles.
错误说明
MY-010967 ER_ANONYMOUS_AUTH_ID_NOT_ALLOWED_IN_MANDATORY_ROLES错误指的是“禁止在强制性角色中使用匿名授权ID”。在MySQL服务器中,创建一个或多个强制性角色,则不能向它们授予匿名用户的权限。匿名用户的权限禁止针对强制性角色,因为MySQL不认可匿名用户的安全性。
常见案例
一个常见的场景,会触发这个错误,是当管理员试图将匿名用户授权给被设置为强制的角色时,会抛出此错误。例如,当我们试图执行以下语句时:
GRANT SELECT ON *.* TO ‘@localhost’@’%’ WITH MANDATORY ROLES;
将会抛出以下错误:
ERROR MY-010967 (HY000): Anonymous authentication ID ‘@localhost’@’%’ is not allowed in mandatory roles.
解决方法
要解决MY-010967 ER_ANONYMOUS_AUTH_ID_NOT_ALLOWED_IN_MANDATORY_ROLES错误,首先要确定问题的根源,以及正在使用的正确的授权方案。可以通过修改用户设置为有效用户,而不是匿名用户来尝试修复此错误,以正确分配角色或功能。可以使用以下两个可用的MySQL命令在MySQL服务器上修改用户:
CREATE USER ‘username’@’hostname’ IDENTIFIED BY ‘password’;
GRANT ROLE role_name TO ‘username’@’hostname’;
另一种可行的解决方案是先删除已被设置为强制性的角色,然后再重新授权它们。可以使用以下命令删除特定的角色:
DROP ROLE role_name;
最后,未能遵守MySQL的规则,而触发此错误的原因,可能是管理员忘记了禁止向强制性角色授予匿名用户的权限。在执行任何操作之前,最好先对MySQL服务器中的角色和功能进行熟悉,以免出现不必要的麻烦。