본문 바로가기

여러가지/DBMS

[실습] 특정 테이블에 INSERT 등의 명령어 차단하기

(시도 1) REVOKE 명령어로 권한 철회

※ 권한 축소 시 적용되지 않습니다.

즉, GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' 명령어를 사용하여 모든 데이터베이스, 모든 테이블에 모든 권한을 부여한다면, 그 하위 항목은 REVOKE 명령어가 적용되지 않습니다. 따라서 만약 a-e까지의 데이터베이스가 있을 때 d에 어떠한 권한도 부여하고 싶지 않다면 그 외 a-c, e에 각각 권한 부여 해야 합니다.

 

이는 매우 복잡하므로 트리거를 사용해서 위의 기능을 대신합니다.

 

(시도 2) 트리거 사용한 명령어 차단

DELIMITER $$

CREATE TRIGGER restrict_user_insert

BEFORE INSERT ON table_name

FOR EACH ROW

BEGIN

    SIGNAL SQLSTATE '45000'

    SET MESSAGE_TEXT = 'INSERT operation is not allowed on the user table';

    ▷ 트리거 내에서 예외 발생시키는 방법

END$$

DELIMITER ;

 

※ 위의 트리거는 table_name 테이블에 대해 INSERT 명령어가 실행되기 전에 다음 작업을 수행합니다.

 

SIGNAL SQLSTATE

SIGNAL 문 : MySQL에서 사용자 정의 에러 발생

SQLSTATE : SQL 표준 상태 코드

※ 각 에러에 대해 고유한 코드를 가집니다.

 

SQLSTATE '45000': 45000은 일반적인 사용자 정의 에러를 나타내는 SQLSTATE 코드입니다. 이 코드는 표준 SQLSTATE 코드가 아니라 사용자가 정의한 에러임을 나타냅니다. 45000은 "Uncaught user-defined exception"을 의미합니다.

 

SET MESSAGE_TEXT : 발생시킬 에러 메시지 정의

※ 예외가 발생했을 때 SIGNAL 문과 함께 클라이언트에게 반환됩니다.



'여러가지 > DBMS' 카테고리의 다른 글

[실습] 데이터베이스, 테이블, 트리거, 프로시저, 뷰  (0) 2024.05.27
[MariaDB] AUTO_INCREMENT  (0) 2024.05.27
[MariaDB] 권한  (0) 2024.05.27
[MariaDB] 사용자  (0) 2024.05.27
[MariaDB] 인덱스  (0) 2024.05.27