mysql_no_login
サーバー側認証プラグインは、それを使用するアカウントへのすべてのクライアント接続を防ぎます。 このプラグインのユースケースは次のとおりです:
通常のユーザーに権限を公開せずに、昇格された権限を持つストアドプログラムおよびビューを実行できる必要があるアカウント。
直接ログインを許可しないが、プロキシアカウントを介してのみアクセスすることを目的としたプロキシアカウント。
次の表には、プラグインおよびライブラリファイルの名前を示します。 ファイル名のサフィクスは、システムによって異なる場合があります。 ファイルは、plugin_dir
システム変数で指定されたディレクトリに配置する必要があります。
表 6.20 ログインなし認証のプラグインおよびライブラリ名
プラグインまたはファイル | プラグインまたはファイル名 |
---|---|
サーバー側プラグイン | mysql_no_login |
クライアント側プラグイン | なし |
ライブラリファイル | mysql_no_login.so |
次の各セクションでは、ログインなしのプラガブル認証に固有のインストールおよび使用方法について説明します:
MySQL のプラガブル認証に関する一般的な情報については、セクション6.2.17「プラガブル認証」を参照してください。 プロキシユーザーについては、セクション6.2.18「プロキシユーザー」を参照してください。
このセクションでは、ログインなしの認証プラグインをインストールする方法について説明します。 プラグインのインストールについての一般的な情報は、セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。
サーバーで使用できるようにするには、プラグインライブラリファイルを MySQL プラグインディレクトリ (plugin_dir
システム変数で指定されたディレクトリ) に配置する必要があります。 必要に応じて、サーバーの起動時に plugin_dir
の値を設定してプラグインディレクトリの場所を構成します。
プラグインライブラリファイルのベース名は mysql_no_login
です。 ファイル名の接尾辞は、プラットフォームごとに異なります (たとえば、.so
for Unix and Unix-like systems, .dll
for Windows)。
サーバーの起動時にプラグインをロードするには、--plugin-load-add
オプションを使用して、プラグインを含むライブラリファイルに名前を付けます。 このプラグインのロード方式では、サーバーを起動するたびにオプションを指定する必要があります。 たとえば、サーバー my.cnf
ファイルに次の行を入力し、必要に応じてプラットフォームの .so
接尾辞を調整します:
[mysqld]
plugin-load-add=mysql_no_login.so
my.cnf
を変更したら、新しい設定を有効にするためにサーバーを再起動します。
または、実行時にプラグインをロードするには、次のステートメントを使用して、必要に応じてプラットフォームの .so
接尾辞を調整します:
INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';
INSTALL PLUGIN
はプラグインをただちにロードし、mysql.plugins
システムテーブルにも登録して、--plugin-load-add
を必要とせずに後続の通常の起動のたびにサーバーがプラグインをロードするようにします。
プラグインのインストールを確認するには、INFORMATION_SCHEMA.PLUGINS
テーブルを調べるか、SHOW PLUGINS
ステートメントを使用します (セクション5.6.2「サーバープラグイン情報の取得」 を参照)。 例:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%login%';
+----------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------+---------------+
| mysql_no_login | ACTIVE |
+----------------+---------------+
プラグインの初期化に失敗した場合は、サーバーエラーログで診断メッセージを確認してください。
MySQL アカウントを非ログインプラグインに関連付けるには、ログインなしのプラガブル認証の使用 を参照してください。
ログインなしの認証プラグインのアンインストールに使用される方法は、インストール方法によって異なります:
--plugin-load-add
オプションを使用してサーバーの起動時にプラグインをインストールした場合は、オプションなしでサーバーを再起動します。-
INSTALL PLUGIN
ステートメントを使用して実行時にプラグインをインストールした場合、サーバーの再起動後もインストールされたままになります。 アンインストールするには、UNINSTALL PLUGIN
を使用します:UNINSTALL PLUGIN mysql_no_login;
このセクションでは、ログインなしの認証プラグインを使用して、MySQL クライアントプログラムからサーバーへの接続にアカウントが使用されないようにする方法について説明します。 ログインなしのプラガブル認証のインストール で説明されているように、ログインなしプラグインを有効にしてサーバーが実行されていることを前提としています。
CREATE USER
ステートメントの IDENTIFIED WITH
句でログインなしの認証プラグインを参照するには、mysql_no_login
という名前を使用します。
mysql_no_login
を使用して認証するアカウントは、ストアドプログラムおよびビューオブジェクトの DEFINER
として使用できます。 このようなオブジェクト定義に SQL SECURITY DEFINER
も含まれている場合は、そのアカウント権限で実行されます。 DBA は、この動作を使用して、適切に制御されたインタフェースを介してのみ公開される機密データまたは機密データにアクセスできます。
次の例は、これらの原則を示しています。 クライアント接続を許可しないアカウントを定義し、mysql.user
システムテーブルの特定のカラムのみを公開するビューに関連付けます:
CREATE DATABASE nologindb;
CREATE USER 'nologin'@'localhost'
IDENTIFIED WITH mysql_no_login;
GRANT ALL ON nologindb.*
TO 'nologin'@'localhost';
GRANT SELECT ON mysql.user
TO 'nologin'@'localhost';
CREATE DEFINER = 'nologin'@'localhost'
SQL SECURITY DEFINER
VIEW nologindb.myview
AS SELECT User, Host FROM mysql.user;
ビューへの保護されたアクセスを通常のユーザーに提供するには、次の手順を実行します:
GRANT SELECT ON nologindb.myview
TO 'ordinaryuser'@'localhost';
これで、通常のユーザーはビューを使用して、表示される制限された情報にアクセスできます:
SELECT * FROM nologindb.myview;
ユーザーがビューによって公開されているカラム以外のカラムにアクセスしようとすると、アクセス権を付与されていないユーザーがビューから選択しようとするため、エラーが発生します。
nologin
アカウントは直接使用できないため、使用するオブジェクトの設定に必要な操作は、root
またはオブジェクトの作成および DEFINER
値の設定に必要な権限を持つ同様のアカウントによって実行される必要があります。
mysql_no_login
プラグインは、プロキシシナリオでも役立ちます。 (プロキシに関連する概念については、セクション6.2.18「プロキシユーザー」 を参照してください。) mysql_no_login
を使用して認証するアカウントは、プロキシアカウントのプロキシユーザーとして使用できます:
-- create proxied account
CREATE USER 'proxied_user'@'localhost'
IDENTIFIED WITH mysql_no_login;
-- grant privileges to proxied account
GRANT ...
ON ...
TO 'proxied_user'@'localhost';
-- permit proxy_user to be a proxy account for proxied account
GRANT PROXY
ON 'proxied_user'@'localhost'
TO 'proxy_user'@'localhost';
これにより、クライアントはプロキシアカウント (proxy_user
) を介して MySQL にアクセスできますが、プロキシユーザー (proxied_user
) として直接接続してプロキシメカニズムをバイパスすることはできません。 proxy_user
アカウントを使用して接続するクライアントには proxied_user
アカウントの権限がありますが、proxied_user
自体を使用して接続することはできません。
プロキシ設定されたアカウントを直接使用しないように保護する別の方法については、プロキシアカウントへの直接ログインの防止 を参照してください。