반응형
MySQL의 보안은 사용자 계정과 권한에서 시작된다.
불필요한 권한을 가진 계정 하나가 전체 시스템을 위협할 수 있고, 반대로 너무 제한된 권한은 개발과 운영 효율을 떨어뜨릴 수 있다.
따라서 MySQL을 운영하는 모든 개발자와 DBA는 사용자 계정 구조와 권한 체계를 정확히 이해해야 한다.
👤 사용자 계정의 구성 방식
MySQL의 사용자 계정은 단순히 사용자명만으로 관리되지 않는다.
사용자명@호스트 형태로 구분되며, 같은 사용자명이라도 접속 호스트에 따라 다른 계정으로 인식된다.
예시:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'pw1234';
CREATE USER 'admin'@'%' IDENTIFIED BY 'pw5678';
- 'admin'@'localhost': 로컬 접속 전용 계정
- 'admin'@'%': 모든 외부 IP 허용
이처럼 동일한 사용자명이라도 호스트가 다르면 별도 계정으로 동작한다.
반응형
🧱 MySQL 계정 관리 시스템 테이블
MySQL은 내부적으로 mysql 시스템 데이터베이스에서 사용자 및 권한 정보를 관리한다.
중요한 테이블은 다음과 같다.
테이블명 | 역할 |
user | 사용자 기본 정보 및 전역 권한 저장 |
db | 특정 DB에 대한 권한 |
tables_priv | 테이블 단위 권한 |
columns_priv | 컬럼 단위 권한 |
procs_priv | 프로시저/함수 권한 |
global_grants (8.0+) | 동적 권한 관리 |
SELECT * FROM mysql.user; 명령어로 전체 사용자 목록과 전역 권한을 확인할 수 있다.
🧑💻 사용자 생성 기본 문법
사용자 계정은 CREATE USER 명령어로 생성한다.
CREATE USER 'devuser'@'192.168.0.%' IDENTIFIED BY 'strongpass!';
- 'devuser'@'192.168.0.%': 해당 IP 대역에서 접속 허용
- IDENTIFIED BY: 패스워드 지정
MySQL 8.0 이상에서는 caching_sha2_password가 기본 인증 플러그인으로 설정된다.
🔐 사용자 권한의 구조
MySQL 권한은 크게 다음 4가지로 나눌 수 있다.
- 전역 권한 (Global Privileges)
- 모든 DB에 대해 적용
- mysql.user 테이블에 저장
- DB 권한 (Database Privileges)
- 특정 DB에만 적용
- mysql.db 테이블에 저장
- 테이블 권한 (Table Privileges)
- 특정 테이블 단위로 부여
- 컬럼/프로시저 권한
- 컬럼 단위, 저장 루틴 단위의 세밀한 권한 제어 가능
권한은 GRANT 명령어로 부여하고, REVOKE 명령어로 제거한다.
반응형
📊 주요 권한 종류 요약
권한 | 설명 |
SELECT, INSERT, UPDATE, DELETE | DML 작업 |
CREATE, DROP, ALTER | 객체 생성/삭제 |
INDEX, TRIGGER | 성능, 이벤트 제어 |
GRANT OPTION | 다른 사용자에게 권한 부여 허용 |
ALL PRIVILEGES | 모든 권한 일괄 부여 |
권한은 조합해서 부여 가능하며, 필요 이상으로 부여하는 건 보안상 매우 위험하다.
🔎 현재 사용자 권한 확인
SHOW GRANTS FOR 'devuser'@'192.168.0.%';
현재 계정에 부여된 권한을 SQL 형식 그대로 확인할 수 있어, 백업/재설정에 유용하다.
🧠 실무 운영 팁
- 운영 DB에는 % 대신 정확한 IP 또는 VPN 대역만 허용하도록 설정한다
- 반드시 비밀번호 정책을 적용하고 주기적 변경을 강제한다
- 권한 변경 이력은 별도 문서로 기록하거나 감사 로그에 남긴다
- 불필요한 권한은 제거, 더 이상 사용하지 않는 계정은 DROP USER로 삭제한다
- 관리자 외에는 GRANT OPTION 절대 부여 금지
✅ 정리
- MySQL의 사용자 계정은 사용자명@호스트 형태로 동작한다
- 권한은 전역 → DB → 테이블 → 컬럼 수준으로 세분화되어 있다
- 실무에서는 최소 권한 원칙을 지키고, 정기적으로 사용자 권한을 점검해야 한다
- 시스템 테이블(mysql.user 등)을 통해 내부 구조를 파악하면 보안 관리에 유리하다
- SHOW GRANTS, CREATE USER, GRANT, REVOKE는 필수 명령어다
🔗 공식 문서 참고
MySQL 8.0 Reference Manual - User Account Management
반응형
'DB' 카테고리의 다른 글
[MySQL] (권한관리5️⃣) 비밀번호 관리와 인증 보안 강화 전략 (0) | 2025.07.11 |
---|---|
[MySQL] (권한관리4️⃣) 사용자별 리소스 제한 설정하기 (연결 수, 쿼리 수 등) (2) | 2025.07.10 |
[MySQL] (권한관리3️⃣) 사용자별 권한 제한: 최소 권한 원칙 실무 적용 (0) | 2025.07.10 |
[MySQL] (권한관리2️⃣) GRANT 명령어 완전 정복: 실전 예제 모음 (1) | 2025.07.10 |
[MySQL] 대용량 테이블 분할 실전 사례와 쿼리 튜닝 효과 (1) | 2025.07.09 |
[MySQL] 파티션 설계 시 주의할 점과 실무 적용 팁 🚨 (2) | 2025.07.09 |
[MySQL] KEY 파티션 전략: 자동 해시로 분산 처리하기 🔑 (1) | 2025.07.09 |
[MySQL] HASH 파티션 전략: 균등 분산의 핵심 알고리즘 ⚙️ (1) | 2025.07.08 |