首页 > 解决方案 > MySQL 事件——执行需要 EVENT 权限?

问题描述

MySQL 5.7 (Win) 和 MariaDB 10.1 (Linux),Event Scheduler 设置为 ON,我以 root 身份连接。

CREATE DATABASE `event-test`;

CREATE USER 'event-test'@'localhost' IDENTIFIED BY 'password-is-here';
GRANT USAGE ON *.* TO 'event-test'@'localhost';
GRANT EXECUTE, SELECT, DELETE, INSERT, UPDATE ON `event-test`.* TO 'event-test'@'localhost';
FLUSH PRIVILEGES;

USE `event-test`;

CREATE TABLE t (
    v INT(11) NOT NULL
);
INSERT INTO t (v) VALUES (0);

DELIMITER //
CREATE DEFINER=`event-test`@`localhost` EVENT `e`
    ON SCHEDULE
        EVERY 1 MINUTE STARTS '2020-01-01 00:00:00'
    ON COMPLETION NOT PRESERVE
    ENABLE
    DO
BEGIN
    UPDATE t SET v = v + 1;
END//

DELIMITER ;

=>

已创建数据库、表和事件。等待几分钟——电视仍然为零。

在错误日志中:

2020-01-13T03:30:00.184167Z 16332 [错误] 事件调度程序:[event-test@localhost].[event-test.e] 执行失败,用户不再具有 EVENT 权限。

2020-01-13T03:30:00.185852Z 16332 [错误] 事件调度程序:[event-test@localhost][event-test.e] 用户'event-test'@'localhost'拒绝访问数据库'event-test '

2020-01-13T03:30:00.187426Z 16332 [注意] 事件调度程序:[event-test@localhost].[event-test.e] 事件执行失败。

如果我使用命令向用户授予 EVENT 特权:

GRANT EVENT ON `event-test`.* TO 'event-test'@'localhost';

tv 将每分钟递增一次,并且日志中不再有错误。

根据MySQL 手册,仅在创建/更新/删除 EVENT 时需要 EVENT 权限。

所以我的问题是:我错过了什么?为什么活动需要 EVENT 权限才能运行?

谢谢。

标签: mysql

解决方案


推荐阅读