반응형
MySQL에서 권한을 부여할 때 사용하는 핵심 명령어는 GRANT다.
GRANT는 단순히 권한만 부여하는 게 아니라, 접속 제어, 객체 접근 범위, 데이터 조작 권한까지 통합적으로 관리하는 보안 도구다.
실무에서는 최소 권한 원칙을 따르면서도, 개발자·운영자·분석가 등 역할에 따라 정확히 권한을 나누는 것이 중요하다.

🧱 GRANT 기본 문법
GRANT 권한목록 ON 대상 TO '사용자'@'호스트';
예:
GRANT SELECT, INSERT ON mydb.* TO 'appuser'@'192.168.0.%';
- mydb.* : mydb 데이터베이스 내 모든 테이블에 적용
- 'appuser'@'192.168.0.%' : 해당 IP 대역의 사용자에게 권한 부여
📂 대상 범위 이해
| 대상 | 설명 |
| *.* | 모든 데이터베이스와 테이블 |
| mydb.* | 특정 DB의 모든 테이블 |
| mydb.users | 특정 테이블만 지정 |
| mydb.users (email, name) | 컬럼 단위 권한 (MySQL 8.0+) |
범위 지정이 정확하지 않으면 예상치 못한 접근 권한이 발생할 수 있다.
반응형
🧪 실전 예제 모음
✅ 1. 읽기 전용 계정 만들기
CREATE USER 'readonly'@'%' IDENTIFIED BY 'safe123!';
GRANT SELECT ON mydb.* TO 'readonly'@'%';
- 조회만 가능하며 데이터 수정은 불가능
✅ 2. 개발자 전용 권한 부여
CREATE USER 'dev'@'%' IDENTIFIED BY 'devpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON devdb.* TO 'dev'@'%';
- 개발 환경 전용 DB에 CRUD + 구조 변경 권한까지 부여
✅ 3. 특정 테이블만 접근 허용
GRANT SELECT ON mydb.logs TO 'logger'@'10.0.0.%';
- logs 테이블만 읽을 수 있도록 설정
✅ 4. 트리거, 이벤트 권한 추가
GRANT TRIGGER, EVENT ON mydb.* TO 'devops'@'%';
- 이벤트 기반 처리 가능
✅ 5. 루틴(Stored Procedure) 사용 권한
GRANT EXECUTE ON PROCEDURE mydb.calculate_salary TO 'hruser'@'%';
- 프로시저만 실행 가능하도록 설정
✅ 6. GRANT OPTION 부여
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'localhost' WITH GRANT OPTION;
- admin 사용자가 다른 사용자에게도 권한을 줄 수 있음
- 매우 주의해서 사용해야 함
반응형
🔒 최소 권한 전략 실천 팁
- 실무에서는 ALL PRIVILEGES 사용을 자제한다
- SELECT, INSERT, UPDATE, DELETE 등 필요한 권한만 선별해서 부여
- 데이터 조회만 필요한 사용자에게는 SELECT만
- 운영 DB에는 ALTER, DROP, GRANT OPTION은 제외
- IP 제한을 걸어 'user'@'%' 대신 'user'@'10.0.0.%' 형태로 설정
🧠 실무에서 자주 묻는 질문
Q. GRANT 후 바로 적용되나요?
A. 네, 즉시 적용된다. 별도 FLUSH PRIVILEGES 필요 없음
Q. 기존 권한은 삭제되나요?
A. 아니다. GRANT는 권한을 "추가"할 뿐이며 기존 권한은 유지됨
Q. 사용자 생성과 동시에 권한도 줄 수 있나요?
A. MySQL 8.0부터는 가능하다
CREATE USER 'dataeng'@'%' IDENTIFIED BY 'pw' PASSWORD EXPIRE INTERVAL 90 DAY;
GRANT SELECT ON analytics.* TO 'dataeng'@'%';
🔎 권한 확인 방법
SHOW GRANTS FOR 'readonly'@'%';
해당 계정에 부여된 권한을 모두 확인 가능
❌ 권한 제거는 REVOKE
REVOKE INSERT, UPDATE ON mydb.* FROM 'dev'@'%';
권한 실수 시에는 REVOKE로 부분 제거하거나, DROP USER로 계정을 삭제한 뒤 재생성하는 게 더 안전한 경우도 많다.
✅ 정리
- GRANT는 역할 기반 권한 분리를 실현하는 핵심 도구다
- 실무에서는 최소 권한 원칙을 지키며 사용자마다 정확히 범위를 나눠야 한다
- GRANT, REVOKE, SHOW GRANTS는 권한 관리를 위한 핵심 명령어다
- 모든 권한 변경은 문서화하고 정기 점검이 필요하다
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - GRANT Syntax
반응형
'DB' 카테고리의 다른 글
| [MySQL] (권한관리6️⃣) 사용자 권한 확인 및 변경, 삭제 실무 명령어 정리 (2) | 2025.07.11 |
|---|---|
| [MySQL] (권한관리5️⃣) 비밀번호 관리와 인증 보안 강화 전략 (0) | 2025.07.11 |
| [MySQL] (권한관리4️⃣) 사용자별 리소스 제한 설정하기 (연결 수, 쿼리 수 등) (2) | 2025.07.10 |
| [MySQL] (권한관리3️⃣) 사용자별 권한 제한: 최소 권한 원칙 실무 적용 (0) | 2025.07.10 |
| [MySQL] (권한관리1️⃣) 사용자 계정과 권한 구조 완벽 이해하기 (1) | 2025.07.09 |
| [MySQL] 대용량 테이블 분할 실전 사례와 쿼리 튜닝 효과 (1) | 2025.07.09 |
| [MySQL] 파티션 설계 시 주의할 점과 실무 적용 팁 🚨 (2) | 2025.07.09 |
| [MySQL] KEY 파티션 전략: 자동 해시로 분산 처리하기 🔑 (1) | 2025.07.09 |