PostgreSQLでは md5 を利用したパスワード認証を使用することが多いですが、LDAP 利用した認証も可能です。 Active Directory (AD DS)を LDAPサーバーとした PostgreSQL のログイン認証を試します。
今回はテスト用に用意したサーバー winsrv001 とドメイン jbs0023.local を用いて検証を行います。
Active Directory のユーザー作成
「Active Directory ユーザーとコンピューター」を開き、ユーザーを作成します。
PostgreSQL にログインするユーザーの作成
PostgreSQL にログインするユーザー「db014」を作成します。ユーザー名は PostgreSQL に作成するユーザーと同じユーザー名と同じにする必要があります。
バインドユーザーの作成
Active Directory に保存されているパスワードをクエリするためのユーザー「bind」を作成します。このユーザーは PostgreSQL にログインしません。
PostgreSQL のユーザー作成
PostgreSQL のユーザー「db014」を作成します。
認証を Active Directory で行うのでパスワードの設定は必要ありません。
$ createuser db014
認証方法の設定
pg_hba.conf の編集
PostgreSQL の認証方法を指定する pg_hba.conf に以下の1行を追記します。
host all db014 192.168.21.0/24 ldap ldapserver=winsrv001.jbs0023.local ldapbasedn="cn=USERS,dc=jbs0023,dc=local" ldapbinddn="CN=bind,CN=Users,dc=jbs0023,dc=local" ldapbindpasswd="bindユーザーのパスワード" ldapsearchattribute="sAMAccountName"
LDAP認証時の各設定オプション
ldapserver | LDAPサーバー名 |
ldapbasedn | ユーザーを検索するためのルートDN |
ldapbinddn | バインドするユーザーのユーザーDN |
ldapbindpasswd | バインドするユーザーのパスワード |
ldapsearchattribute | ユーザー名を一致させるための属性 |
pg_hba.conf の反映
設定した内容を反映するために pg_hba.conf の再読み込みを行います。
$ pg_ctl reload
ログインテスト
通常のログインと同様にログインします。
最後に
LDAP認証による PostgreSQL のログインを試しました。
Active Directory を LDAPサーバーとして利用するにはバインドユーザーが別途必要で、そのパスワードをpg_hba.confに記載しなければならないのは不便ですが、比較的簡単に PostgreSQLの認証を Active Directory でできました。
データベースに直接アクセスするユーザーが多い場合など、認証をActive Directoryで行ったほうが管理しやすい場面があると思います。