ロールによる最小権限モデルを構築する (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;概要
個々のユーザーではなくロールに権限を付与し、アカウントはロールのメンバーシップを通じて権限を得る。変更が 1 か所で済み、監査とオフボーディングが容易になる。
使用する場面
新しいアプリケーション / チームのアカウントを作成する場合や、権限が入り組んだレガシーサーバーを整理する場合。
注意
デフォルトロールでないロールはセッション内で有効にならず (CURRENT_ROLE() NONE)、ユーザーに権限がないように見える。SET DEFAULT ROLE ALL または activate_all_roles_on_login=ON を使用する。ロールもアカウントであり (ロック済み、パスワードなし)、mysql.user に表示される。アプリケーションアカウントには '%' ではなくネットワーク範囲を使用する。アプリケーションアカウントに ALL、SUPER、FILE、PROCESS、CONNECTION_ADMIN を付与してはならない。ロールから権限を取り消すと、アクティブなセッションにも影響する。