MySQL8以降で権限を複数付与する方法

投稿者: | 2020年5月26日

MySQL8以降ではユーザーに直接権限を設定するのではなく、まずロールというのものを作り、それに権限を設定してユーザーと紐づけます。

まず権限を一つだけつける

まずは基本となる権限を一つだけつけてみます。

【環境】
ユーザー: user1
ロール: test1_role
DB: test1

create role test1_role;
grant all on test1.* to test1_role;
create user user1@localhost identified by "(パスワード)" default role test1_role;

これで user1 から test1 への全権限をもったアクセスが許可されました。
すでにユーザーが存在している場合は、create userではなく次のようにします。

grant test1_role to user1@localhost

さらに権限を追加

さらに権限を追加し、user1がtest2というDBにも全権限をもってアクセスできるようにします。

【環境】
ユーザー: user1
ロール: test1_role, test2_role
DB: test1, test2

create role test2_role;
grant all on test2.* to test2_role;
grant test2_role to user1@localhost
set default role test1_role, test2_role to user1@localhost

これでuser1はtest1とtest2の両方にアクセスできるようになっています。
最後の set default role を実行しないとアクセスできないことに注意してください。
また、自分の現在の権限を確認するときは次のコマンドを実行します。

select current_role();

次のような結果が表示されます。

+-----------------------------------+
| current_role()                    |
+-----------------------------------+
| `test1_role`@`%`,`test2_role`@`%` |
+-----------------------------------+
1 row in set (0.00 sec)

最初は戸惑うかもしれませんが、大勢のユーザーがアクセスするDBを運用する場合には、ロールは大変便利な機能だと思います。