Windows プラガブル認証は、商用製品である MySQL Enterprise Edition に含まれている拡張機能です。 商用製品の詳細は、https://www.mysql.com/products/ を参照してください。
MySQL Enterprise Edition for Windows は、Windows で外部認証を実行する認証方式をサポートしているため、MySQL Server はネイティブ Windows サービスを使用してクライアント接続を認証できます。 Windows にログインしたユーザーは、追加のパスワードを指定せずに、自分の環境内の情報に基づいて MySQL クライアントプログラムからサーバーに接続できます。
クライアントとサーバーは、認証ハンドシェイクでデータパケットを交換します。 この交換の結果として、サーバーは Windows OS 内のクライアントのアイデンティティーを表すセキュリティーコンテキストオブジェクトを作成します。 このアイデンティティーには、クライアントアカウントの名前が含まれています。 Windows プラガブル認証では、クライアントの ID を使用して、クライアントが特定のアカウントであるかグループのメンバーであるかを確認します。 デフォルトでは、認証のネゴシエーションに Kerberos が使用されます。Kerberos が使用できない場合は、NTLM が使用されます。
Windows プラガブル認証には、次の機能があります:
外部認証: Windows 認証を使用すると、MySQL Server は、Windows にログインした MySQL 付与テーブルの外部で定義されたユーザーからの接続を受け入れることができます。
プロキシユーザーのサポート: Windows 認証は、クライアントプログラムによって渡された外部ユーザー名とは異なるユーザー名を MySQL に返すことができます。 つまり、このプラグインは、外部の Windows で認証されたユーザーが持つべき権限を定義する MySQL ユーザーを返すことができます。 たとえば、
joe
という名前の Windows ユーザーは、developer
という名前の MySQL ユーザーに接続して権限を持つことができます。
次の表には、プラグインおよびライブラリファイルの名前を示します。 ファイルは、plugin_dir
システム変数で指定されたディレクトリに配置する必要があります。
表 6.17 Windows 認証用のプラグインとライブラリの名前
プラグインまたはファイル | プラグインまたはファイル名 |
---|---|
サーバー側プラグイン | authentication_windows |
クライアント側プラグイン | authentication_windows_client |
ライブラリファイル | authentication_windows.dll |
ライブラリファイルには、サーバー側のプラグインのみが含まれています。 クライアント側のプラグインは、libmysqlclient
クライアントライブラリに組み込まれています。
サーバー側 Windows 認証プラグインは、MySQL Enterprise Edition にのみ含まれています。 MySQL コミュニティー配布には含まれていません。 クライアント側のプラグインは、コミュニティー配布を含むすべての配布に含まれています。 これにより、任意の配布から、サーバー側のプラグインがロードされたサーバーに接続することがクライアントに許可されます。
Windows 認証プラグインは、MySQL 8.0 でサポートされている任意のバージョンの Windows でサポートされています (https://www.mysql.com/support/supportedplatforms/database.htmlを参照してください)。
次の各セクションでは、Windows プラガブル認証に固有のインストールおよび使用方法について説明します:
MySQL のプラガブル認証に関する一般的な情報については、セクション6.2.17「プラガブル認証」を参照してください。 プロキシユーザーについては、セクション6.2.18「プロキシユーザー」を参照してください。
このセクションでは、Windows 認証プラグインをインストールする方法について説明します。 プラグインのインストールについての一般的な情報は、セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。
サーバーで使用できるようにするには、プラグインライブラリファイルを MySQL プラグインディレクトリ (plugin_dir
システム変数で指定されたディレクトリ) に配置する必要があります。 必要に応じて、サーバーの起動時に plugin_dir
の値を設定してプラグインディレクトリの場所を構成します。
サーバーの起動時にプラグインをロードするには、--plugin-load-add
オプションを使用して、プラグインを含むライブラリファイルに名前を付けます。 このプラグインのロード方式では、サーバーを起動するたびにオプションを指定する必要があります。 たとえば、サーバー my.cnf
ファイルに次の行を挿入します:
[mysqld]
plugin-load-add=authentication_windows.dll
my.cnf
を変更したら、新しい設定を有効にするためにサーバーを再起動します。
または、実行時にプラグインをロードするには、次のステートメントを使用します:
INSTALL PLUGIN authentication_windows SONAME 'authentication_windows.dll';
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 '%windows%';
+------------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+------------------------+---------------+
| authentication_windows | ACTIVE |
+------------------------+---------------+
プラグインの初期化に失敗した場合は、サーバーエラーログで診断メッセージを確認してください。
MySQL アカウントを Windows 認証プラグインに関連付けるには、Windows プラガブル認証の使用 を参照してください。 追加のプラグイン制御は、authentication_windows_use_principal_name
および authentication_windows_log_level
システム変数によって提供されます。 セクション5.1.8「サーバーシステム変数」を参照してください。
Windows 認証プラグインのアンインストールに使用する方法は、インストール方法によって異なります:
--plugin-load-add
オプションを使用してサーバーの起動時にプラグインをインストールした場合は、オプションなしでサーバーを再起動します。-
INSTALL PLUGIN
ステートメントを使用して実行時にプラグインをインストールした場合、サーバーの再起動後もインストールされたままになります。 アンインストールするには、UNINSTALL PLUGIN
を使用します:UNINSTALL PLUGIN authentication_windows;
また、Windows プラグイン関連のシステム変数を設定する起動オプションも削除します。
Windows 認証プラグインでは、Windows にログインしたユーザーが追加のパスワードを指定しなくても、MySQL サーバーに接続できるように、MySQL アカウントの使用がサポートされています。 Windows プラガブル認証のインストール で説明されているように、サーバーがサーバー側プラグインを有効にして実行されていることを前提としています。 DBA がサーバー側のプラグインを有効にして、それを使用するようにアカウントを設定すると、クライアントは自分の側でその他の設定を行う必要なしで、これらのアカウントを使用して接続できます。
CREATE USER
ステートメントの IDENTIFIED WITH
句で Windows 認証プラグインを参照するには、authentication_windows
という名前を使用します。 Rafal
と Tasha
という Windows ユーザー、および Administrators
または Power Users
グループ内の任意のユーザーが MySQL への接続が許可されるべきであると仮定します。 このように設定するには、Windows プラグインを使用して認証する sql_admin
という名前の MySQL アカウントを作成します。
CREATE USER sql_admin
IDENTIFIED WITH authentication_windows
AS 'Rafal, Tasha, Administrators, "Power Users"';
プラグイン名は authentication_windows
です。 AS
キーワードに続く文字列は、認証文字列です。 Rafal
または Tasha
という名前の Windows ユーザー、および Administrators
または Power Users
グループ内の任意の Windows ユーザーが MySQL ユーザー sql_admin
として、サーバーへの認証が許可されるように指定されます。 後者のグループ名には空白文字が含まれているため、二重引用符で囲む必要があります。
sql_admin
アカウントを作成したあとは、Windows にログインしたユーザーはそのアカウントを使用して、サーバーへの接続を試みることができます。
C:\> mysql --user=sql_admin
ここでは、パスワードは必要ありません。 authentication_windows
プラグインは Windows のセキュリティー API を使用して、接続中の Windows ユーザーをチェックします。 そのユーザーの名前が Rafal
または Tasha
であるか、Administrators
または Power Users
グループのメンバーである場合、サーバーはアクセス権を付与し、クライアントは sql_admin
として認証され、sql_admin
アカウントに付与されている権限を持ちます。 それ以外の場合、サーバーはアクセスを拒否します。
Windows 認証プラグインでの認証文字列の構文は、次のようなルールに従っています。
文字列は、カンマで区切られた 1 つ以上のユーザーマッピングで構成されます。
-
各ユーザーマッピングによって、Windows ユーザー名またはグループ名が MySQL ユーザー名に関連付けられます。
win_user_or_group_name=mysql_user_name win_user_or_group_name
後者の構文では、
mysql_user_name
値が指定されていない場合、暗黙的な値はCREATE USER
ステートメントによって作成された MySQL ユーザーです。 したがって、次のステートメントは同等です。CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators, "Power Users"'; CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal=sql_admin, Tasha=sql_admin, Administrators=sql_admin, "Power Users"=sql_admin';
バックスラッシュは MySQL 文字列のエスケープ文字であるため、値の各バックスラッシュ文字 (
\
) は二重にする必要があります。二重引用符で囲まれていない先頭および末尾の空白文字は、無視されます。
引用符で囲まれていない
win_user_or_group_name
およびmysql_user_name
の値には、等号、カンマまたは空白以外の任意の値を含めることができます。win_user_or_group_name
またはmysql_user_name
(あるいはその両方) の値が二重引用符で囲まれている場合、引用符の間のすべてが値の一部になります。 たとえば、名前に空白文字が含まれている場合は、これが必要です。 二重引用符およびバックスラッシュを除く、二重引用符内のすべての文字が有効です。 どちらかの文字を含めるには、バックスラッシュを使用してエスケープします。-
win_user_or_group_name
値では、Windows 主体 (ローカルまたはドメイン内) 用の従来の構文が使用されます。 例 (バックスラッシュを二重にすることに注意してください):domain\\user .\\user domain\\group .\\group BUILTIN\\WellKnownGroup
クライアントを認証するためにサーバーから呼び出されると、プラグインは認証文字列を左から右へとスキャンして、Windows ユーザーとのユーザーまたはグループの一致があるかどうかを確認します。 一致する場合、プラグインは対応する mysql_user_name
を MySQL サーバーに返します。 一致がない場合は、認証に失敗します。
ユーザー名の一致は、グループ名の一致よりも優先されます。 win_user
という名前の Windows ユーザーが win_group
のメンバーであり、認証文字列が次のとおりであると仮定します。
'win_group = sql_user1, win_user = sql_user2'
win_user
が MySQL サーバーに接続すると、win_group
と win_user
の両方への一致があります。 グループが認証文字列の最初に一覧表示されますが、より具体的なユーザーの一致がグループの一致よりも優先されるため、プラグインは sql_user2
としてユーザーを認証します。
サーバーが実行されているものと同じコンピュータからの接続では、Windows 認証は常に機能します。 コンピュータ間の接続では、両方のコンピュータを Windows Active Directory に登録する必要があります。 同じ Windows ドメイン内にある場合は、ドメイン名を指定する必要はありません。 次の例に示すように、別のドメインからの接続を許可することもできます。
CREATE USER sql_accounting
IDENTIFIED WITH authentication_windows
AS 'SomeDomain\\Accounting';
ここで、SomeDomain
は別のドメインの名前です。 バックスラッシュ文字は文字列内の MySQL エスケープ文字であるため、二重に入力されています。
MySQL では、クライアントは 1 つのアカウントを使用して MySQL サーバーに接続して認証できるが、接続されると別のアカウントの権限を持つというプロキシユーザーの概念がサポートされています (セクション6.2.18「プロキシユーザー」を参照してください)。 次のように、Windows ユーザーは単一のユーザー名を使用して接続するが、Windows ユーザー名およびグループ名に基づいて特定の MySQL アカウント上にマップされると仮定します。
local_user
およびMyDomain\domain_user
というローカルおよびドメインの Windows ユーザーは、local_wlad
MySQL アカウントにマップするべきです。MyDomain\Developers
ドメイングループ内のユーザーは、local_dev
MySQL アカウントにマップするべきです。ローカルマシンの管理者は、
local_admin
MySQL アカウントにマップするべきです。
このように設定するには、接続先の Windows ユーザーのプロキシアカウントを作成し、ユーザーとグループが適切な MySQL アカウント (local_wlad
、local_dev
、local_admin
) にマップされるように、このアカウントを構成します。 さらに、実行する必要がある操作に適した権限を MySQL アカウントに付与します。 次の手順では、プロキシアカウントとして win_proxy
が使用され、プロキシ対象アカウントとして local_wlad
、local_dev
、および local_admin
が使用されています。
-
プロキシ MySQL アカウントを作成します。
CREATE USER win_proxy IDENTIFIED WITH authentication_windows AS 'local_user = local_wlad, MyDomain\\domain_user = local_wlad, MyDomain\\Developers = local_dev, BUILTIN\\Administrators = local_admin';
-
プロキシ処理が動作するには、プロキシ対象アカウントが存在する必要があるため、次のように作成します。
CREATE USER local_wlad IDENTIFIED WITH mysql_no_login; CREATE USER local_dev IDENTIFIED WITH mysql_no_login; CREATE USER local_admin IDENTIFIED WITH mysql_no_login;
プロキシ設定されたアカウントは、
mysql_no_login
認証プラグインを使用して、クライアントがアカウントを使用して MySQL サーバーに直接ログインできないようにします。 かわりに、Windows を使用して認証するユーザーは、win_proxy
プロキシアカウントを使用する必要があります。 (これは、プラグインがインストールされていることを前提としています。 手順については、セクション6.4.1.8「ログインなしのプラガブル認証」 を参照してください。) プロキシ設定されたアカウントを直接使用しないように保護する別の方法については、プロキシアカウントへの直接ログインの防止 を参照してください。また、各プロキシアカウントに MySQL アクセスに必要な権限を付与する
GRANT
ステートメント (表示されていません) も実行する必要があります。 -
プロキシされた各アカウントの
PROXY
権限をプロキシアカウントに付与します:GRANT PROXY ON local_wlad TO win_proxy; GRANT PROXY ON local_dev TO win_proxy; GRANT PROXY ON local_admin TO win_proxy;
これで、Windows ユーザー local_user
および MyDomain\domain_user
は win_proxy
として MySQL サーバーに接続でき、認証時に認証文字列で指定されたアカウント (この場合は local_wlad
) の権限を持つようになります。 win_proxy
として接続する MyDomain\Developers
グループ内のユーザーは、local_dev
アカウントの権限を持っています。 BUILTIN\Administrators
グループ内のユーザーは、local_admin
アカウントの権限を持っています。
独自の MySQL アカウントを持たないすべての Windows ユーザーがプロキシアカウントを経由するように認証を構成するには、前述の手順で win_proxy
のデフォルトのプロキシアカウント (''@''
) に置き換えます。 デフォルトのプロキシアカウントの詳細は、セクション6.2.18「プロキシユーザー」 を参照してください。
MySQL インストールに匿名ユーザーが含まれている場合、デフォルトのプロキシユーザーと競合する可能性があります。 この問題とその対処方法の詳細は、デフォルトのプロキシユーザーと匿名ユーザーの競合 を参照してください。
Connector/NET 6.4.4 以上の Connector/NET 接続文字列で Windows 認証プラグインを使用するには、Connector/NET Authentication を参照してください。