Help us understand the problem. What is going on with this article?

PostgreSQL の認証を LDAP で行う

初めに

2019-10-03にPostgreSQL12 がリリースされました

https://www.postgresql.org/about/news/1976/
https://www.postgresql.org/about/press/presskit12/ja/#original_release

PostgreSQLにはLDAPでユーザー認証を行う機能があるようですが、あまり情報がないようでしたので、簡単に纏めました。
https://www.postgresql.jp/document/11/html/auth-ldap.html

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

環境

  • Ubuntu 18.04 LTS
  • PostgreSQL 12 (--with-ldapでビルドしたもの)
  • OpenLDAP 2.4.x

PostgreSQL 12の構築と設定

必要なパッケージの導入

sudo apt update

sudo apt install gcc
sudo apt install make

sudo apt install libreadline-dev
sudo apt-get install zlib1g-dev

sudo apt install ldap-utils
sudo apt install slapd
sudo apt install libldap-dev

PostgreSQL 12をビルド

tar xvf ./postgresql-12.0.tar.gz
cd ./postgresql-12.0
./configure --with-ldap
make
sudo make install

OSユーザー(postgres)の作成

adduser postgres

PostgreSQLのデータディレクトリの作成

sudo mkdir /usr/local/pgsql/data
sudo chown postgres:postgres /usr/local/pgsql/data
chmod 700 /usr/local/pgsql/data

データーディレクトリの初期化

su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data 

PostgreSQLを起動し接続

su - postgres
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start  
/usr/local/pgsql/bin/psql  

DBのユーザー(dbadmin)を作成

postgres=# CREATE ROLE dbadmin WITH SUPERUSER LOGIN;

postgres=# \du
Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
dbadmin   | Superuser                                                  | {}
postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# \q

DBの認証方法の設定

:/usr/local/pgsql/data/pg_hba.conf
:
#local   all             all                                    trust
local   all             all                                     ldap ldapserver=localhot ldapprefix="cn=" ldapsuffix="dc=example,dc=com" 
# IPv4 local connections:
host    all             all             127.0.0.1/32            ldap ldapserver=localhot ldapprefix="cn=" ldapsuffix="dc=example,dc=com" 
:

設定が済んだらPostgreSQLを再起動

OpenLDAPの設定

LDAPのユーザーエントリー(dbadmin)

OpenLDAPに以下のエントリーを追加、データベースに追加したユーザー名(dbadmin)と同じ名前のユーザーを作成する。

dbadmin.ldif
objectclass: top
objectclass: person
objectclass: organizationalperson
objectclass: inetorgperson
dn: cn=dbadmin,dc=example,dc=com
cn: dbadmin
sn: PostgresDB管理者
mail: dbadmin@example.com
userPassword: secret123     (ここはslappasswdコマンドを使ってハッシュ化すること)

認証

/usr/local/pgsql/bin/psql -U dbadmin -d <データーベース名>
Password for user admin: 

最後に

いろいろ試しているのですが、うまく行ったり行かなかったりで、なかなかの曲者です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした