(시도 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 |