Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


6.3.8.6 Windows ネイティブ認証プラグイン

注記

Windows 認証プラグインは、商用の拡張機能です。商用の製品 (MySQL Enterprise Edition) についてさらに学習するには、http://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 でサポートされています (http://www.mysql.com/support/supportedplatforms/database.htmlを参照してください)。これには、MySQL Server 5.6.10 以降が必要です。

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

6.3.8.6.1 Windows 認証プラグインのインストール

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「サーバープラグイン情報の取得」を参照してください。

6.3.8.6.2 Windows 認証プラグインの使用

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

CREATE USER または GRANT ステートメントの 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=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_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.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_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 BY 'wlad_pass';
    CREATE USER local_dev IDENTIFIED BY 'dev_pass';
    CREATE USER local_admin IDENTIFIED BY  'admin_pass';

    これらのアカウント用のパスワードをだれにも通知できない場合、ほかのユーザーはこれらのパスワードを使用して、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;

この時点で、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「サーバーシステム変数」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.