Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


このページは機械翻訳したものです。

6.4.1.8 ログインなしのプラガブル認証

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 自体を使用して接続することはできません。

プロキシ設定されたアカウントを直接使用しないように保護する別の方法については、プロキシアカウントへの直接ログインの防止 を参照してください。