★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

21.10. LDAP認証 #

この認証方式はpasswordと似ていますが、パスワード確認にLDAPを使用する点が異なります。 LDAPはユーザの名前とパスワードの組み合わせの検証のみに使用されます。 そのため、LDAPを使用して認証を行うようにする前に、ユーザはデータベースに存在しなければなりません。

LDAP認証は2つのモードで動作します。1つ目のモードでは、それは単なるバインド・モードを呼び出すものですが、 サーバはprefix username suffixとして区別された名前にバインドします。 一般的に、prefixパラメータはActive Directory環境でのcn=DOMAIN\を特定するために使用されます。 suffixは、Active Directory環境ではない場合でのDNの残りの部分を特定するために使用されます。

2つ目のモードでは、それはsearch+bindモードを呼び出すもので、サーバは最初にldapbinddnldapbindpasswdで指定された、 固定されたユーザ名とパスワードを使用してLDAPディレクトリにバインドします。 それからデータベースにログインしようとしているユーザを検索します。 もしユーザとパスワードが指定されていなかった場合は、ディレクトリに対して匿名でバインドします。 検索はldapbasednのサブツリーまで行われ、ldapsearchattributeで指定された属性に正確に一致するかどうかまで行われます。 この検索において、一度ユーザが見つかるとサーバは切断して、クライアントで指定されたパスワードを使用してこのユーザとして再度ディレクトリにバインドします。これはそのログインが正しいかどうかを検証するためです。 このモードはApache mod_authnz_ldapおよびpam_ldapなどの他のソフトウェアと同じように、LDAP認証の仕組みで使用されるものと同じです。 この方法は、ユーザオブジェクトがディレクトリに配置されている場合に、かなりの柔軟性があります。 しかし、LDAPサーバへの2つの分離した接続が作成されます。

次の設定オプションは両方のモードで使用されます。

ldapserver

接続するLDAPサーバの名称もしくはIPアドレス。空白で区切ることで複数のサーバを指定できます。

ldapport

LDAPサーバに接続するためのポート番号。もしポートが指定されていない場合は LDAPライブラリ内のデフォルトポート設定が使用されます。

ldapscheme

ldapsに設定するとLDAPSを使用します。 これはいくつかのLDAPサーバーの実装でサポートされている、SSL経由のLDAPを使用する非標準の方法です。 代替方法については、ldaptlsオプションを参照してください。

ldaptls

1に設定すると、PostgreSQLとLDAPサーバ間の接続にTLSによる暗号化を使用します。 これはRFC 4513StartTLS操作を使用します。 代替方法については、ldapschemeオプションも参照してください。

ldapschemeldaptlsを使うときにはPostgreSQLサーバとLDAPサーバ間のトラフィックのみが暗号化されることに注意してください。 SSLがそこでも使用されていない限り、PostgreSQLサーバとPostgreSQLクライアントとの接続は、暗号化されません。

以下のオプションは単純バインド・モードのみで使用されます。

ldapprefix

単純なバインド認証を行う場合のDNを生成する際にユーザ名の前に追加する文字列

ldapsuffix

単純なバインド認証を行う場合のDNを生成する際にユーザ名の後に追加する文字列

以下のオプションはsearch+bindモードのみで使用されます。

ldapbasedn

検索とバインドの認証を行う場合のユーザ名がログインするための検索を始めるためのルートDN

ldapbinddn

検索とバインドの認証を行う場合のディレクトリと検索をバインドするためのユーザのDN

ldapbindpasswd

検索とバインドの認証を行う場合のディレクトリと検索をバインドするためのユーザのパスワード

ldapsearchattribute

検索とバインドの認証を行う場合の検索時のユーザ名に対して一致させる属性。 属性が指定されない場合、属性uidが使用されます。

ldapsearchfilter

search+bind認証を行うときに使用する検索フィルタです。 $usernameの出現はユーザ名に置き換えられます。 これによりldapsearchattributeよりも柔軟な検索フィルタが可能になります。

ldapurl

RFC 4516LDAP URL。 これはその他いくつかのLDAPオプションをより簡潔、かつ一般的な形式で記述する別の方法です。 フォーマットは以下のようになっています。

ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]]

scopebaseonesubのいずれかでなくてはならず、一般的には最後のものです。 (デフォルトはbaseです。これは通常このアプリケーションでは役に立ちません。) attributeは単一の属性を指定できます。その場合、それはldapsearchattributeの値として使用されます。 もしattributeが空の場合は、ldapsearchfilterの値としてfilterを使用できます。

URLスキームldapsは、ldapscheme=ldapsを使用するのと同じ、SSL上のLDAP接続をするLDAPS方式を選択します。 StartTLS操作による暗号化されたLDAP接続を使用するには、通常のURLスキームldapを使用し、ldapurlに加えldaptlsオプションを使用しなければなりません。

非匿名バインド(non-anonymous bind)に対し、ldapbinddnおよびldapbindpasswdは個別のオプションとして指定されなければなりません。

LDAP URLは現在、OpenLDAPのみでサポートされており、Windowsではサポートされていません。

search+bindオプションと単純バインドに対するオプションの設定を混在させるのはエラーです。

search+bindモードを使用するときは、ldapsearchattributeで指定される単一の属性を使って、あるいはldapsearchfilterで指定されるカスタム検索フィルターを使って、検索を実行できます。 ldapsearchattribute=fooの指定は、ldapsearchfilter="(foo=$username)"と同等です。 どちらのオプションもない場合は、ldapsearchattribute=uidがデフォルトです。

PostgreSQLが、LDAPクライアントライブラリとしてOpenLDAPを使用するようにコンパイルされていた場合、ldapserverの設定は省略出来ます。 その場合、ホスト名とポート番号のリストは、RFC 2782 DNS SRVレコードを使用して検索されます。 _ldap._tcp.DOMAINという名前が検索され、ldapbasednからDOMAINが抽出されます。

以下に単純バインドLDAP設定の例を示します。

host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"

データベースのユーザ、someuserからデータベースサーバに接続を要求された場合、PostgreSQLはDN cn=someuser, dc=example, dc=netおよびクライアントから提供されたパスワードを用いてLDAPサーバにバインドを試みます。 その接続が成功すればデータベースへのアクセスが認められます。

以下はsearch+bind設定の例です。

host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid

データベースユーザsomeuserとしてデータベースに接続するとき、PostgreSQLは(ldapbinddnが指定されていないので)匿名的にバインドを試み、指定されたベースDNの基で(uid=someuser)の検索を行います。あるエントリが見つかると、見つかった情報とクライアントから与えられたパスワードを用いて、その結果バインドを試みます。その二番目の接続が成功するとデータベースアクセスを認められます。

URLとして記述した同じsearch+bind設定の例です。

host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"

LDAPに対し認証をサポートするいくつかの他のソフトウェアは同じURLフォーマットを使用します。 従って、設定をより簡易に共有できます。

ldapsearchattributeの代わりにldapsearchfilterを使用してユーザーIDまたは電子メールアドレスによる認証を可能にするsearch+bind設定の例です。

host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"

DNS SRV検出を使用してドメイン名example.netのLDAPサービスのホスト名とポート番号を検索する、search+bind設定の例です。

host ... ldap ldapbasedn="dc=example,dc=net"

ヒント

LDAPはDNの異なる構成要素を区切るために往々にしてカンマとスペースを使用します。 例で示されたように、LDAPオプションを設定する場合、二重引用符で括られたパラメータ値を使用することがしばしば必須となります。