LoginSignup
1
0

More than 1 year has passed since last update.

Aurora MySQLでrds_superuser_roleを使う時の注意点

Last updated at Posted at 2023-07-27

Aurora 3.x(MySQL 8.x)で新設されたロールベースの権限付与は、便利だが一点ハマりポイントがあるので共有。

最初に結論

ロールをアクティベートすることを忘れないこと。
権限ベースの時と違って、GRANTだけでは権限が有効にならない。

設定方法

大きく分けて、4種類ある。詳しくは本家の公式ドキュメントを参照。

ちなみにAuroraの公式ドキュメントにも、ちょっぴりだけ記載がある。もうちょっと丁寧に書いといてくれるとハマらずに済むのだが。。。

To simplify managing permissions for many users or applications, you can use the CREATE ROLE statement to create a role that has a set of permissions. Then you can use the GRANT and SET ROLE statements and the current_role function to assign roles to users or applications, switch the current role, and check which roles are in effect.

方法1) SET ROLEで一時的にセット

当該セッションでのみアクティベートされる。

SET ROLE rds_superuser_role;

方法2) SET DEFAULT ROLEで恒久的にセット

そのユーザーについては恒久的にアクティベートされる。

SET DEFAULT ROLE 'rds_superuser_role' TO <ユーザー名>;

方法3) パラメーターグループでセット

activate_all_roles_on_loginを1にセットすると、クラスター内の全てのユーザーに対して、既定でアクティベートされる。おそらくこれが一番楽。
ちなみにDBパラメーターグループの方にあり、デフォルト値は0(Aurora MySQL 3.03.1の頃に新規作成したDBパラメーターグループで確認)。

設定例

よい設定例

GRANT rds_superuser_role TO 'aurora_dba_user'@'%';
SET DEFAULT ROLE 'rds_superuser_role' TO 'aurora_dba_user'@'%';

悪い設定例

GRANT rds_superuser_role TO 'aurora_dba_user'@'%';

確認方法

SELECT current_role();を使って、ロールがアクティベートされているかを確認できる。
結果がNONEだとアクティベートされてません。

SELECT current_role();
+--------------------------+
| current_role()           |
+--------------------------+
| `rds_superuser_role`@`%` |
+--------------------------+

ちなみにSHOW GRANTSだけでは全く見分けが付かないので注意。

  • マスターユーザーと同じ権限割り当てなのに...
  • SHOW GRANTS FOR rds_superuser_role見ても内容同じだし...

という感じで、しばらく悩んだ。

まとめ

デフォルトのマスターユーザーを使うことは推奨されていないので、同権限のDBAユーザーを作ることになると思うが、その際の要注意ポイントのひとつ。
また、マルチユーザー戦略のシークレットローテーションを使う場合のローテーションユーザーでも、同じく注意が必要。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0