本文所述的认证方式及其配置方法对于泽拓昆仑Klustron也完全适用。
关键词:PostgreSQL、外部认证、安全
数据库安全性对于保护存储在数据库中的敏感信息至关重要。其中,认证作为核心环节,旨在验证试图访问数据库的用户身份。认证过程通常通过用户名和密码完成,同时涉及安全令牌和一次性密码等多重因素。DBA必须部署强大的认证机制,确保只有授权用户才能访问数据库及其数据。此外,定期监控和审计数据库认证日志以便发现并阻止任何未授权的访问尝试是非常必要的。PostgreSQL服务器认证是指验证尝试连接到PostgreSQL服务器的用户的身份。这可以通过多种方法完成,包括密码认证、客户端证书、以及GSSAPI、LDAP和RADIUS等外部认证方式。pg_hba.conf文件用于配置PostgreSQL服务器采用的认证方法,并能针对不同连接类型设定不同的方法。默认情况下,PostgreSQL采用基于信任的认证机制,即认为来自本地主机的所有连接均为可信,无需密码。但值得注意的是,为了确保数据安全访问,建议在远程连接和生产环境中采用基于密码或外部认证方式。谈到安全,认证是第一道防线。PostgreSQL提供了多种认证方法,可以归为三大类:在之前的博客中,我们已经讨论了PostgreSQL内部认证和基于操作系统的认证。现在,让我们来了解一下外部认证方式。01
PostgreSQL支持多种外部认证方法,包括GSSAPI、LDAP和RADIUS。- GSSAPI,即通用安全服务应用程序接口,利用Kerberos进行用户认证。
- LDAP,即轻量级目录访问协议,通过LDAP服务器认证用户。
- RADIUS,即远程认证拨号用户服务,通过RADIUS服务器认证用户。这些外部认证方法通过提供一种集中式的用户访问管理方式,避免了在数据库中存储密码的需求,来保护PostgreSQL数据库的安全。
但需要注意的是,GSSAPI和RADIUS仅在PostgreSQL服务器9.1或更高版本中得到支持,而LDAP是所有版本的内置特性。
02
LDAP是企业环境中流行的认证方法,也可用于PostgreSQL。本节将介绍如何为PostgreSQL设置LDAP认证,并提供一个配置示例。开始之前,你需要访问一个LDAP服务器,并对其工作原理有基本的了解。你还需要在服务器上安装并运行PostgreSQL。步骤 1: 安装 OpenLDAP 服务器和客户端包sudo apt-get update
sudo apt-get install slapd ldap-utils
复制
sudo dpkg-reconfigure slapd
复制
- 当被询问是否使用 dbconfig-common 配置数据库时选择“否”。
- 为您的 LDAP 服务器设置域名,例如,“example.com”。
- 为您的 LDAP 服务器设置组织名称,例如,“Example Inc”。
sudo ldapadd -x -D cn=admin,dc=example,dc=com -w <admin password> -f base.ldif
复制
其中“base.ldif”是一个包含您想要创建的目录结构的文件。ldapsearch -x -b dc=example,dc=com -D cn=admin,dc=example,dc=com -w <admin password>
复制
ldapadd -x -D cn=admin,dc=example,dc=com -w <admin password> -f users.ldif
复制
其中“users.ldif”是一个包含您想要添加到目录的用户和组的文件。ldapwhoami -x -D cn=<user>,dc=example,dc=com -w <user password>
复制
此命令应返回用户的 DN(区分名),表明用户已成功认证。pg_hba.conf 文件控制 PostgreSQL 使用的认证方法。要启用 LDAP 认证,您需要在 pg_hba.conf 文件中添加一行,指定要使用的 LDAP 服务器和方法。例如:host all all ldapserver=ldap.example.com ldapmethod=simple
复制
此行告诉 PostgreSQL 使用 ldap.example.com 上的 LDAP 服务器进行认证,使用“simple”方法。修改 pg_hba.conf 文件后,您需要重启 PostgreSQL 服务以使更改生效。您可以通过运行以下命令测试与 LDAP 服务器的连接:ldapwhoami -h ldap.example.com -D "cn=admin,dc=example,dc=com" -w "adminpassword"
复制
此命令将以“cn=admin,dc=example,dc=com”用户和密码“adminpassword”绑定到 LDAP 服务器。如果连接成功,您应该看到一条消息,指示您当前绑定为的用户。要测试与 PostgreSQL 的 LDAP 认证,您可以使用 psql 命令行界面连接到数据库。例如:psql -U myldapuser -h localhost
复制
要测试与 PostgreSQL 的 LDAP 认证,您可以使用 psql 命令行界面连接到数据库。例如:psql -U myldapuser -h localhost
复制
如果 LDAP 认证正确设置,您应该能够使用 myldapuser 的 LDAP 凭据连接到数据库。03
GSSAPI 是一种认证方法,允许用户使用 Kerberos 向 PostgreSQL 进行认证。在本节中,我们将介绍如何为 PostgreSQL 设置 GSSAPI 认证并提供配置示例。在开始之前,您需要有一个 Kerberos 基础设施和对其工作原理有基本了解。您还需要在运行 PostgreSQL 的服务器上安装 PostgreSQL 和 Kerberos 库(gssapi 和 gssapi_krb5)。pg_hba.conf 文件控制 PostgreSQL 使用的认证方法。要启用 GSSAPI 认证,您需要在 pg_hba.conf 文件中添加一行,指定要使用的 GSSAPI 方法。例如:hostgssenc postgres postgres 192.168.0.102/32 gss include_realm=0
复制
此行告诉 PostgreSQL 使用 GSSAPI 进行认证,并且不在用户名中包含 Kerberos 领域。修改 pg_hba.conf 文件后,您需要重启 PostgreSQL 服务以使更改生效。如果出现此错误,意味着您的服务器没有配置 --with-gssapi 选项。2023-01-31 19:25:18.585 PKT [42302] LOG: hostgssenc 记录无法匹配,因为此构建不支持 GSSAPI复制
您需要配置 Kerberos 以与 PostgreSQL 协同工作。您需要为 PostgreSQL 服务器创建一个服务主体,并将其添加到 Kerberos keytab 文件中。kinit -k -t path/to/keytab postgres/your.postgres.host@YOURREALM.COM
复制
这个命令将为你在步骤 3 中创建的服务主体获取一个 Kerberos 票据。要测试 PostgreSQL 的 GSSAPI 认证,您可以使用 psql 命令行界面连接到数据库。例如:psql "dbname=mydb host=myhost user=myuser"
复制
如果 GSSAPI 认证设置正确,您应该能够使用您的 Kerberos 凭据连接到数据库。04
SSPI 是一种认证方法,允许用户使用 Windows 内置的安全特性来认证 PostgreSQL。它类似于 GSSAPI,但特定于 Windows 操作系统。PostgreSQL 服务器使用 SSPI 库与客户端协商使用 Kerberos 或 NTLM 协议的认证。要在 PostgreSQL 中设置 SSPI 认证,您必须配置 pg_hba.conf 文件以使用“sspi”方法,并重启 PostgreSQL 服务。例如,要为来自本地主机的所有连接启用 SSPI 认证,您将在 pg_hba.conf 文件中添加以下行:host all all 127.0.0.1/32 sspi
复制
这一行告诉 PostgreSQL 对所有来自 IP 地址 127.0.0.1 的连接使用 SSPI 进行认证,对应于 localhost。更改完成后,您需要重启 PostgreSQL 服务以使更改生效。要测试 SSPI 认证,您可以使用 psql 命令行界面连接到数据库。SSPI 认证仅在 Windows 上支持,并且在 PostgreSQL 服务器版本 9.1 或更高版本中可用。05
RADIUS 是用于认证远程用户的广泛使用的协议。它也可以用来认证 PostgreSQL 数据库中的用户。在本博客文章中,我们将介绍如何为 PostgreSQL 设置 RADIUS 认证,并提供配置示例。在开始之前,您需要访问 RADIUS 服务器并对其工作原理有基本了解。以下是在 Ubuntu 上安装和配置 RADIUS 服务器的步骤:复制
sudo apt-get update sudo apt-get install freeradius freeradius-utils
复制
复制
sudo nano etc/freeradius/users
复制
username Auth-Type := Local, User-Password := "password"
复制
sudo service freeradius restart
复制
sudo radtest username password 127.0.0.1 0 testing123
复制
如果测试成功,您应该收到一个“Access-Accept”响应。pg_hba.conf 文件控制 PostgreSQL 使用的认证方法。要启用 RADIUS 认证,您需要在 pg_hba.conf 文件中添加一行,指定要使用的 RADIUS 服务器和方法。例如:host all all 0.0.0.0/0 radius radiusservers=192.168.1.1 radiussecrets=password radiusports=1812
复制
这一行告诉 PostgreSQL 使用 RADIUS 进行认证。在更改 pg_hba.conf 和 radius.conf 文件后,您需要重启 PostgreSQL 服务以使更改生效。要测试 PostgreSQL 的 RADIUS 认证,您可以尝试使用 psql 命令行界面连接到数据库。例如:psql -U username -h localhost
复制
如果 RADIUS 认证正确设置,您应该能够使用您的 RADIUS 凭据连接到数据库。06
综上所述,通过提供集中式用户访问管理并避免在数据库中存储密码,GSSAPI、LDAP和RADIUS这些外部认证方式能显著提升PostgreSQL数据库的安全性。GSSAPI利用Kerberos进行用户认证,LDAP通过LDAP服务器进行用户认证,而RADIUS则通过RADIUS服务器完成用户认证工作。值得一提的是,GSSAPI和RADIUS只支持PostgreSQL服务器9.1及以后的版本,而LDAP则是所有版本都内置支持的特性。除了外部认证方式,PostgreSQL服务器还支持基于密码和客户端证书的认证方式。为保障数据的安全访问,推荐在远程连接和生产环境中采用基于密码或外部的认证方法。https://www.percona.com/blog/postgresql-database-security-external-server-based-authentication/为促进团队内外的沟通联系,我们Klustron团队的bbs论坛开始上线,欢迎各位同学使用!(链接:https://forum.klustron.com/,或者点击文末“阅读原文”,即可跳转)论坛目前是测试版,可能还存在不稳定的现象,欢迎各位老师、朋友共享信息,如果遇到问题还请谅解。欢迎大家下载和安装Klustron数据库集群,并免费使用(无需注册码)。http://downloads.klustron.com/如需购买请邮箱联系sales_vip@klustron.com,有相关问题欢迎添加下方小助手微信联系🌹https://doc.klustron.com/zh/Klustron_Instruction_Manual.htmlhttps://doc.klustron.com/zh/Klustron_Quickly_Guide.htmlhttps://doc.klustron.com/zh/Klustron-function-experience-example.htmlhttps://doc.klustron.com/zh/product-usage-and-evaluation-guidelines.html