MySQLではバージョン5.
Proxy User
通常、外部の認証を利用した場合、そのユーザー情報はMySQLのアカウントには存在しません。そのため、アカウントの権限を付与したり、そのアカウントでのDB操作を行うことができません。Proxy Userはそのような認証を利用した場合に、外部ユーザーが別のユーザーとして接続し、その別のユーザーに与えられた権限で操作を行うことができます。
今回は外部の認証の仕組みを別途準備せず、既存のmysql_
準備
まず、権限を持たないユーザーfukamachiと、権限を移譲されるユーザーd1_
mysql> CREATE USER 'fukamachi'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE USER 'd1_operation'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL ON d1.* TO 'd1_operation'@'localhost'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> GRANT PROXY ON 'd1_operation'@'localhost' TO 'fukamachi'@'localhost'; Query OK, 0 rows affected, 2 warnings (0.00 sec)
ログイン後の移譲は、デフォルトの設定では利用できません。check_
- check_
proxy_ users - このシステム変数が有効な場合、認証プラグインに対してProxy User mappingを実行します。
- mysql_
native_ password_ proxy_ users - このシステム変数が有効な場合はmysql_
native_ passwordでProxy Userをサポートします。
どちらも動的システム変数であるため、再起動せずにSET GLOBALで変更することが可能です。
mysql> SET GLOBAL check_proxy_users = 1; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL mysql_native_password_proxy_users = 1; Query OK, 0 rows affected (0.01 sec)
Proxy Userを試してみる
上記で準備は完了です。実際に権限を持たないユーザーでログインして確認してみましょう。
$ mysql -ufukamachi -p mysql> SHOW GRANTS; +--------------------------------------------------------------+ | Grants for d1_operation@localhost | +--------------------------------------------------------------+ | GRANT USAGE ON *.* TO `d1_operation`@`localhost` | | GRANT ALL PRIVILEGES ON `d1`.* TO `d1_operation`@`localhost` | +--------------------------------------------------------------+ 2 rows in set (0.00 sec)
権限を確認すると、権限をもたないはずなのにd1_
また、ユーザー情報を確認すると、USER()とCURRENT_
mysql> SELECT user(), current_user(); +---------------------+------------------------+ | user() | current_user() | +---------------------+------------------------+ | fukamachi@localhost | d1_operation@localhost | +---------------------+------------------------+ 1 row in set (0.00 sec)
Proxy Userへの権限付与
外部ユーザーに別のユーザーの権限を持つことができるようにするには、PROXY権限を付与する必要があります。この権限は、カンマ区切りで複数のユーザーに付与することも可能です。権限を剥奪する場合はREVOKE文を使って剥奪します。
mysql> GRANT PROXY ON 'd1_operation'@'localhost' TO 'fukamachi'@'localhost'; mysql> GRANT PROXY ON 'rw1' TO 'f1', 'f2', 'f3'; mysql> REVOKE PROXY ON 'd1_operation'@'localhost' FROM 'fukamachi'@'localhost';
Proxy Userを制限する
場合によっては、Proxy User用に作成したアカウントが直接利用されないようにする必要があります。直接利用されないために、公式ドキュメントでは以下の3つの方法が紹介されています。
- mysql_
no_ loginプラグインを利用する - アカウント作成時にACCOUNT LOCKオプションを含める
- パスワードを他の利用者に教えない
まとめ
今回はProxy Userの利用方法について簡単に説明しました。
Proxy Userは、外部の認証を利用する際に別のユーザーの権限を持つことができる機能です。権限を移譲できるのであれば、ROLEのように権限管理に利用できるのでは、と思った読者の方もいるかもしれません。Proxy Userはあくまで外部の認証を利用した場合に別のユーザーの権限を持つことができる機能であり、ROLEのように権限をグルーピングしたり一元管理することはできません。目的が異なるため、権限を管理する場合はROLEを使用することをおすすめします。
Proxy Userを使うことで、外部認証を利用する場合でもDB操作が可能となります。もしそのような要件がある場合には、Proxy Userの利用を検討してください。より詳細な利用方法については公式ドキュメントの プロキシユーザーをご確認ください。