缺少“在重复密钥更新上插入”特权,但足以分别“插入”和“更新”

时间:2018-11-27 18:09:42

标签: mariadb privileges on-duplicate-key

我试图将数据库用户拥有的权限减少到所需的最低限度。这样做时,我注意到了以下情况:

我有一个数据库test和一个用户user,具有以下特权:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'%';
GRANT SELECT, INSERT ON test.test TO 'user'@'%';
GRANT UPDATE (y) ON test.test TO 'user'@'%';

test表(InnoDB)被定义为

create table test
(
    x int null,
    y int null
);

create unique index test_x_uindex on test (x);

我可以运行insertupdate这样的查询

INSERT INTO test (x,y) VALUES (1,1), (2,2);
UPDATE test SET y = 3 WHERE x = 1;

但是跑步

INSERT INTO test (x,y) VALUES (2,4) ON DUPLICATE KEY UPDATE y = VALUES(y);

产生

  

错误1143(42000):表'test'中列'x'的用户'sap'@'localhost'的UPDATE命令被拒绝

如果该语句实际上不会更新某些内容,而只是插入新行,则会发生同样的情况。

这似乎有点奇怪。我找不到直接相关的错误报告。只是older for MySQL(已关闭,但有人说它实际上没有修复。我没有测试过。)。在documentation of MySQL 8.0中,提到只有更改的列才需要更新特权。 MariaDB documentation没有提到任何特权要求。

我想念什么吗?

所有内容均已在MariaDB 10.2.16上进行了测试。

0 个答案:

没有答案