source

"중복 키 업데이트 시 [...] 삽입" 문에 대한 권한이 없지만 "삽입" 및 "업데이트"를 개별적으로 수행하기에 충분합니다.

lovecheck 2023. 10. 29. 19:48
반응형

"중복 키 업데이트 시 [...] 삽입" 문에 대한 권한이 없지만 "삽입" 및 "업데이트"를 개별적으로 수행하기에 충분합니다.

데이터베이스 사용자가 가지는 권한을 최소한으로 줄이려고 노력했습니다.그렇게 함으로써 저는 다음과 같은 상황을 알아차렸습니다.

데이터베이스가 있습니다.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 명령이 'test' 테이블의 'x' 열에 대해 사용자 'sap'@'localhost'에 거부되었습니다.

문장이 실제로 업데이트하지 않고 새 행을 삽입하는 경우에도 마찬가지입니다.

이건 좀 이상해 보여요.직접 관련된 버그 보고서를 찾을 수 없었습니다.MySQL에 대한 오래된 것(닫혔지만 누군가가 실제로 수정되지 않았다고 말했습니다.저는 테스트를 하지 않았습니다.MySQL 8.0 설명서에서 업데이트 권한은 변경된 열에만 필요하다고 언급합니다.MariaDB 문서에는 권한 요구 사항이 언급되어 있지 않습니다.

제가 뭘 놓쳤나요?

이는 모두 MariaDB 10.2.16에서 테스트되었습니다.

언급URL : https://stackoverflow.com/questions/53505686/missing-privilege-for-insert-on-duplicate-key-update-statement-but-enou

반응형