サーバー側 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 USER
で IDENTIFIED ...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
の場合でもプラグインは接続を拒否します。
valerie
と stephanie
の両方のオペレーティングシステムユーザーが、アカウントを使用するソケットファイル接続を介して 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';
アカウントにアクセスするには、valerie
と stephanie
の両方で、接続時に --user=valerie
を指定します。