Faltando privilégio para "inserir [...] em duplicado chave update" declaração, mas o suficiente para "inserir" e "update" seperatly

votos
1

Tentei reduzir os direitos de um usuário de banco de dados tem para o mínimo necessário. Se o fizer, eu observei a seguinte situação:

Eu tenho um banco de dados teste um usuário usercom os seguintes privilégios:

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

A testtabela (InnoDB) é definida como

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

create unique index test_x_uindex on test (x);

Eu posso correr inserte updateconsultas como

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

mas correr

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

resulta em

ERROR 1143 (42000): comando UPDATE negado para o usuário 'seiva' @ 'localhost' para a coluna 'x' em 'teste' table

O mesmo acontece se a declaração não seria realmente atualizar alguma coisa, mas apenas inserir uma nova linha.

Isto parece um pouco estranho. Eu não poderia encontrar um relatório de bug diretamente relacionados. Apenas algo mais velhos para o MySQL (está fechado, mas alguém disse que ele não é realmente fixo. Eu não testá-lo.). Na documentação do MySQL 8.0 a menção de que privilégios de atualização só são necessários para colunas modificadas. A documentação MariaDB não menciona quaisquer requisitos de privilégio.

Eu perdi alguma coisa?

Isso tudo foi testado em MariaDB 10.2.16.

Publicado 27/11/2018 em 18:09
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more