MySQL 8.0 リファレンスマニュアル


6.4.1.9 ソケットピア資格証明プラガブル認証

サーバー側 auth_socket 認証プラグインは、Unix ソケットファイルを介してローカルホストから接続するクライアントを認証します。 このプラグインは SO_PEERCRED ソケットオプションを使用して、クライアントプログラムを実行しているユーザーに関する情報を取得します。 したがって、プラグインは、Linux など、SO_PEERCRED オプションをサポートするシステムでのみ使用できます。

このプラグインのソースコードは、ロード可能な認証プラグインを記述する方法を示す比較的単純な例として調査できます。

次の表には、プラグインおよびライブラリファイルの名前を示します。 ファイルは、plugin_dir システム変数で指定されたディレクトリに配置する必要があります。

表 6.21 ソケットピア資格証明認証のプラグインおよびライブラリ名

プラグインまたはファイル プラグインまたはファイル名
サーバー側プラグイン auth_socket
クライアント側プラグイン なし (説明を参照してください)
ライブラリファイル auth_socket.so

次の各セクションでは、ソケットプラガブル認証に固有のインストールおよび使用方法について説明します:

MySQL のプラガブル認証に関する一般的な情報については、セクション6.2.17「プラガブル認証」を参照してください。

ソケットプラガブル認証のインストール

このセクションでは、ソケット認証プラグインをインストールする方法について説明します。 プラグインのインストールについての一般的な情報は、セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。

サーバーで使用できるようにするには、プラグインライブラリファイルを MySQL プラグインディレクトリ (plugin_dir システム変数で指定されたディレクトリ) に配置する必要があります。 必要に応じて、サーバーの起動時に plugin_dir の値を設定してプラグインディレクトリの場所を構成します。

サーバーの起動時にプラグインをロードするには、--plugin-load-add オプションを使用して、プラグインを含むライブラリファイルに名前を付けます。 このプラグインのロード方式では、サーバーを起動するたびにオプションを指定する必要があります。 たとえば、サーバー my.cnf ファイルに次の行を挿入します:

[mysqld]
plugin-load-add=auth_socket.so

my.cnf を変更したら、新しい設定を有効にするためにサーバーを再起動します。

または、実行時にプラグインをロードするには、次のステートメントを使用します:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.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 '%socket%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| auth_socket | ACTIVE        |
+-------------+---------------+

プラグインの初期化に失敗した場合は、サーバーエラーログで診断メッセージを確認してください。

MySQL アカウントをソケットプラグインに関連付けるには、ソケットプラガブル認証の使用 を参照してください。

ソケットプラガブル認証のアンインストール

ソケット認証プラグインのアンインストールに使用する方法は、インストール方法によって異なります:

  • --plugin-load-add オプションを使用してサーバーの起動時にプラグインをインストールした場合は、オプションなしでサーバーを再起動します。

  • INSTALL PLUGIN ステートメントを使用して実行時にプラグインをインストールした場合、サーバーの再起動後もインストールされたままになります。 アンインストールするには、UNINSTALL PLUGIN を使用します:

    UNINSTALL PLUGIN auth_socket;
ソケットプラガブル認証の使用

ソケットプラグインは、ソケットユーザー名 (オペレーティングシステムユーザー名) がクライアントプログラムによって指定された MySQL ユーザー名とサーバーと一致するかどうかをチェックします。 名前が一致しない場合、プラグインはソケットユーザー名が mysql.user システムテーブルの行の authentication_string カラムで指定された名前と一致するかどうかを確認します。 一致が見つかった場合、プラグインは接続を許可します。 authentication_string 値は、CREATE USER または ALTER USERIDENTIFIED ...AS 句を使用して指定できます。

ソケットファイルを介してローカルホストから接続するために auth_socket プラグインによって認証される valerie というオペレーティングシステムユーザーに対して、MySQL アカウントが作成されているとします:

CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;

stefanie というログイン名を持つローカルホスト上のユーザーが --user=valerie オプションを付けて mysql を呼び出して、ソケットファイル経由で接続する場合、サーバーは auth_socket を使用してクライアントを認証します。 このプラグインは、--user オプションの値 (valerie) がクライアントユーザー名 (stephanie) とは異なると判断し、接続を拒否します。 valerie という名前のユーザーが同じことを試みた場合、プラグインはユーザー名と MySQL ユーザー名が両方とも valerie であると判断し、接続を許可します。 ただし、TCP/IP などの別のプロトコルを使用して接続されると、valerie の場合でもプラグインは接続を拒否します。

valeriestephanie の両方のオペレーティングシステムユーザーが、アカウントを使用するソケットファイル接続を介して MySQL にアクセスできるようにするには、次の 2 つの方法があります:

  • アカウント作成時に両方のユーザーに名前を付けます。一方は CREATE USER に従い、もう一方は認証文字列になります:

    CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
  • すでに CREATE USER を使用して単一ユーザーのアカウントを作成している場合は、ALTER USER を使用して 2 番目のユーザーを追加します:

    CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
    ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';

アカウントにアクセスするには、valeriestephanie の両方で、接続時に --user=valerie を指定します。


関連キーワード:  認証, インストール, サーバー, 接続, アカウント, ユーザー, プラガブル, auth, valerie, パスワード