文档解释
Error number: 3897; Symbol: ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE; SQLSTATE: HY000
Message: AuthId `%s`@`%s` is set as mandatory_roles. Cannot grant the ‘%s’ privilege.
错误说明:
MySQL的ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE错误表示,不能将系统特权授予交互角色(mandatory role)。该错误是由系统发出的,当MySQL试图为一个特定的角色授予的系统特权级别的权限时,会禁止此类操作。该错误由MySQL 5.7支持。
常见案例
ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE错误通常会在MySQL中尝试将系统特权授予Insert_Test角色时发生。例如,MySQL试图在下面的语句中授予INSERT_TEST角色sys_priv:
GRANT SYS_PRIV ON *.* TO INSERT_TEST;
此外,此错误还可能发生在尝试授予某些系统特权时,诸如EXECUTE或ALTER。
解决办法:
首先,在尝试授予系统特权时,您应该确保用户是普通用户,而不是必须角色。如果您只是想要授予系统特权,只需将其分配给INSERT_TEST帐户而不是INSERT_TEST角色即可。
例如:
GRANT SYS_PRIV TO INSERT_TEST@hostname;
其次,您可以尝试删除INSERT_TEST“mandatory_role_statement”,当检测到未满足条件分配时,系统将执行此类操作。
关于MySQL的此错误的其他解决方法的更多问题,您可以查看MySQL 5.7文档中的ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE部分,了解更多细节。