Windows 認証プラグインは、商用の拡張機能です。商用の製品 (MySQL Enterprise Edition) についてさらに学習するには、https://www.mysql.com/products/ を参照してください。
MySQL 5.6.10 の時点で、Windows 向けの MySQL の商用配布には、Windows 上で外部認証を実行する認証プラグインが含まれています。これを使用すると、MySQL サーバーがネイティブの Windows サービスを使用して、クライアント接続を認証できます。Windows にログインしたユーザーは、追加のパスワードを指定せずに、自分の環境内の情報に基づいて MySQL クライアントプログラムからサーバーに接続できます。
クライアントとサーバーは、認証ハンドシェイクでデータパケットを交換します。この交換の結果として、サーバーは Windows OS 内のクライアントのアイデンティティーを表すセキュリティーコンテキストオブジェクトを作成します。このアイデンティティーには、クライアントアカウントの名前が含まれています。Windows 認証プラグインはクライアントのアイデンティティーを使用して、特定のアカウントまたはグループのメンバーであるのかどうかをチェックします。デフォルトでは、認証のネゴシエーションに Kerberos が使用されます。Kerberos が使用できない場合は、NTLM が使用されます。
Windows 認証プラグインには、次のような機能が備わっています。
外部認証: このプラグインを使用すると、MySQL サーバーは、MySQL 付与テーブルの外部で定義されたユーザーからの接続を受け入れることができます。
プロキシユーザーのサポート: このプラグインは、クライアントユーザーとは異なるユーザー名を MySQL に返すことができます。つまり、このプラグインは、外部の Windows で認証されたユーザーが持つべき権限を定義する MySQL ユーザーを返すことができます。たとえば、
joe
という名前の Windows ユーザーは接続して、developer
という名前の MySQL ユーザーの権限を持つことができます。
次の表には、プラグインおよびライブラリファイルの名前を示します。ファイルの場所は、plugin_dir
システム変数で指定されたディレクトリである必要があります。インストールに関する情報については、セクション6.3.8.6.1「Windows 認証プラグインのインストール」を参照してください。
表 6.12 MySQL Windows 認証プラグイン
サーバー側のプラグイン名 | authentication_windows |
クライアント側のプラグイン名 | authentication_windows_client |
ライブラリオブジェクトファイル名 | authentication_windows.dll |
ライブラリファイルには、サーバー側のプラグインのみが含まれています。クライアント側のプラグインは、libmysqlclient
クライアントライブラリに組み込まれています。
サーバー側の Windows 認証プラグインは、商用配布にのみ含まれています。MySQL コミュニティー配布には含まれていません。クライアント側のプラグインは、コミュニティー配布を含むすべての配布に含まれています。これにより、任意の配布から、サーバー側のプラグインがロードされたサーバーに接続することがクライアントに許可されます。
Windows 認証プラグインは、MySQL 5.6 でサポートされている任意のバージョンの Windows でサポートされています (https://www.mysql.com/support/supportedplatforms/database.htmlを参照してください)。これには、MySQL Server 5.6.10 以降が必要です。
MySQL のプラガブル認証に関する一般的な情報については、セクション6.3.7「プラガブル認証」を参照してください。プロキシユーザーについては、セクション6.3.9「プロキシユーザー」を参照してください。
Windows 認証プラグインは、MySQL
プラグインディレクトリ
(plugin_dir
システム変数で指定されたディレクトリ)
にインストールする必要があります。必要に応じて、サーバーの起動時に、プラグインディレクトリの場所をサーバーに指示する
plugin_dir
の値を設定します。
プラグインを有効にするには、--plugin-load
オプションを付けてサーバーを起動します。たとえば、my.ini
ファイルに次の行を挿入します。
[mysqld]
plugin-load=authentication_windows.dll
このプラグインを使用して認証される MySQL
アカウントには、CREATE
USER
または GRANT
ステートメントの IDENTIFIED WITH
句のプラグイン名
authentication_windows
を使用します。
プラグインのインストールを確認するには、INFORMATION_SCHEMA.PLUGINS
テーブルを調査するか、または
SHOW PLUGINS
ステートメントを使用します。セクション5.1.8.2「サーバープラグイン情報の取得」を参照してください。
Windows 認証プラグインでは、Windows
にログインしたユーザーが追加のパスワードを指定しなくても、MySQL
サーバーに接続できるように、MySQL
アカウントの使用がサポートされています。サーバー側のプラグインが有効になっていて、クライアントプログラムが
libmysqlclient
に組み込まれたクライアント側のプラグインを追加するために十分新しいバージョンであることが前提となっています。DBA
がサーバー側のプラグインを有効にして、それを使用するようにアカウントを設定すると、クライアントは自分の側でその他の設定を行う必要なしで、これらのアカウントを使用して接続できます。
CREATE USER
または
GRANT
ステートメントの
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=sql_user_name win_user_or_group_name
後者の構文に
sql_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
およびsql_user_name
の値には、等号、カンマ、または空白文字を除く、任意の文字を含めることができます。win_user_or_group_name
またはsql_user_name
の値を二重引用符で囲むと、引用符間のすべての文字が値の一部となります。たとえば、名前に空白文字が含まれている場合は、これが必要です。二重引用符およびバックスラッシュを除く、二重引用符内のすべての文字が有効です。どちらかの文字を含めるには、バックスラッシュを使用してエスケープします。-
win_user_or_group_name
値では、Windows 主体 (ローカルまたはドメイン内) 用の従来の構文が使用されます。例 (バックスラッシュを二重にすることに注意してください):domain\\user .\\user domain\\group .\\group BUILTIN\\WellKnownGroup
クライアントを認証するためにサーバーから呼び出されると、プラグインは認証文字列を左から右へとスキャンして、Windows
ユーザーとのユーザーまたはグループの一致があるかどうかを確認します。一致がある場合、このプラグインは対応する
sql_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.3.9「プロキシユーザー」を参照してください)。次のように、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 BY 'wlad_pass'; CREATE USER local_dev IDENTIFIED BY 'dev_pass'; CREATE USER local_admin IDENTIFIED BY 'admin_pass';
これらのアカウント用のパスワードをだれにも通知できない場合、ほかのユーザーはこれらのパスワードを使用して、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;
この時点で、local_user
および
MyDomain\domain_user
という Windows
ユーザーは、win_proxy
として MySQL
サーバーに接続でき、認証されると、認証文字列
(この場合は local_wlad
)
に指定されたアカウントの権限を持ちます。win_proxy
として接続する MyDomain\Developers
グループ内のユーザーは、local_dev
アカウントの権限を持っています。BUILTIN\Administrators
グループ内のユーザーは、local_admin
アカウントの権限を持っています。
自分の MySQL
アカウントを持っていないのすべての Windows
ユーザーがプロキシアカウントを通過するように認証を構成するには、前述の手順で、win_proxy
をデフォルトのプロキシユーザー
(''@''
)
に置き換えてください。デフォルトのプロキシユーザーについては、セクション6.3.9「プロキシユーザー」を参照してください。
Connection/Net 6.4.4 以上で、Connector/Net 接続文字列とともに Windows 認証プラグインを使用する方法については、Using the Windows Native Authentication Pluginを参照してください。
authentication_windows_use_principal_name
および
authentication_windows_log_level
システム変数では、Windows
認証プラグインへの追加の制御が提供されています。セクション5.1.4「サーバーシステム変数」を参照してください。