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を運用する場合には、ロールは大変便利な機能だと思います。