DBAtlas · 데이터베이스 운영 아틀라스

롤로 최소 권한 모델 구축 (CREATE ROLE, DEFAULT ROLE)

MySQL보안

명령어

CREATE ROLE IF NOT EXISTS 'app_read', 'app_write';
GRANT SELECT ON shop.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON shop.* TO 'app_write';

-- Application account: network range, TLS required, roles active by default
CREATE USER 'svc_app'@'10.0.%' IDENTIFIED BY 'S3cure#App2024' DEFAULT ROLE 'app_read', 'app_write' REQUIRE SSL;
CREATE USER 'ana'@'%' IDENTIFIED BY 'An4#Report2024';
GRANT 'app_read' TO 'ana'@'%';
SET DEFAULT ROLE ALL TO 'ana'@'%';

-- Show grants with roles expanded
SHOW GRANTS FOR 'svc_app'@'10.0.%' USING 'app_read', 'app_write';
SELECT FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges;

하는 일

개별 사용자 대신 롤에 권한을 부여하고 계정은 롤 멤버십으로 권한을 얻는다. 변경이 한 곳에서 이루어지고 감사와 퇴사자 처리가 쉬워진다.

사용 시점

새 애플리케이션/팀 계정을 만들 때, 그리고 권한이 얽힌 레거시 서버를 정리할 때.

주의

기본 롤이 아닌 롤은 세션에서 활성화되지 않으며(CURRENT_ROLE() NONE) 사용자에게 권한이 없는 것처럼 보인다. SET DEFAULT ROLE ALL 또는 activate_all_roles_on_login=ON을 사용한다. 롤도 계정(잠김, 비밀번호 없음)이며 mysql.user에 나타난다. 애플리케이션 계정에는 '%' 대신 네트워크 범위를 사용한다. 애플리케이션 계정에 ALL, SUPER, FILE, PROCESS, CONNECTION_ADMIN을 절대 부여하지 않는다. 롤에서 권한을 회수하면 활성 세션에도 영향을 준다.

DBAtlas에서 열기 →

관련 항목