创建MySQL触发器时​​出现权限错误

时间:2020-07-12 15:08:57

标签: mysql triggers

我想在开发环境中执行以下触发器。此触发器在本地运行良好(本地用户没有超级特权,并且已启用日志仓)。这是触发器

DELIMITER $$
USE `myschema`$$
CREATE
DEFINER=`user`@`localhost`
TRIGGER `myschema`.`roles_BEFORE_INSERT`
BEFORE INSERT ON `myschema`.`roles`
FOR EACH ROW
BEGIN
IF (NEW.role_id IS NULL) THEN
    -- Find max existed role id
    SELECT
      MAX(role_id) INTO @max_role_id
    FROM
      roles;
 
    IF (@max_role_id IS NULL) THEN
      -- Set first role id
      SET NEW.role_id = CONCAT('RID', '0001');
    ELSE
      -- Set next role id
      SET NEW.role_id = CONCAT(SUBSTR(@max_role_id, 1, 3), LPAD(SUBSTR(@max_role_id, 4) + 1, 4, '0'));
    END IF;
  END IF;
END$$

我在开发环境中执行上述脚本时遇到以下错误,在该环境中我无权检查用户是否具有什么特权以及是否启用了日志箱。您能否告诉我,有什么方法可以指定超级特权或设置日志箱启用查询以及上述脚本本身。我很难过,因为在本地环境中无法重现该问题。任何帮助表示赞赏。

SQL State  : HY000
Error Code : 1419
Message    : You do not have the SUPER privilege and binary logging is enabled 
(you might want to use the less safe log_bin_trust_function_creators variable)

2 个答案:

答案 0 :(得分:0)

拥有SUPER特权的人必须将其授予您,或者自己创建触发器。与Windows上的Administrator priv或* nix上的root priv一样。

答案 1 :(得分:0)

要检查当前的用户授权,请执行以下操作: 使用mysql和

用户登录

mysql>显示授权;

检查超级用户:

mysql>选择用户,从mysql.user中的主机,其中super_priv ='y';

检查工作记录:

mysql>显示诸如“ log_bin”之类的全局变量;

修复: 您可以通过启用log_bin_trust_function_creators

进行修复

mysql>设置全局log_bin_trust_function_creators = ON;

阅读官方文档以了解更多详细信息。 https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_log_bin_trust_function_creators