継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Aurora Severless V2 の DB ユーザーに GRANT ALL PRIVILEGES をするとエラーが出たので対処をまとめた

タダです.

Aurora Serveless V2 で管理者ユーザーと同等の権限を持つ DB ユーザーを作りたいと思い, GRANT ALL PRIVILEGES でユーザーに権限を付与しようとしたら実行ができないことを知りました.この記事ではどのように対応したのかをまとめます.

事象の概要

Aurora Serveless V2 に管理者ユーザーと同等のユーザー(今回は blog というユーザー)を作りたいと思ったが,GRANT ALL PRIVILEGES を実行したら下記のエラーがでました.AWS の解説ページでも GRANT ALL PRIVILEGES が紹介されておらず管理者ユーザーの権限を確認して同じ権限を振るという案内がされています.

> GRANT ALL PRIVILEGES ON *.* TO 'blog'@'%';
ERROR 1045 (28000): Access denied for user 'admin'@'%' (using password: YES)

aws.amazon.com

管理者ユーザーの権限を確認する

そこで管理者ユーザーの権限を参照してから付与してみることにしました.すると,rds_superuser_roleという見たことない権限が与えられていました.

> SHOW GRANTS for 'admin'@'%';
+-----------------------------------------------+
| Grants for admin@%                            |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO `admin`@`%`             |
| GRANT `rds_superuser_role`@`%` TO `admin`@`%` |
+-----------------------------------------------+
2 rows in set (0.00 sec)

調べてみたところ,Aurora MySQL バージョン3 では rds_superuser_roleが特別なロールとして作られておりそれが管理者ユーザーに設定されていました.

ドキュメント引用文(クリックすると表示されます)

Aurora MySQL バージョン 3 には、以下のすべての権限を持つ特別なロールが含まれています。ロールの名前は rds_superuser_role です

ALTER

APPLICATION_PASSWORD_ADMIN

ALTER ROUTINE

CONNECTION_ADMIN

CREATE

CREATE ROLE

CREATE ROUTINE

CREATE TABLESPACE

CREATE TEMPORARY TABLES

CREATE USER

CREATE VIEW

DELETE

DROP

DROP ROLE

EVENT

EXECUTE

INDEX

INSERT

LOCK TABLES

PROCESS

REFERENCES

RELOAD

REPLICATION CLIENT

REPLICATION SLAVE

ROLE_ADMIN

SET_USER_ID

SELECT

SHOW DATABASES

SHOW VIEW

TRIGGER

UPDATE

XA_RECOVER_ADMIN

docs.aws.amazon.com

てことであれば,この権限を振ってあげればいいと思い,その設定を行いましたところロールを割り当てられることができました.

> GRANT 'rds_superuser_role' TO 'blog'@'%';
Query OK, 0 rows affected (0.05 sec)

> SHOW GRANTS for 'blog'@'%';
+----------------------------------------------+
| Grants for blog@%                            |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `blog`@`%`             |
| GRANT `rds_superuser_role`@`%` TO `blog`@`%` |
+----------------------------------------------+
2 rows in set (0.00 sec)

まとめ

MySQL バージョン8.0 の Aurora 環境での管理者ユーザーと同等の権限を割り振ろうとしてみた時に調べたことと試したことをまとめました.8.0 の環境を使う機会は今後増えそうなので初めて遭遇したことは生理として記事に残りしていければと思います.