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


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

6.4.1.6 Windows プラガブル認証

注記

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 プラガブル認証のインストール

このセクションでは、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 プラガブル認証のアンインストール

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

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

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

    UNINSTALL PLUGIN authentication_windows;

また、Windows プラグイン関連のシステム変数を設定する起動オプションも削除します。

Windows プラガブル認証の使用

Windows 認証プラグインでは、Windows にログインしたユーザーが追加のパスワードを指定しなくても、MySQL サーバーに接続できるように、MySQL アカウントの使用がサポートされています。 Windows プラガブル認証のインストール で説明されているように、サーバーがサーバー側プラグインを有効にして実行されていることを前提としています。 DBA がサーバー側のプラグインを有効にして、それを使用するようにアカウントを設定すると、クライアントは自分の側でその他の設定を行う必要なしで、これらのアカウントを使用して接続できます。

CREATE USER ステートメントの IDENTIFIED WITH 句で Windows 認証プラグインを参照するには、authentication_windows という名前を使用します。 RafalTasha という 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_groupwin_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_wladlocal_devlocal_admin) にマップされるように、このアカウントを構成します。 さらに、実行する必要がある操作に適した権限を MySQL アカウントに付与します。 次の手順では、プロキシアカウントとして win_proxy が使用され、プロキシ対象アカウントとして local_wladlocal_dev、および local_admin が使用されています。

  1. プロキシ 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';
  2. プロキシ処理が動作するには、プロキシ対象アカウントが存在する必要があるため、次のように作成します。

    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 ステートメント (表示されていません) も実行する必要があります。

  3. プロキシされた各アカウントの 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_userwin_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 を参照してください。