使用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:
最终
尽管我尝试了很多方法,经常会有成功也会有失败,真是个不好捉摸的家伙。