使用LDAP进行PostgreSQL的身份验证

首先

PostgreSQL12 于2019年10月3日发布。

以下是两个链接,一个是官方网站的消息页面,一个是官方新闻稿页面:
– 官方消息页面链接: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

创建一个操作系统用户(postgres)。

sudo adduser postgres

创建PostgreSQL的数据目录

sudo mkdir /usr/local/pgsql/data
sudo chown postgres:postgres /usr/local/pgsql/data
sudo 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

数据库认证方法的设置

:/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。

打开LDAP的配置。

LDAP的用户条目(dbadmin)

在OpenLDAP中添加以下条目,并创建一个与添加到数据库中的用户(dbadmin)具有相同名称的用户。

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: 

最终

尽管我尝试了很多方法,经常会有成功也会有失败,真是个不好捉摸的家伙。

bannerAds