MySQL 事件——执行需要 EVENT 权限吗?

问题描述 投票:0回答:1

MySQL 5.7 (Win) 和 MariaDB 10.1 (Linux),事件调度程序设置为 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]执行失败,用户不再具有事件权限。

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

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

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

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

t.v 每分钟都会递增,并且日志中不再有错误。

根据MySQL手册,只有创建/更新/删除EVENT才需要EVENT权限。

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

谢谢。

mysql
1个回答
0
投票

ON COMPLETION 子句意味着事件完成时的操作。执行该操作需要 EVENT 权限。

如果您的意图是每分钟继续执行该操作,则应完全删除该条款。

如果您的目的是仅在有限的时间内运行事件,那么您需要指定结束时间并授予用户 EVENT 权限,以便在那时删除事件。

© www.soinside.com 2019 - 2024. All rights reserved.