このセクションの最初の部分では、セクション6.3.7「プラガブル認証」で説明しているプラガブルな認証フレームワークの適用基準に関する一般的な制約について説明します。2 番目の部分では、サードパーティーコネクタ開発者が、コネクタがプラガブルな認証機能を利用できる範囲と、対応性を高めるために行うステップについて判断する方法について説明します。
ここで使用する「ネイティブ認証」という語は、mysql.user
テーブルの Password
カラムに格納されたパスワードに対する認証を指します。これは、プラガブルな認証が実装される前に古い MySQL Server で提供されていたものと同じ認証方法です。これが引き続きデフォルトの方法ですが、現在はプラグインを使用して実装されます。「Windows ネイティブ認証」とは、Windows ネイティブ認証プラグイン (「Windows プラグイン」と略します) で実装された、すでに Windows にログインしているユーザーの資格証明を使用した認証を示します。
一般的なプラガブルな認証の制約
-
Connector/C、Connector/C++: これらのコネクタを使用するクライアントは、ネイティブ認証を使用するアカウントを通じてのみ、サーバーに接続できます。
例外: コネクタは、
libmysqlclient
に (静的ではなく) 動的にリンクするように構築された場合にプラガブルな認証をサポートし、最新バージョンのlibmysqlclient
がインストールされている場合、またはコネクタが最新のlibmysqlclient
に対してリンクするようにソースから再コンパイルされている場合にそのバージョンをロードします。 Connector/J: このコネクタを使用するクライアントは、ネイティブ認証を使用するアカウントを通じてのみサーバーに接続できます。
Connector/Net: Connector/Net 6.4.4 より前では、このコネクタを使用するクライアントは、ネイティブ認証を使用するアカウントを通じてのみサーバーに接続できます。6.4.4 以降では、クライアントは、Windows プラグインを使用するアカウントを通じてサーバーに接続することもできます。
Connector/ODBC: Connector/ODBC 3.51.29 および 5.1.9 より前では、このコネクタを使用するクライアントは、ネイティブ認証を使用するアカウントを通じてのみサーバーに接続できます。3.51.29 および 5.1.9 以降では、Windows 用のこのコネクタのバイナリリリースを使用するクライアントは、PAM または Windows プラグインを使用するアカウントを通じてサーバーに接続することもできます。(これらの機能は、以前に使用されていた MySQL 5.1
libmysqlclient
ではなく MySQL 5.5.16libmysqlclient
に対して Connector/ODBC バイナリをリンクした結果得られます。新しいlibmysqlclient
には、サーバー側の PAM および Windows 認証プラグインに必要なクライアント側のサポートが含まれます。)Connector/PHP: このコネクタを使用するクライアントは、PHP 用の MySQL ネイティブドライバ (
mysqlnd
) を使用してコンパイルされている場合、ネイティブ認証を使用するアカウントを通じてのみサーバーに接続できます。MySQL Proxy: MySQL Proxy 0.8.2 より前では、クライアントは、ネイティブ認証を使用するアカウントを通じてのみサーバーに接続できます。0.8.2 以降では、クライアントは、PAM プラグインを使用するアカウントを通じてサーバーに接続することもできます。0.8.3 以降では、クライアントは、Windows プラグインを使用するアカウントを通じてサーバーに接続することもできます。
MySQL Enterprise Backup: バージョン 3.6.1 より前の MySQL Enterprise Backup は、ネイティブ認証を使用するアカウントを通じてのみサーバーへの接続をサポートします。3.6.1 以降では、MySQL Enterprise Backup は、ネイティブ以外の認証を使用するアカウントを通じてサーバーに接続できます。
Windows ネイティブ認証: Windows プラグインを使用するアカウントを通じた接続は、Windows Domain セットアップを必要とします。これがない場合、NTLM 認証が使用され、ローカル接続だけが可能になります。つまり、クライアントとサーバーを同じコンピュータ上で実行する必要があります。
プロキシユーザー: プロキシユーザーサポートは、プロキシユーザー機能を実装するプラグイン (つまり、接続しているユーザーの名前と異なるユーザー名を返す場合があるプラグイン) で認証されたアカウントを通じて、クライアントが接続できる範囲まで利用できます。たとえば、ネイティブ認証プラグインは、プロキシユーザーをサポートしませんが、PAM および Windows プラグインはサポートします。
レプリケーション: MySQL 5.6.4 より前では、レプリケーションスレーブは、ネイティブ認証を使用するマスターアカウントを通じてのみマスターサーバーに接続できます。5.6.4 以降では、レプリケーションスレーブは、必要なクライアント側のプラグインが利用できる場合、ネイティブ以外の認証を使用するマスターアカウントを通じて接続することもできます。プラグインは、
libmysqlclient
に組み込まれている場合、デフォルトで利用できます。それ以外の場合、プラグインは、スレーブplugin_dir
システム変数によって指名された、スレーブ側のディレクトリにインストールする必要があります。FEDERATED
テーブル:FEDERATED
テーブルは、ネイティブ認証を使用するリモートサーバー上のアカウントを通じてのみリモートテーブルにアクセスできます。
プラガブルな認証とサードパーティーコネクタ
サードパーティーコネクタ開発者は、次のガイドラインを使用して、プラガブルな認証機能を利用するためのコネクタの準備と、対応性を高めるために行うステップについて判断できます。
-
変更が行われていない既存のコネクタは、ネイティブ認証を使用し、このコネクタを使用するクライアントは、ネイティブ認証を使用するアカウントを通じてのみサーバーに接続できます。ただし、最新バージョンのサーバーに対してコネクタをテストして、このような接続が引き続き問題なく機能することを検証する必要があります。
例外: コネクタは、(静的ではなく) 動的に
libmysqlclient
にリンクしている場合に、変更せずにプラガブルな認証を処理でき、最新バージョンのlibmysqlclient
がインストールされている場合に、このバージョンをロードします。 -
プラガブルな認証機能を利用するには、
libmysqlclient
ベースのコネクタを、最新バージョンのlibmysqlclient
に対して再リンクする必要があります。これにより、コネクタは、現在libmysqlclient
に組み込まれているクライアント側のプラグイン (PAM 認証に必要な平文プラグインや Windows ネイティブ認証に必要な Windows プラグインなど) を必要とするアカウントを通じた接続をサポートできるようになります。現在のlibmysqlclient
とのリンクによっても、コネクタは、デフォルトの MySQL プラグインディレクトリ (通常、ローカルサーバーのplugin_dir
システム変数のデフォルト値で指名されたディレクトリ) にインストールされたクライアント側にアクセスできるようになります。コネクタが動的に
libmysqlclient
にリンクする場合、より新しいバージョンのlibmysqlclient
がクライアントホストにインストールされていることと、コネクタが実行時にそれをロードすることを確認する必要があります。 コネクタが特定の認証方式をサポートするには、直接クライアント/サーバープロトコルにその方式を実装します。Connector/Net はこのアプローチを使用して、Windows ネイティブ認証のサポートを提供します。
コネクタが、デフォルトのプラグインディレクトリとは異なるディレクトリから、クライアント側のプラグインをロードできる必要がある場合、クライアントユーザーがそのディレクトリを指定するための手段を実装する必要があります。この候補としては、コネクタがディレクトリ名を取得できるコマンド行オプションまたは環境変数などがあります。mysql や mysqladmin などの標準 MySQL クライアントプログラムは、
--plugin-dir
オプションを実装します。セクション23.7.14「C API クライアントプラグイン関数」も参照してください。コネクタでのプロキシユーザーのサポートは、このセクションで前述したように、コネクタがサポートする認証方式がプロキシユーザーを許可するかどうかによって異なります。