客户端认证

来自 PostgreSQL wiki
跳转到导航跳转到搜索

谁被允许连接到数据库由数据库目录根目录下的一个名为 pg_hba.conf 的文件控制。当你运行 initdb 创建数据库集群时会创建一个默认文件。

默认情况下存在的权限取决于 initdb 的调用方式。默认情况下,新的集群使用“信任”模式创建,任何本地用户都可以连接到数据库。但是,一些 PostgreSQL 打包程序可能会更改此设置。例如,如果你使用 RedHat 的“service initdb”来创建集群,它会像这样调用 initdb

initdb --pgdata='$PGDATA' --auth='ident sameuser'

它使用不太流行的 ident 方案来确定用户是否被允许连接,这会让那些不知道这一点的人感到沮丧。

对数据库的网络访问的典型推荐设置是获取本地 LAN 地址,并且只允许使用安全 MD5 密码进行身份验证的客户端。pg_hba.conf 中的条目将如下所示

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all         all         192.168.1.0/24        md5

这仅允许来自 192.168.1.0-192.168.1.255 的 IP 地址的客户端连接,并且只有在他们提供用户的正确密码时才能连接。请注意,只有在 postgresql.conf 中为 listen_addresses 设置允许的情况下,才能进行此类网络访问。

数据库用户的密码是在使用 CREATE ROLE 创建用户时设置的,可以使用 ALTER ROLE 修改。 createuser 可以是一个有用的包装脚本,可以帮助你完成这项工作。

这里有点问题:由于创建新的角色需要使用超级用户角色连接到数据库,那么你如何开始呢?一种常见的方法是从一个 pg_hba.conf 开始,它只信任在服务器本身连接的用户

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust

如果数据库配置成这样,那么任何登录到系统的人都可以随时连接到你的服务器,因此你不希望长期保留这种配置。你现在可以做的是使用 ALTER ROLE 为 postgres 超级用户分配一个强密码。完成此操作后,你可以关闭服务器,将所有“信任”设置更改为“md5”,将整个网络块添加到 pg_hba.conf,并设置 listen_addresses。当你重新启动它时,你将拥有一个你已知密码的超级用户帐户,你可以使用它为你的用户创建所有常规帐户。

LDAP 身份验证

要实现 ldap 身份验证,你需要用以下内容替换“md5”

:ldap "ldap://server/dc=domain,dc=local;DOMAIN\"

其中服务器和域都是不言自明的。这是一个用户报告此功能所要做的所有操作,以完成 ldap 身份验证。他们将此方法用于 192.168.x.x 范围内的所有网络地址,并将 md5 用于 localhost,以便它可以使用在 ldap 中不存在的用户名进行备份。这样,只有服务器本身才能在超级用户帐户上启动备份。

相关文章