반응형
MySQL에서 가장 중요한 보안 원칙 중 하나는 바로 최소 권한 원칙(Least Privilege Principle)이다.
불필요한 권한은 반드시 제거하고, 사용자에게는 자신의 역할 수행에 꼭 필요한 권한만 부여해야 한다.
이 원칙은 보안 사고 예방은 물론, 데이터 무결성 보호에도 결정적인 역할을 한다.

🔐 최소 권한 원칙이 중요한 이유
- 실수로 인한 데이터 삭제 방지
- 공격자 침입 시 피해 최소화
- 내부 사용자 오용 가능성 차단
- DB 운영의 책임 분산과 추적 가능성 확보
단 하나의 ALL PRIVILEGES가 시스템 전체를 위험에 빠뜨릴 수 있다.
🧑💻 실무 역할 기반 권한 구성 예시
| 사용자 유형 | 권한 |
| 분석가 | SELECT (조회만 가능) |
| 개발자 | SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER (테스트 DB 한정) |
| 운영자 | SELECT, INSERT, UPDATE, DELETE (운영 DB에서 테이블 단위로 분리 적용) |
| 관리자(DBA) | ALL PRIVILEGES + GRANT OPTION (운영 전용, 제한된 계정만 사용) |
역할에 따라 계정을 분리하고, 접속 가능 IP도 함께 제한하는 것이 필수다.
반응형
🧪 최소 권한 부여 실전 예제
✅ 1. 분석 전용 계정
CREATE USER 'analyst'@'%' IDENTIFIED BY 'readonly123';
GRANT SELECT ON salesdb.* TO 'analyst'@'%';
- 데이터 분석만 가능, 실수로 수정할 위험 없음
✅ 2. 개발자 테스트 DB 전용 권한
CREATE USER 'dev'@'%' IDENTIFIED BY 'devpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON testdb.* TO 'dev'@'%';
- 운영 DB 접근은 차단, 테스트 DB에서만 작업 가능
✅ 3. 운영 DB 테이블 제한 권한
CREATE USER 'ops'@'10.0.0.%' IDENTIFIED BY 'opspass';
GRANT SELECT, UPDATE ON prod.orders TO 'ops'@'10.0.0.%';
- orders 테이블만 조회·수정 가능, DELETE 권한은 없음
🛡️ 권한 제한 시 보안 강화 팁
- GRANT OPTION은 관리자 외 절대 부여 금지
- ALL PRIVILEGES는 개발용 DB 외에 사용 금지
- 접속 허용 호스트는 % 대신 정확한 IP 또는 VPN 대역 지정
- 패스워드는 주기적으로 변경하고, 비밀번호 정책 적용 필수
반응형
🧪 실전 점검 체크리스트
1. 모든 사용자 계정의 권한 목록 확인
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR '사용자명'@'호스트';
2. 필요 없는 권한은 REVOKE로 제거
REVOKE DELETE ON prod.orders FROM 'ops'@'10.0.0.%';
3. 불필요한 계정은 DROP USER로 삭제
DROP USER 'testuser'@'%';
4. 운영/테스트/개발 환경 별로 사용자 철저히 분리
5. 모든 권한 변경은 로그 또는 문서로 기록
✅ 정리
- 최소 권한 원칙은 MySQL 보안의 핵심 전략이다.
- 사용자별 업무 목적에 맞는 권한만 부여하고, 나머지는 철저히 제한한다.
- GRANT 사용 시에도 대상 범위(DB, 테이블, 컬럼)를 명확히 지정해야 한다.
- 정기적인 권한 점검과 관리 문서화가 필수다.
- 권한 남용은 보안 사고로 직결된다. 예방이 최고의 방어다.
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - Access Control and Account Management
반응형
'DB' 카테고리의 다른 글
| [MySQL] (권한관리7️⃣) 사용자 관리 실수 방지 체크리스트 (0) | 2025.07.11 |
|---|---|
| [MySQL] (권한관리6️⃣) 사용자 권한 확인 및 변경, 삭제 실무 명령어 정리 (2) | 2025.07.11 |
| [MySQL] (권한관리5️⃣) 비밀번호 관리와 인증 보안 강화 전략 (0) | 2025.07.11 |
| [MySQL] (권한관리4️⃣) 사용자별 리소스 제한 설정하기 (연결 수, 쿼리 수 등) (2) | 2025.07.10 |
| [MySQL] (권한관리2️⃣) GRANT 명령어 완전 정복: 실전 예제 모음 (1) | 2025.07.10 |
| [MySQL] (권한관리1️⃣) 사용자 계정과 권한 구조 완벽 이해하기 (1) | 2025.07.09 |
| [MySQL] 대용량 테이블 분할 실전 사례와 쿼리 튜닝 효과 (1) | 2025.07.09 |
| [MySQL] 파티션 설계 시 주의할 점과 실무 적용 팁 🚨 (2) | 2025.07.09 |