반응형
MySQL은 단순히 권한만 제어하는 것이 아니라, 계정별 리소스 사용량도 정밀하게 제한할 수 있다.
특정 계정이 과도한 연결이나 대량 쿼리로 시스템에 부담을 주지 않도록 관리하는 것이 핵심이다.
특히 다수의 외부 시스템이나 자동화 프로그램이 접속하는 환경에서는 리소스 제한 설정은 필수 보안/운영 전략이다.

🔧 지원되는 리소스 제한 항목
MySQL에서는 사용자 생성 시 다음과 같은 자원 제한을 설정할 수 있다.
| 항목 | 설명 |
| MAX_QUERIES_PER_HOUR | 시간당 허용 쿼리 수 |
| MAX_UPDATES_PER_HOUR | 시간당 허용 데이터 수정 쿼리 수 |
| MAX_CONNECTIONS_PER_HOUR | 시간당 최대 접속 수 |
| MAX_USER_CONNECTIONS | 해당 계정의 동시 접속 최대 수 |
이 제한값은 단위 시간(1시간 기준) 혹은 실시간으로 동작하며, 초과 시 자동으로 차단된다.
반응형
🧪 실전 예제: 사용자별 리소스 제한 설정
✅ 1. 계정 생성과 동시에 리소스 제한 적용
CREATE USER 'apiuser'@'%' IDENTIFIED BY 'secure123'
WITH
MAX_QUERIES_PER_HOUR 1000
MAX_UPDATES_PER_HOUR 200
MAX_CONNECTIONS_PER_HOUR 50
MAX_USER_CONNECTIONS 10;
- 1시간 동안 1000개의 쿼리, 200개의 업데이트만 허용
- 시간당 최대 50번 연결 가능
- 동시에 접속 가능한 연결 수는 10개 제한
✅ 2. 기존 사용자에 리소스 제한 추가
ALTER USER 'apiuser'@'%'
WITH
MAX_QUERIES_PER_HOUR 500
MAX_USER_CONNECTIONS 5;
- 기존 사용자에 제한을 추가하거나 변경할 때 사용
✅ 3. 제한값 제거
ALTER USER 'apiuser'@'%' WITH MAX_QUERIES_PER_HOUR 0;
- 0은 무제한을 의미
- 주의: 설정 삭제가 아닌, "제한 없음"을 의미함
🔍 현재 설정 확인 방법
직접 확인 명령은 없지만, SHOW CREATE USER로 설정값을 간접 확인할 수 있다.
SHOW CREATE USER 'apiuser'@'%';
출력 예:
CREATE USER 'apiuser'@'%' IDENTIFIED WITH 'mysql_native_password' BY '***'
WITH MAX_QUERIES_PER_HOUR 500
MAX_USER_CONNECTIONS 5;
또는 mysql.user 테이블에서 직접 확인 가능:
SELECT user, host, max_questions, max_updates, max_connections, max_user_connections
FROM mysql.user
WHERE user = 'apiuser';
반응형
💡 실무 운영 팁
- API 접속용 계정, 외부 시스템 연동 계정은 반드시 제한을 걸어야 한다
- 분석 툴이나 자동화 툴에서 반복 쿼리 폭주 시 시스템 전체가 느려질 수 있다
- 리소스 제한은 권한과 별도로 작동하므로 병행 설정이 가능하다
- 사용자별 접속 수나 쿼리량이 급증하는 경우 알림을 연동하는 것도 좋다
- 제한된 계정은 초과 시 Too many connections 또는 User 'xxx' has exceeded the 'max_questions' resource 같은 오류를 반환한다
✅ 정리
- MySQL 사용자 계정은 WITH 옵션을 통해 정밀한 리소스 제한 설정 가능하다
- 실시간 또는 시간 단위의 접속 수, 쿼리 수, 업데이트 수를 제한할 수 있다
- 과도한 리소스 사용을 차단하여 시스템 안정성을 확보할 수 있다
- 모든 외부 연동 계정, 자동화 계정은 반드시 제한을 적용해야 한다
- ALTER USER로 제한을 조정하고, SHOW CREATE USER 또는 mysql.user 테이블로 확인한다
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - Resource Control
반응형
'DB' 카테고리의 다른 글
| [MySQL] (백업/복구1️⃣) 백업의 모든 것: 개념, 필요성, 전략 총정리 (0) | 2025.07.12 |
|---|---|
| [MySQL] (권한관리7️⃣) 사용자 관리 실수 방지 체크리스트 (0) | 2025.07.11 |
| [MySQL] (권한관리6️⃣) 사용자 권한 확인 및 변경, 삭제 실무 명령어 정리 (2) | 2025.07.11 |
| [MySQL] (권한관리5️⃣) 비밀번호 관리와 인증 보안 강화 전략 (0) | 2025.07.11 |
| [MySQL] (권한관리3️⃣) 사용자별 권한 제한: 최소 권한 원칙 실무 적용 (0) | 2025.07.10 |
| [MySQL] (권한관리2️⃣) GRANT 명령어 완전 정복: 실전 예제 모음 (1) | 2025.07.10 |
| [MySQL] (권한관리1️⃣) 사용자 계정과 권한 구조 완벽 이해하기 (1) | 2025.07.09 |
| [MySQL] 대용량 테이블 분할 실전 사례와 쿼리 튜닝 효과 (1) | 2025.07.09 |