MySQL에서 사용자 권한을 확인하는 가장 중요한 명령어 중 하나가 SHOW GRANTS이다.
데이터베이스 보안을 관리할 때 특정 사용자가 어떤 권한을 가지고 있는지 확인하는 것은 필수적인 작업이다.
특히 관리자(root) 계정이나 특정 권한을 부여받은 계정의 권한을 주기적으로 점검하면
보안 취약점을 사전에 예방할 수 있다.

1. SHOW GRANTS 명령어란?
SHOW GRANTS 명령어는 특정 사용자 계정이 가지고 있는 모든 권한을 확인하는 데 사용된다.
이 명령어를 통해 사용자가 어떤 데이터베이스에서 SELECT, INSERT, UPDATE 등의 권한을 가지고 있는지
또는 GRANT OPTION(권한 부여 권한)이 있는지 등을 확인할 수 있다.
기본 구문
SHOW GRANTS FOR '사용자'@'호스트';
- '사용자'@'호스트' : 권한을 확인할 대상 사용자 계정
2. 현재 로그인한 사용자의 권한 확인
MySQL에서는 현재 로그인한 계정의 권한을 쉽게 확인할 수 있다.
예제 1: 현재 로그인한 사용자의 권한 조회
SHOW GRANTS;
위 명령어를 실행하면 현재 로그인한 계정의 모든 권한 목록이 출력된다.
이는 SHOW GRANTS FOR CURRENT_USER; 와 동일하다.
출력 예시
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'myuser'@'localhost';
위와 같은 결과가 나오면 myuser@localhost 사용자는 mydb 데이터베이스에서 SELECT, INSERT, UPDATE, DELETE 권한을 보유하고 있음을 의미한다.
3. 특정 사용자 계정의 권한 확인
관리자가 특정 사용자 계정의 권한을 확인해야 할 경우,
SHOW GRANTS FOR '사용자'@'호스트'; 형식을 사용한다.
예제 2: 특정 사용자 계정의 권한 조회
SHOW GRANTS FOR 'testuser'@'localhost';
이 명령어는 testuser@localhost 계정이 가진 모든 권한을 출력한다.
출력 예시
GRANT SELECT, INSERT ON mydb.* TO 'testuser'@'localhost';
GRANT USAGE ON *.* TO 'testuser'@'localhost';
여기서 GRANT USAGE는 해당 계정이 MySQL에 존재하지만, 특별한 권한을 부여받지 않았음을 의미한다.
즉, testuser 계정은 mydb 데이터베이스에서 SELECT 및 INSERT 권한만 보유하고 있다.
4. 특정 데이터베이스의 모든 사용자 권한 확인
예제 3: 특정 데이터베이스에서 모든 사용자 권한 확인
SELECT user, host FROM mysql.db WHERE db = 'mydb';
위 명령어를 실행하면 mydb 데이터베이스에 대한 모든 사용자 계정 목록을 확인할 수 있다.
이제 각각의 사용자에 대해 SHOW GRANTS 명령어를 실행하면 된다.
예제 4: 특정 데이터베이스의 모든 사용자 권한 조회 스크립트
SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';')
FROM mysql.db WHERE db = 'mydb';
이 명령어는 해당 데이터베이스에 접근 가능한 모든 사용자에 대해 SHOW GRANTS 명령어를 자동 생성한다.
5. SUPER 권한을 가진 사용자 찾기
MySQL에서 SUPER 권한을 가진 사용자는 시스템의 중요한 작업을 수행할 수 있다.
따라서 보안 점검을 위해 SUPER 권한이 있는 계정을 확인하는 것이 중요하다.
예제 5: SUPER 권한을 가진 사용자 찾기
SELECT user, host FROM mysql.user WHERE Super_priv = 'Y';
이 명령어를 실행하면 SUPER 권한이 부여된 모든 사용자 계정 목록이 출력된다.
이제 각 사용자에 대해 SHOW GRANTS 명령어를 실행하여 상세한 권한을 확인할 수 있다.
6. 특정 사용자에게 부여된 특정 권한 확인
MySQL에서는 특정 사용자가 특정 권한을 가지고 있는지 직접 확인할 수 있다.
예제 6: 특정 사용자의 특정 권한 확인
SHOW GRANTS FOR 'admin'@'localhost' LIKE '%ALL PRIVILEGES%';
위 명령어를 실행하면 admin@localhost 계정이 ALL PRIVILEGES 권한을 보유하고 있는지 확인 가능하다.
7. 사용자 권한을 백업하는 방법
관리자가 데이터베이스를 백업할 때 사용자 계정의 권한 정보도 함께 저장하는 것이 중요하다.
특히 MySQL 서버를 이전하거나 새로운 환경으로 이동할 때 SHOW GRANTS를 사용하면 큰 도움이 된다.
예제 7: 모든 사용자 권한을 백업하는 스크립트
SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';')
FROM mysql.user;
이 명령어를 실행하면 모든 사용자에 대한 SHOW GRANTS 명령어가 생성되므로,
이를 백업하여 나중에 그대로 복원할 수 있다.
8. MySQL 5.7과 8.0에서의 차이점
기능 | MySQL 5.7 | MySQL 8.0 |
SHOW GRANTS 실행 방식 | 동일 | 동일 |
SUPER 권한 조회 | 가능 | 가능 |
mysql.user 테이블 접근 방식 | 직접 조회 가능 | 일부 제한됨 |
특정 권한 조회 | LIKE 사용 가능 | 권장되지 않음 |
MySQL 8.0에서는 보안 강화를 위해 mysql.user 테이블의 직접 조회가 일부 제한되었으며,
SHOW GRANTS 명령어를 활용하는 것이 더욱 중요해졌다.
마무리
MySQL의 SHOW GRANTS 명령어는 사용자의 권한을 확인하고, 보안을 점검하는 데 필수적인 도구이다.
특히 데이터베이스 관리자가 주기적으로 사용자의 권한을 점검하면,
불필요한 권한이 부여되는 것을 방지하고 보안 사고를 예방할 수 있다.
MySQL 8.0부터는 보안 정책이 강화되면서 SHOW GRANTS 명령어의 중요성이 더욱 커지고 있다.
따라서 정기적으로 사용자 권한을 점검하고, 필요 없는 권한을 제거하는 것이 중요하다.
공식 가이드 문서
MySQL SHOW GRANTS 공식 문서:
https://dev.mysql.com/doc/refman/8.0/en/show-grants.html
'DB' 카테고리의 다른 글
[MySQL] SHOW PRIVILEGES 완벽 가이드 사용법(모든 권한 확인) (0) | 2025.04.02 |
---|---|
[MySQL] UNLOCK TABLES 완벽 가이드 사용법(테이블 잠금 해제) (0) | 2025.04.02 |
[MySQL] LOCK TABLES 완벽 가이드 사용법(테이블 잠금) (0) | 2025.04.02 |
[MySQL] FLUSH PRIVILEGES 완벽 가이드 사용법(캐시 갱신) (0) | 2025.04.02 |
[MySQL] SET PASSWORD 완벽 가이드 사용법(비밀번호 변경) (0) | 2025.04.02 |
[MySQL] RENAME USER 완벽 가이드 사용법(사용자 계정명 변경) (0) | 2025.04.01 |
[MySQL] ALTER USER 완벽 가이드 사용법(사용자 계정 변경) (0) | 2025.04.01 |
[MySQL] DROP USER 완벽 가이드 사용법(사용자 계정 삭제) (0) | 2025.04.01 |