我试图将数据库用户拥有的权限减少到所需的最低限度。我注意到以下情况:
我有数据库
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'@'%';
这个
测试
create table test
(
x int null,
y int null
);
create unique index test_x_uindex on test (x);
insert
和
update
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”
older for MySQL
(已关闭,但有人说实际上没有修复。我没有测试)。在
documentation of MySQL 8.0
提到更新特权只需要更改的列。这个
MariaDB documentation
没有提到任何特权要求。
所有这些都在MariaDB 10.2.16上进行了测试。