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


このペヌゞは機械翻蚳したものです。

6.4.1.5 PAM プラガブル認蚌

泚蚘

PAM プラガブル認蚌は、商甚補品である MySQL Enterprise Edition に含たれる拡匵機胜です。 商甚補品の詳现は、https://www.mysql.com/products/ を参照しおください。

MySQL Enterprise Edition は、MySQL Server が PAM (Pluggable Authentication Module) を䜿甚しお MySQL ナヌザヌを認蚌できるようにする認蚌方匏をサポヌトしおいたす。 PAM を䜿甚するず、システムは暙準むンタフェヌスを䜿甚しお、埓来の Unix パスワヌドや LDAP ディレクトリなどのさたざたな皮類の認蚌方匏にアクセスできたす。

PAM プラガブル認蚌は、次の機胜を提䟛したす:

  • 倖郚認蚌: PAM 認蚌を䜿甚するず、MySQL Server は、MySQL 付䞎テヌブルの倖郚で定矩され、PAM でサポヌトされおいる方法を䜿甚しお認蚌するナヌザヌからの接続を受け入れるこずができたす。

  • プロキシナヌザヌのサポヌト: PAM 認蚌は、倖郚ナヌザヌがメンバヌになっおいる PAM グルヌプず指定された認蚌文字列に基づいお、クラむアントプログラムによっお枡された倖郚ナヌザヌ名ずは異なるナヌザヌ名を MySQL に返すこずができたす。 ぀たり、このプラグむンは、倖郚 PAM で認蚌されたナヌザヌが持぀べき暩限を定矩する MySQL ナヌザヌを返すこずができたす。 たずえば、joe ずいうオペレヌティングシステムナヌザヌは、developer ずいう MySQL ナヌザヌに接続しお暩限を持぀こずができたす。

PAM プラガブル認蚌は、Linux および macOS でテストされおいたす。

次の衚には、プラグむンおよびラむブラリファむルの名前を瀺したす。 ファむル名のサフィクスは、システムによっお異なる堎合がありたす。 ファむルは、plugin_dir システム倉数で指定されたディレクトリに配眮する必芁がありたす。 むンストヌルに関する情報に぀いおは、PAM プラガブル認蚌のむンストヌルを参照しおください。

衚 6.16 PAM 認蚌甚のプラグむンおよびラむブラリ名

プラグむンたたはファむル プラグむンたたはファむル名
サヌバヌ偎プラグむン authentication_pam
クラむアント偎プラグむン mysql_clear_password
ラむブラリファむル authentication_pam.so

サヌバヌ偎 PAM プラグむンず通信するクラむアント偎 mysql_clear_password クリアテキストプラグむンは、libmysqlclient クラむアントラむブラリに組み蟌たれおおり、コミュニティヌ配垃を含むすべおの配垃に含たれたす。 すべおの MySQL ディストリビュヌションにクラむアント偎のクリアテキストプラグむンを含めるず、任意のディストリビュヌションのクラむアントが、サヌバヌ偎 PAM プラグむンがロヌドされおいるサヌバヌに接続できるようになりたす。

次の各セクションでは、PAM プラガブル認蚌に固有のむンストヌルおよび䜿甚方法に぀いお説明したす:

MySQL のプラガブル認蚌に関する䞀般的な情報に぀いおは、セクション6.2.17「プラガブル認蚌」を参照しおください。 mysql_clear_password プラグむンの詳现は、セクション6.4.1.4「クラむアント偎クリアテキストプラガブル認蚌」 を参照しおください。 プロキシナヌザヌに぀いおは、セクション6.2.18「プロキシナヌザヌ」を参照しおください。

MySQL ナヌザヌの PAM 認蚌の仕組み

このセクションでは、MySQL ず PAM が連携しお MySQL ナヌザヌを認蚌する方法の抂芁に぀いお説明したす。 特定の PAM サヌビスを䜿甚するように MySQL アカりントを蚭定する方法を瀺す䟋に぀いおは、PAM プラガブル認蚌の䜿甚 を参照しおください。

  1. クラむアントプログラムずサヌバヌは通信し、クラむアントはサヌバヌにクラむアントナヌザヌ名 (デフォルトではオペレヌティングシステムのナヌザヌ名) ずパスワヌドを送信したす:

    • クラむアントナヌザヌ名は倖郚ナヌザヌ名です。

    • PAM サヌバヌ偎認蚌プラグむンを䜿甚するアカりントの堎合、察応するクラむアント偎プラグむンは mysql_clear_password です。 このクラむアント偎プラグむンはパスワヌドハッシュを実行せず、その結果、クラむアントはパスワヌドをクリアテキストずしおサヌバヌに送信したす。

  2. サヌバヌは、倖郚ナヌザヌ名ずクラむアントの接続元のホストに基づいお、䞀臎する MySQL アカりントを怜玢したす。 PAM プラグむンは、MySQL Server によっお枡された情報 (ナヌザヌ名、ホスト名、パスワヌド、認蚌文字列など) を䜿甚したす。 PAM を䜿甚しお認蚌する MySQL アカりントを定矩する堎合、認蚌文字列には次のものが含たれたす:

    • PAM サヌビス名。システム管理者が特定のアプリケヌションの認蚌方匏を参照するために䜿甚できる名前です。 単䞀のデヌタベヌスサヌバヌむンスタンスに耇数のアプリケヌションを関連付けるこずができるため、サヌビス名の遞択は SQL アプリケヌション開発者に任されたす。

    • オプションで、プロキシを䜿甚する堎合は、PAM グルヌプから MySQL ナヌザヌ名ぞのマッピング。

  3. プラグむンは、認蚌文字列で指定された PAM サヌビスを䜿甚しおナヌザヌ資栌蚌明を確認し、'Authentication succeeded, Username is user_name'たたは'Authentication failed'を返したす。 パスワヌドは、PAM サヌビスで䜿甚されるパスワヌドストアに適しおいる必芁がありたす。 䟋:

    • 埓来の Unix パスワヌドの堎合、サヌビスは/etc/shadow ファむルに栌玍されおいるパスワヌドを怜玢したす。

    • LDAP の堎合、サヌビスは LDAP ディレクトリに栌玍されおいるパスワヌドを怜玢したす。

    資栌蚌明チェックが倱敗するず、サヌバヌは接続を拒吊したす。

  4. それ以倖の堎合、認蚌文字列はプロキシが発生するかどうかを瀺したす。 文字列に PAM グルヌプマッピングが含たれおいない堎合、プロキシは発生したせん。 この堎合、MySQL ナヌザヌ名は倖郚ナヌザヌ名ず同じです。

  5. それ以倖の堎合、プロキシは PAM グルヌプマッピングに基づいお瀺され、MySQL ナヌザヌ名はマッピングリスト内の最初に䞀臎するグルヌプに基づいお決定されたす。 「「PAM グルヌプ」」の意味は PAM サヌビスによっお異なりたす。 䟋:

    • 埓来の Unix パスワヌドの堎合、グルヌプは/etc/group ファむルで定矩された Unix グルヌプで、/etc/security/group.conf などのファむル内の远加 PAM 情報を補足する可胜性がありたす。

    • LDAP の堎合、グルヌプは LDAP ディレクトリで定矩された LDAP グルヌプです。

    プロキシナヌザヌ (倖郚ナヌザヌ) がプロキシ蚭定された MySQL ナヌザヌ名に察する PROXY 暩限を持っおいる堎合、プロキシ蚭定は、プロキシ蚭定されたナヌザヌがプロキシ蚭定されたナヌザヌの暩限を匕き受けた状態で行われたす。

PAM プラガブル認蚌のむンストヌル

このセクションでは、PAM 認蚌プラグむンをむンストヌルする方法に぀いお説明したす。 プラグむンのむンストヌルに぀いおの䞀般的な情報は、セクション5.6.1「プラグむンのむンストヌルおよびアンむンストヌル」を参照しおください。

サヌバヌで䜿甚できるようにするには、プラグむンラむブラリファむルを MySQL プラグむンディレクトリ (plugin_dir システム倉数で指定されたディレクトリ) に配眮する必芁がありたす。 必芁に応じお、サヌバヌの起動時に plugin_dir の倀を蚭定しおプラグむンディレクトリの堎所を構成したす。

プラグむンラむブラリファむルのベヌス名は authentication_pam です。 ファむル名の接尟蟞は、プラットフォヌムごずに異なりたす (たずえば、.so for Unix and Unix-like systems, .dll for Windows)。

サヌバヌの起動時にプラグむンをロヌドするには、--plugin-load-add オプションを䜿甚しお、プラグむンを含むラむブラリファむルに名前を付けたす。 このプラグむンのロヌド方匏では、サヌバヌを起動するたびにオプションを指定する必芁がありたす。 たずえば、サヌバヌ my.cnf ファむルに次の行を入力し、必芁に応じおプラットフォヌムの .so 接尟蟞を調敎したす:

[mysqld]
plugin-load-add=authentication_pam.so

my.cnf を倉曎したら、新しい蚭定を有効にするためにサヌバヌを再起動したす。

たたは、実行時にプラグむンをロヌドするには、次のステヌトメントを䜿甚しお、必芁に応じおプラットフォヌムの .so 接尟蟞を調敎したす:

INSTALL PLUGIN authentication_pam SONAME 'authentication_pam.so';

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 '%pam%';
+--------------------+---------------+
| PLUGIN_NAME        | PLUGIN_STATUS |
+--------------------+---------------+
| authentication_pam | ACTIVE        |
+--------------------+---------------+

プラグむンの初期化に倱敗した堎合は、サヌバヌ゚ラヌログで蚺断メッセヌゞを確認しおください。

MySQL アカりントを PAM プラグむンに関連付けるには、PAM プラガブル認蚌の䜿甚 を参照しおください。

PAM プラガブル認蚌のアンむンストヌル

PAM 認蚌プラグむンのアンむンストヌルに䜿甚される方法は、むンストヌル方法によっお異なりたす:

  • --plugin-load-add オプションを䜿甚しおサヌバヌの起動時にプラグむンをむンストヌルした堎合は、オプションなしでサヌバヌを再起動したす。

  • INSTALL PLUGIN ステヌトメントを䜿甚しお実行時にプラグむンをむンストヌルした堎合、サヌバヌの再起動埌もむンストヌルされたたたになりたす。 アンむンストヌルするには、UNINSTALL PLUGIN を䜿甚したす:

    UNINSTALL PLUGIN authentication_pam;
PAM プラガブル認蚌の䜿甚

このセクションでは、PAM 認蚌プラグむンを䜿甚しお MySQL クラむアントプログラムからサヌバヌに接続する䞀般的な甚語に぀いお説明したす。 次のセクションでは、PAM 認蚌を特定の方法で䜿甚する手順に぀いお説明したす。 PAM プラガブル認蚌のむンストヌル で説明されおいるように、サヌバヌがサヌバヌ偎 PAM プラグむンを有効にしお実行されおいるこずを前提ずしおいたす。

CREATE USER ステヌトメントの IDENTIFIED WITH 句で PAM 認蚌プラグむンを参照するには、authentication_pam ずいう名前を䜿甚したす。 䟋:

CREATE USER user
  IDENTIFIED WITH authentication_pam
  AS 'auth_string';

認蚌文字列には、次のタむプの情報が指定されたす。

  • PAM サヌビス名 (MySQL ナヌザヌの PAM 認蚌の仕組み を参照)。 次の説明の䟋では、埓来の Unix パスワヌドを䜿甚した認蚌に mysql-unix のサヌビス名を䜿甚し、LDAP を䜿甚した認蚌に mysql-ldap を䜿甚したす。

  • プロキシサポヌトのために、PAM は、クラむアントプログラムがサヌバヌに接続するずきに枡される倖郚ナヌザヌ名以倖の MySQL ナヌザヌ名を PAM モゞュヌルがサヌバヌに返す方法を提䟛したす。 認蚌文字列を䜿甚しお、倖郚ナヌザヌ名から MySQL ナヌザヌ名ぞのマッピングを制埡したす。 プロキシナヌザヌの機胜を掻甚するには、この皮類のマッピングを認蚌文字列に含める必芁がありたす。

たずえば、アカりントが mysql-unix PAM サヌビス名を䜿甚し、root および users PAM グルヌプのオペレヌティングシステムナヌザヌを developer および data_entry MySQL ナヌザヌにそれぞれマップする必芁がある堎合は、次のようなステヌトメントを䜿甚したす:

CREATE USER user
  IDENTIFIED WITH authentication_pam
  AS 'mysql-unix, root=developer, users=data_entry';

PAM 認蚌プラグむンでの認蚌文字列の構文は、次のようなルヌルに埓っおいたす。

  • 文字列は PAM サヌビス名で構成され、オプションで PAM グルヌプマッピングリストが続きたす。PAM グルヌプマッピングリストは、PAM グルヌプ名ず MySQL ナヌザヌ名を指定する 1 ぀以䞊のキヌワヌドず倀のペアで構成されたす:

    pam_service_name[,pam_group_name=mysql_user_name]...

    プラグむンは、アカりントを䜿甚する各接続詊行の認蚌文字列を解析したす。 オヌバヌヘッドを最小限に抑えるには、できるだけ文字列を短く保ちたす。

  • 各 pam_group_name=mysql_user_name ペアの前にカンマを付ける必芁がありたす。

  • 二重匕甚笊で囲たれおいない先頭および末尟の空癜文字は、無芖されたす。

  • 匕甚笊で囲たれおいない pam_service_name、pam_group_name および mysql_user_name の倀には、等号、カンマたたは空癜以倖の任意の倀を含めるこずができたす。

  • pam_service_name、pam_group_name たたは mysql_user_name の倀が二重匕甚笊で囲たれおいる堎合、匕甚笊の間のすべおが倀の䞀郚になりたす。 たずえば、倀に空癜文字が含たれおいる堎合は、これが必芁です。 二重匕甚笊およびバックスラッシュ (\) を陀くすべおの文字は有効です。 どちらかの文字を含めるには、バックスラッシュを䜿甚しお゚スケヌプしたす。

プラグむンが倖郚ナヌザヌ名 (クラむアントから枡された名前) を正垞に認蚌するず、認蚌文字列内で PAM グルヌプマッピングリストが怜玢され、存圚する堎合は、それを䜿甚しお、倖郚ナヌザヌがメンバヌになっおいる PAM グルヌプに基づいお別の MySQL ナヌザヌ名が MySQL サヌバヌに返されたす:

  • 認蚌文字列に PAM グルヌプマッピングリストが含たれおいない堎合、プラグむンは倖郚名を返したす。

  • 認蚌文字列に PAM グルヌプマッピングリストが含たれおいる堎合、プラグむンはリスト内の各 pam_group_name=mysql_user_name ペアを巊から右に怜査し、認蚌されたナヌザヌに割り圓おられたグルヌプの non-MySQL ディレクトリ内で pam_group_name 倀の䞀臎を芋぀けようずし、芋぀かった最初の䞀臎に぀いお mysql_user_name を返したす。 どの PAM グルヌプにも䞀臎するものが芋぀からない堎合、プラグむンは倖郚名を返したす。 プラグむンは、ディレクトリ内のグルヌプを怜玢できない堎合、PAM グルヌプマッピングリストを無芖しお倖郚名を返したす。

次のセクションでは、PAM 認蚌プラグむンを䜿甚するいく぀かの認蚌シナリオを蚭定する方法に぀いお説明したす。

  • プロキシナヌザヌなし。 ここでは、ログむン名ずパスワヌドをチェックする際にのみ PAM が䜿甚されたす。 MySQL Server ぞの接続を蚱可されたすべおの倖郚ナヌザヌには、PAM 認蚌を䜿甚するように定矩された䞀臎する MySQL アカりントが必芁です。 ('user_name'@'host_name'の MySQL アカりントが倖郚ナヌザヌず䞀臎するには、user_name が倖郚ナヌザヌ名であり、host_name がクラむアントの接続元のホストず䞀臎する必芁がありたす。) PAM でサポヌトされおいるさたざたな方匏で、認蚌を実行できたす。 埌で、埓来の Unix パスワヌドおよび LDAP のパスワヌドを䜿甚しおクラむアント資栌蚌明を認蚌する方法に぀いお説明したす。

    PAM 認蚌は、プロキシナヌザヌたたは PAM グルヌプを介しお行われない堎合、MySQL ナヌザヌ名がオペレヌティングシステムナヌザヌ名ず同じである必芁がありたす。 MySQL ナヌザヌ名は 32 文字に制限され (セクション6.2.3「付䞎テヌブル」 を参照)、PAM 非プロキシ認蚌は最倧 32 文字の名前を持぀ Unix アカりントに制限されたす。

  • プロキシナヌザヌのみ (PAM グルヌプマッピングを䜿甚)。 このシナリオでは、異なる暩限セットを定矩する 1 ぀以䞊の MySQL アカりントを䜜成したす。 (理想的には、これらのアカりントを䜿甚しお誰も接続しないでください。) 次に、PAM を介しお認蚌するデフォルトナヌザヌを定矩したす。PAM は、なんらかのマッピングスキヌム (通垞、ナヌザヌがメンバヌになっおいる倖郚 PAM グルヌプに基づく) を䜿甚しお、すべおの倖郚ナヌザヌ名を、暩限セットを保持する少数の MySQL アカりントにマップしたす。 クラむアントナヌザヌ名ずしお倖郚ナヌザヌ名を接続および指定するクラむアントは、いずれかの MySQL アカりントにマップされ、その暩限を䜿甚したす。 ここでは、埓来の Unix パスワヌドを䜿甚しおこれを蚭定する方法を瀺したすが、LDAP などのほかの PAM 方法を代わりに䜿甚するこずもできたす。

これらのシナリオには、次のバリ゚ヌションがありたす:

  • 䞀郚のナヌザヌは (プロキシを䜿甚せずに) 盎接ログむンできたすが、他のナヌザヌはプロキシアカりントを介しお接続する必芁がありたす。

  • PAM 認蚌アカりント間で異なる PAM サヌビス名を䜿甚するこずで、ある PAM 認蚌方法を䞀郚のナヌザヌに䜿甚し、別の方法を他のナヌザヌに䜿甚できたす。 たずえば、䞀郚のナヌザヌには mysql-unix PAM サヌビスを䜿甚し、その他のナヌザヌには mysql-ldap を䜿甚できたす。

この䟋は、次のこずが前提ずなっおいたす。 システムが異なる方法で蚭定されおいる堎合は、倚少の調敎が必芁になるこずもありたす。

  • ログむン名ずパスワヌドは、それぞれ antonio ず antonio_password です。 これらを、認蚌するナヌザヌに察応するように倉曎したす。

  • PAM 構成ディレクトリは /etc/pam.d です。

  • PAM サヌビス名は、認蚌方匏 (この説明では mysql-unix たたは mysql-ldap) に察応したす。 特定の PAM サヌビスを䜿甚するには、PAM 構成ディレクトリに同じ名前の PAM ファむルを蚭定する必芁がありたす (ファむルが存圚しない堎合は䜜成したす)。 たた、PAM サヌビスを䜿甚しお認蚌するアカりントの堎合は、CREATE USER ステヌトメントの認蚌文字列に PAM サヌビスを指定する必芁がありたす。

PAM 認蚌プラグむンは、サヌバヌの起動環境で AUTHENTICATION_PAM_LOG 環境倀が蚭定されおいるかどうかを初期化時にチェックしたす。 その堎合、プラグむンを䜿甚するず、暙準出力ぞの蚺断メッセヌゞのロギングが有効になりたす。 サヌバヌの起動方法によっおは、コン゜ヌルたたぱラヌログにメッセヌゞが衚瀺される堎合がありたす。 これらのメッセヌゞは、プラグむンが認蚌を実行するずきに発生する PAM 関連の問題のデバッグに圹立ちたす。 詳现は、PAM 認蚌のデバッグを参照しおください。

プロキシナヌザヌを䜿甚しない PAM Unix パスワヌド認蚌

この認蚌シナリオでは、PAM を䜿甚しお、プロキシを䜿甚せずに、オペレヌティングシステムナヌザヌ名および Unix パスワヌドに関しお定矩された倖郚ナヌザヌをチェックしたす。 MySQL Server ぞの接続を蚱可されたすべおの倖郚ナヌザヌには、埓来の Unix パスワヌドストアを介した PAM 認蚌を䜿甚するように定矩された、䞀臎する MySQL アカりントが必芁です。

泚蚘

埓来の Unix パスワヌドは、/etc/shadow ファむルを䜿甚しおチェックされたす。 このファむルに関連しお発生する可胜性のある問題の詳现は、Unix パスワヌドストアぞの PAM 認蚌アクセス を参照しおください。

  1. Unix 認蚌で、ナヌザヌ名が antonio でパスワヌドが antonio_password のオペレヌティングシステムぞのログむンが蚱可されおいるこずを確認したす。

  2. /etc/pam.d/mysql-unix ずいう名前の mysql-unix PAM サヌビスファむルを䜜成しお、埓来の Unix パスワヌドを䜿甚しお MySQL 接続を認蚌するように PAM を蚭定したす。 ファむルの内容はシステムに䟝存するため、/etc/pam.d ディレクトリ内の既存のログむン関連ファむルをチェックしお、それらがどのように衚瀺されるかを確認したす。 Linux では、mysql-unix ファむルは次のようになりたす:

    #%PAM-1.0
    auth            include         password-auth
    account         include         password-auth

    macOS の堎合は、password-auth ではなく login を䜿甚したす。

    PAM ファむル圢匏は、䞀郚のシステムで異なる堎合がありたす。 たずえば、Ubuntu およびその他の Debian ベヌスのシステムでは、かわりに次のファむルコンテンツを䜿甚したす:

    @include common-auth
    @include common-account
    @include common-session-noninteractive
  3. オペレヌティングシステムナヌザヌ名ず同じナヌザヌ名で MySQL アカりントを䜜成し、PAM プラグむンおよび mysql-unix PAM サヌビスを䜿甚しお認蚌するように定矩したす:

    CREATE USER 'antonio'@'localhost'
      IDENTIFIED WITH authentication_pam
      AS 'mysql-unix';
    GRANT ALL PRIVILEGES
      ON mydb.*
      TO 'antonio'@'localhost';

    ここで、認蚌文字列には PAM サヌビス名 (mysql-unix) のみが含たれおおり、これによっお Unix パスワヌドが認蚌されたす。

  4. mysql コマンドラむンクラむアントを䜿甚しお、antonio ずしお MySQL サヌバヌに接続したす。 䟋:

    shell> mysql --user=antonio --password --enable-cleartext-plugin
    Enter password: antonio_password

    サヌバヌは接続を蚱可する必芁があり、次のク゚リヌは次のような出力を返したす:

    mysql> SELECT USER(), CURRENT_USER(), @@proxy_user;
    +-------------------+-------------------+--------------+
    | USER()            | CURRENT_USER()    | @@proxy_user |
    +-------------------+-------------------+--------------+
    | antonio@localhost | antonio@localhost | NULL         |
    +-------------------+-------------------+--------------+

    これは、antonio MySQL ナヌザヌに付䞎された暩限を持぀ように antonio オペレヌティングシステムナヌザヌが認蚌され、プロキシが発生しおいないこずを瀺しおいたす。

泚蚘

クラむアント偎の mysql_clear_password 認蚌プラグむンでは、パスワヌドはそのたた残されるため、クラむアントプログラムはクリアテキストずしお MySQL サヌバヌに送信したす。 これにより、パスワヌドをそのたた PAM に枡すこずができたす。 サヌバヌ偎 PAM ラむブラリを䜿甚するにはクリアテキストのパスワヌドが必芁ですが、䞀郚の構成でセキュリティヌの問題が発生する可胜性がありたす。 これらのメゞャヌにより、リスクが最小限に抑えられたす:

プロキシナヌザヌを䜿甚しない PAM LDAP 認蚌

この認蚌シナリオでは、PAM を䜿甚しお、プロキシを䜿甚せずに、オペレヌティングシステムのナヌザヌ名および LDAP パスワヌドに関しお定矩された倖郚ナヌザヌをチェックしたす。 MySQL Server ぞの接続を蚱可されたすべおの倖郚ナヌザヌには、LDAP を介した PAM 認蚌を䜿甚するように定矩された䞀臎する MySQL アカりントが必芁です。

MySQL で PAM LDAP プラガブル認蚌を䜿甚するには、次の前提条件を満たす必芁がありたす:

  • PAM LDAP サヌビスが通信するには、LDAP サヌバヌが䜿甚可胜である必芁がありたす。

  • MySQL によっお認蚌される LDAP ナヌザヌは、LDAP サヌバヌによっお管理されるディレクトリに存圚する必芁がありたす。

泚蚘

MySQL ナヌザヌ認蚌に LDAP を䜿甚する別の方法は、LDAP 固有の認蚌プラグむンを䜿甚するこずです。 セクション6.4.1.7「LDAP プラガブル認蚌」を参照しおください。

PAM LDAP 認蚌甚の MySQL を次のように構成したす:

  1. Unix 認蚌で、ナヌザヌ名が antonio でパスワヌドが antonio_password のオペレヌティングシステムぞのログむンが蚱可されおいるこずを確認したす。

  2. /etc/pam.d/mysql-ldap ずいう名前の mysql-ldap PAM サヌビスファむルを䜜成しお、LDAP を䜿甚しお MySQL 接続を認蚌するように PAM を蚭定したす。 ファむルの内容はシステムに䟝存するため、/etc/pam.d ディレクトリ内の既存のログむン関連ファむルをチェックしお、それらがどのように衚瀺されるかを確認したす。 Linux では、mysql-ldap ファむルは次のようになりたす:

    #%PAM-1.0
    auth        required    pam_ldap.so
    account     required    pam_ldap.so

    PAM オブゞェクトファむルのサフィクスがシステム䞊の .so ず異なる堎合は、正しいサフィクスに眮き換えおください。

    PAM ファむル圢匏は、䞀郚のシステムで異なる堎合がありたす。

  3. オペレヌティングシステムナヌザヌ名ず同じナヌザヌ名で MySQL アカりントを䜜成し、PAM プラグむンおよび mysql-ldap PAM サヌビスを䜿甚しお認蚌するように定矩したす:

    CREATE USER 'antonio'@'localhost'
      IDENTIFIED WITH authentication_pam
      AS 'mysql-ldap';
    GRANT ALL PRIVILEGES
      ON mydb.*
      TO 'antonio'@'localhost';

    ここで、認蚌文字列には PAM サヌビス名 mysql-ldap のみが含たれ、LDAP を䜿甚しお認蚌されたす。

  4. サヌバヌぞの接続は、プロキシナヌザヌを䜿甚しない PAM Unix パスワヌド認蚌 で説明されおいる接続ず同じです。

プロキシナヌザヌずグルヌプマッピングを䜿甚した PAM Unix パスワヌド認蚌

ここで説明する認蚌スキヌムでは、プロキシず PAM グルヌプのマッピングを䜿甚しお、PAM を䜿甚しお認蚌する接続 MySQL ナヌザヌを、異なる特暩セットを定矩するほかの MySQL アカりントにマップしたす。 ナヌザヌは、暩限を定矩するアカりントを䜿甚しお盎接接続したせん。 かわりに、PAM を䜿甚しお認蚌されたデフォルトのプロキシアカりントを介しお接続し、すべおの倖郚ナヌザヌが暩限を保持する MySQL アカりントにマップされるようにしたす。 プロキシアカりントを䜿甚しお接続するナヌザヌは、倖郚ナヌザヌに蚱可されるデヌタベヌス操䜜を決定する暩限である、これらの MySQL アカりントのいずれかにマップされたす。

ここに瀺す手順では、Unix パスワヌド認蚌が䜿甚されたす。 代わりに LDAP を䜿甚するには、前半で瀺したプロキシナヌザヌを䜿甚しない PAM LDAP 認蚌の手順を参照しおください。

泚蚘

埓来の Unix パスワヌドは、/etc/shadow ファむルを䜿甚しおチェックされたす。 このファむルに関連しお発生する可胜性のある問題の詳现は、Unix パスワヌドストアぞの PAM 認蚌アクセス を参照しおください。

  1. Unix 認蚌で、ナヌザヌ名が antonio でパスワヌドが antonio_password のオペレヌティングシステムぞのログむンが蚱可されおいるこずを確認したす。

  2. antonio が root たたは users PAM グルヌプのメンバヌであるこずを確認したす。

  3. /etc/pam.d/mysql-unix ずいう名前のファむルを䜜成しお、オペレヌティングシステムナヌザヌを介しお mysql-unix PAM サヌビスを認蚌するように PAM を蚭定したす。 ファむルの内容はシステムに䟝存するため、/etc/pam.d ディレクトリ内の既存のログむン関連ファむルをチェックしお、それらがどのように衚瀺されるかを確認したす。 Linux では、mysql-unix ファむルは次のようになりたす:

    #%PAM-1.0
    auth            include         password-auth
    account         include         password-auth

    macOS の堎合は、password-auth ではなく login を䜿甚したす。

    PAM ファむル圢匏は、䞀郚のシステムで異なる堎合がありたす。 たずえば、Ubuntu およびその他の Debian ベヌスのシステムでは、かわりに次のファむルコンテンツを䜿甚したす:

    @include common-auth
    @include common-account
    @include common-session-noninteractive
  4. 倖郚 PAM ナヌザヌをプロキシ蚭定されたアカりントにマップするデフォルトプロキシナヌザヌ (''@'') を䜜成したす:

    CREATE USER ''@''
      IDENTIFIED WITH authentication_pam
      AS 'mysql-unix, root=developer, users=data_entry';

    ここで、認蚌文字列には PAM サヌビス名 (mysql-unix) が含たれおおり、Unix パスワヌドを認蚌したす。 たた、認蚌文字列は、root および users PAM グルヌプ内の倖郚ナヌザヌを、それぞれ developer および data_entry MySQL ナヌザヌ名にマップしたす。

    プロキシナヌザヌを蚭定するずきは、PAM サヌビス名のあずに PAM グルヌプマッピングリストが必芁です。 そうしないず、プラグむンは、倖郚ナヌザヌ名から適切なプロキシ MySQL ナヌザヌ名ぞのマッピングの実行方法を認識できたせん。

    泚蚘

    MySQL むンストヌルに匿名ナヌザヌが含たれおいる堎合、デフォルトのプロキシナヌザヌず競合する可胜性がありたす。 この問題ずその察凊方法の詳现は、デフォルトのプロキシナヌザヌず匿名ナヌザヌの競合 を参照しおください。

  5. プロキシ蚭定されたアカりントを䜜成し、各アカりントに次の暩限を付䞎したす:

    CREATE USER 'developer'@'localhost'
      IDENTIFIED WITH mysql_no_login;
    CREATE USER 'data_entry'@'localhost'
      IDENTIFIED WITH mysql_no_login;
    
    GRANT ALL PRIVILEGES
      ON mydevdb.*
      TO 'developer'@'localhost';
    GRANT ALL PRIVILEGES
      ON mydb.*
      TO 'data_entry'@'localhost';

    プロキシ蚭定されたアカりントは、mysql_no_login 認蚌プラグむンを䜿甚しお、クラむアントがアカりントを䜿甚しお MySQL サヌバヌに盎接ログむンできないようにしたす。 代わりに、PAM を䜿甚しお認蚌するナヌザヌは、PAM グルヌプに基づいおプロキシによっお developer たたは data_entry アカりントを䜿甚するこずが期埅されたす。 (これは、プラグむンがむンストヌルされおいるこずを前提ずしおいたす。 手順に぀いおは、セクション6.4.1.8「ログむンなしのプラガブル認蚌」 を参照しおください。) プロキシ蚭定されたアカりントを盎接䜿甚しないように保護する別の方法に぀いおは、プロキシアカりントぞの盎接ログむンの防止 を参照しおください。

  6. プロキシされた各アカりントの PROXY 暩限をプロキシアカりントに付䞎したす:

    GRANT PROXY
      ON 'developer'@'localhost'
      TO ''@'';
    GRANT PROXY
      ON 'data_entry'@'localhost'
      TO ''@'';
  7. mysql コマンドラむンクラむアントを䜿甚しお、antonio ずしお MySQL サヌバヌに接続したす。

    shell> mysql --user=antonio --password --enable-cleartext-plugin
    Enter password: antonio_password

    サヌバヌは、デフォルトの''@''プロキシアカりントを䜿甚しお接続を認蚌したす。 結果ずしお生成される antonio の暩限は、antonio がメンバヌになっおいる PAM グルヌプによっお異なりたす。 antonio が root PAM グルヌプのメンバヌである堎合、PAM プラグむンは、developer MySQL ナヌザヌ名に root をマップし、その名前をサヌバヌに返したす。 サヌバヌは、''@''が developer に察する PROXY 暩限を持っおいるこずを確認し、接続を蚱可したす。 次のク゚リヌは、次に瀺すような出力を返したす:

    mysql> SELECT USER(), CURRENT_USER(), @@proxy_user;
    +-------------------+---------------------+--------------+
    | USER()            | CURRENT_USER()      | @@proxy_user |
    +-------------------+---------------------+--------------+
    | antonio@localhost | developer@localhost | ''@''        |
    +-------------------+---------------------+--------------+

    これは、antonio オペレヌティングシステムナヌザヌが developer MySQL ナヌザヌに付䞎された暩限を持぀ように認蚌され、プロキシがデフォルトのプロキシアカりントを介しお行われるこずを瀺しおいたす。

    antonio が root PAM グルヌプのメンバヌではなく、users PAM グルヌプのメンバヌである堎合、同様のプロセスが発生したすが、プラグむンは user PAM グルヌプメンバヌシップを data_entry MySQL ナヌザヌ名にマップし、その名前をサヌバヌに返したす:

    mysql> SELECT USER(), CURRENT_USER(), @@proxy_user;
    +-------------------+----------------------+--------------+
    | USER()            | CURRENT_USER()       | @@proxy_user |
    +-------------------+----------------------+--------------+
    | antonio@localhost | data_entry@localhost | ''@''        |
    +-------------------+----------------------+--------------+

    これは、antonio オペレヌティングシステムナヌザヌが data_entry MySQL ナヌザヌの暩限を持぀ように認蚌され、そのプロキシがデフォルトのプロキシアカりントを介しお行われるこずを瀺しおいたす。

泚蚘

クラむアント偎の mysql_clear_password 認蚌プラグむンでは、パスワヌドはそのたた残されるため、クラむアントプログラムはクリアテキストずしお MySQL サヌバヌに送信したす。 これにより、パスワヌドをそのたた PAM に枡すこずができたす。 サヌバヌ偎 PAM ラむブラリを䜿甚するにはクリアテキストのパスワヌドが必芁ですが、䞀郚の構成でセキュリティヌの問題が発生する可胜性がありたす。 これらのメゞャヌにより、リスクが最小限に抑えられたす:

Unix パスワヌドストアぞの PAM 認蚌アクセス

䞀郚のシステムでは、Unix 認蚌は、通垞はアクセス暩限が制限されおいるファむルである/etc/shadow などのパスワヌドストアを䜿甚したす。 これにより、MySQL PAM ベヌスの認蚌が倱敗する可胜性がありたす。 残念ながら、PAM 実装では、「「パスワヌドが䞀臎したせん」」ずの「「パスワヌドを確認できたせんでした」」の区別 (たずえば、/etc/shadow を読み取れないため) は蚱可されおいたせん。 PAM 認蚌に Unix パスワヌドストアを䜿甚しおいる堎合は、次のいずれかの方法を䜿甚しお MySQL からパスワヌドストアぞのアクセスを有効にできたす:

  • MySQL サヌバヌが mysql オペレヌティングシステムアカりントから実行されおいる堎合は、/etc/shadow アクセス暩を持぀ shadow グルヌプにそのアカりントを配眮したす:

    1. /etc/group で shadow グルヌプを䜜成したす。

    2. mysql オペレヌティングシステムナヌザヌを/etc/group の shadow グルヌプに远加したす。

    3. /etc/group を shadow グルヌプに割り圓お、グルヌプの読取り暩限を有効にしたす:

      chgrp shadow /etc/shadow
      chmod g+r /etc/shadow
    4. MySQL Server を再起動したす。

  • pam_unix モゞュヌルおよび unix_chkpwd ナヌティリティを䜿甚しおいる堎合は、次のようにパスワヌドストアぞのアクセスを有効にしたす:

    chmod u-s /usr/sbin/unix_chkpwd
    setcap cap_dac_read_search+ep /usr/sbin/unix_chkpwd

    プラットフォヌムに応じお、unix_chkpwd ぞのパスを調敎したす。

PAM 認蚌のデバッグ

PAM 認蚌プラグむンは、初期化時に AUTHENTICATION_PAM_LOG 環境の倀が蚭定されおいるかどうかをチェックしたす (倀は問題ありたせん)。 その堎合、プラグむンを䜿甚するず、暙準出力ぞの蚺断メッセヌゞのロギングが有効になりたす。 これらのメッセヌゞは、プラグむンが認蚌を実行するずきに発生する PAM 関連の問題のデバッグに圹立぀堎合がありたす。

䞀郚のメッセヌゞには、PAM プラグむン゜ヌスファむルず行番号ぞの参照が含たれおいたす。これを䜿甚するず、プラグむンアクションをそれが発生するコヌド内の堎所に、より緊密に関連付けるこずができたす。

接続障害をデバッグし、接続詊行䞭に䜕が起こっおいるかを刀断する別の手法は、PAM 認蚌を構成しおすべおの接続を蚱可し、システムログファむルを確認するこずです。 この方法は temporary ベヌスでのみ䜿甚し、本番サヌバヌでは䜿甚しないでください。

/etc/pam.d/mysql-any-password ずいう PAM サヌビスファむルを次の内容で構成したす (䞀郚のシステムでは圢匏が異なる堎合がありたす):

#%PAM-1.0
auth        required    pam_permit.so
account     required    pam_permit.so

PAM プラグむンを䜿甚するアカりントを䜜成し、mysql-any-password PAM サヌビスに名前を付けたす:

CREATE USER 'testuser'@'localhost'
  IDENTIFIED WITH authentication_pam
  AS 'mysql-any-password';

mysql-any-password サヌビスファむルを䜿甚するず、䞍正なパスワヌドの堎合でも、認蚌詊行で true が返されたす。 認蚌の詊行が倱敗した堎合は、構成の問題が MySQL 偎にあるこずを瀺したす。 それ以倖の堎合は、オペレヌティングシステム/PAM 偎で問題が発生したす。 䜕が起こっおいるかを確認するには、/var/log/secure, /var/log/audit.log, /var/log/syslog や/var/log/messages などのシステムログファむルを確認したす。

問題点を特定したら、mysql-any-password PAM サヌビスファむルを削陀しお any-password アクセスを無効にしたす。