Я попытался уменьшить права пользователя базы данных до необходимого минимума.При этом я заметил следующую ситуацию:
У меня есть база данных 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);
Я могу запустить 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): команда UPDATE запрещена пользователю 'sap' @ 'localhost' для столбца 'x' в таблице 'test'
То же самое происходит, если оператор не будетна самом деле обновить что-то, но просто вставить новую строку.
Это кажется немного странным.Я не смог найти отчет об ошибке, связанный напрямую.Просто что-то старше для MySQL (закрыто, но кто-то сказал, что это на самом деле не исправлено. Я не проверял это.).В документации MySQL 8.0 упоминается, что права на обновление необходимы только для измененных столбцов.В документации MariaDB не указаны какие-либо требования к привилегиям.
Я что-то пропустил?
Все это было проверено на MariaDB 10.2.16.