테마
사용자·권한·역할
사용자 식별과 계정 관리
sql
CREATE USER 'app'@'10.0.0.%' IDENTIFIED BY '...'; -- 이름+호스트가 계정
ALTER USER 'app'@'10.0.0.%' ACCOUNT LOCK; -- 잠금
DROP USER 'app'@'10.0.0.%';'app'@'localhost'와'app'@'%'는 다른 계정이다. MySQL은 사용자 이름에 접속한 호스트까지 합쳐 계정을 식별한다. 호스트 자리의%는 "아무 문자열이나"를 뜻하는 와일드카드라,'%'는 모든 호스트,'10.0.0.%'는 10.0.0.으로 시작하는 주소를 뜻한다.- 시스템 계정(
mysql.sys등)은 내부용이다. 앱은 필요한 권한만 가진 일반 계정으로 접속한다. - 8.0 기본 인증 방식은
caching_sha2_password다. 비밀번호를 확인하는 방식은 인증 플러그인(authentication plugin)으로 정해진다. 구 클라이언트 호환이 필요하면 호스트별로 어떤 플러그인을 쓰는지 확인한다.
비밀번호 관리
- 강력한 정책: 서버에 붙이는 기능 부품인
validate_password컴포넌트로 비밀번호 길이·복잡도를 강제한다. - 이중 비밀번호(dual password): 비밀번호를 바꿀 때 새 비밀번호와 옛 비밀번호를 잠시 함께 유효하게 둔다(
RETAIN CURRENT PASSWORD). 앱들이 새 비밀번호로 다 옮겨 가면 옛 비밀번호를 파기한다. 서비스를 멈추지 않고 교체하는 패턴이다. - 비밀번호 만료(
PASSWORD EXPIRE)와 예전 비밀번호 재사용 금지도 정책으로 건다.
권한과 역할
sql
GRANT SELECT, INSERT ON shop.* TO 'app'@'10.0.0.%';
CREATE ROLE 'reader'; GRANT SELECT ON shop.* TO 'reader';
GRANT 'reader' TO 'app'@'10.0.0.%'; SET DEFAULT ROLE ALL TO 'app'@'10.0.0.%';- 권한은 서버 전체(글로벌)·DB·테이블·칼럼 층위로 나눠 줄 수 있다. 이 층위를 이용해 꼭 필요한 권한만 주는 것을 최소 권한 원칙(principle of least privilege)이라 한다.
- 역할(8.0)은 권한 묶음이다. 사람이 바뀌면 권한을 하나씩 다시 주지 않고 역할만 갈아 끼운다. 받은 역할은 활성화돼야 적용되는데,
SET DEFAULT ROLE로 지정해 두면 접속할 때 자동으로 활성화된다. SHOW GRANTS FOR 'app'@'10.0.0.%'로 실제 권한을 확인한다.
면접 포인트
- "계정이 뭔가요?" → 이름+호스트 짝. 같은 이름도 호스트 다르면 별개.
- "비밀번호 무중단 교체는?" → 이중 비밀번호 패턴.
- "역할을 왜 써요?" → 권한 묶음 관리. 사람·앱 교체 시 갈아끼우기.
