MySQL에서는 REVOKE 문을 사용하여 특정 사용자로부터 하나 이상의 권한 또는 모든 권한을 취소할 수 있습니다. REVOKE 문은 GRANT 문과 반대되는 기능을 하며, 데이터베이스 보안 관리에 필수적인 도구입니다.
REVOKE 문 기본 문법
REVOKE privilege_type [(column_list)]
[, priv_type [(column_list)]]...
ON [object_type] privilege_level
FROM user [, user]...
문법 구성 요소 설명
첫째, REVOKE 키워드 바로 뒤에 사용자에게서 회수하려는 권한 목록을 지정합니다. 여러 개의 권한은 쉼표(,)로 구분합니다.
둘째, ON 절에 권한을 취소할 권한 수준(privilege level)을 지정합니다. 예를 들어 전체 데이터베이스(*.*), 특정 데이터베이스, 특정 테이블 등이 될 수 있습니다.
셋째, FROM 절에 권한을 회수할 사용자 계정을 지정합니다. 여러 사용자를 한 번에 지정할 수도 있습니다.
실제 예제
다음 예제에서는 abcd@localhost 사용자에게 부여된 권한을 확인하고 취소하는 과정을 살펴보겠습니다.
1단계: 현재 권한 확인
먼저 SHOW GRANTS 문으로 해당 사용자가 어떤 권한을 가지고 있는지 확인합니다.
mysql> SHOW GRANTS FOR abcd@localhost;
+---------------------------------------------------------------------+
| Grants for abcd@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
현재 이 사용자는 모든 데이터베이스(*.*)에 대한 모든 권한(ALL PRIVILEGES)과 함께 다른 사용자에게 권한을 부여할 수 있는 GRANT OPTION까지 가지고 있습니다.
2단계: 권한 취소 실행
다음 쿼리를 실행하면 abcd@localhost 사용자의 모든 권한과 GRANT OPTION이 취소됩니다.
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM abcd@localhost;
Query OK, 0 rows affected (0.00 sec)
3단계: 취소 결과 확인
mysql> SHOW GRANTS for abcd@localhost;
+------------------------------------------+
| Grants for abcd@localhost |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'abcd'@'localhost' |
+------------------------------------------+
1 row in set (0.00 sec)
권한 취소 후 결과를 보면 USAGE 권한만 남아 있는 것을 확인할 수 있습니다. USAGE는 실질적인 아무 권한도 없음을 의미하는 특수한 권한으로, 계정이 로그인만 가능하고 어떤 작업도 수행할 수 없는 상태입니다.
참고 사항
REVOKE를 실행하려면 자신이 부여했던 권한에 대한 GRANT OPTION이 있어야 합니다. 또한 권한 변경 사항은 즉시 적용되지만, 이미 연결 중인 세션에는 다음 로그인 시점부터 완전히 반영될 수 있습니다. 필요하다면 DROP USER 문으로 사용자 계정 자체를 삭제하는 것도 고려해 볼 수 있습니다.