客户端认证
允许建立数据库连接的用户是由数据库根目录中一个简单文件控制的,该文件名为 pg_hba.conf。运行 initdb 创建数据库群集时,将创建一个具有默认值的 pg_hba.conf 文件。
默认情况下存在的权限取决于 initdb 的调用方式。默认情况下,将使用 trust 类型创建新的群集,任何本地用户都可以连接到数据库。但是,某些 PostgreSQL 程序包可能会更改此设置。例如,如果您在 Red Hat 中使用“服务 initdb”创建群集,它将以如下方式调用 initdb
initdb --pgdata='$PGDATA' --auth= 'ident sameuser'
它使用不太流行的 ident 方法来确定允许用户连接,对于不知道此方法的用户来说,这通常令人沮丧。
建议使用一种典型的安装方式来访问数据库网络,获取本地 LAN 地址,并且只允许使用 MD5 加密的密码进行身份验证的客户端。pg_hba.conf 中的以下条目将对此进行说明
# TIPO BASE_DE_DATOS USUARIO CIDR-DIRECCIÓN MÉTODO 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 开始
# Sólo conexiones locales para el socket de Unix local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust
如果数据库以这种方式进行配置,那么现在系统中的任何登录用户都可以随意连接到服务器,因此您不希望将此配置保留很长时间。您现在可以做的是使用命令 ALTER ROLE 为超级用户 postgres 分配一个强密码。完成此操作后,您可以停止服务 (pg_ctl stop),将所有 "trust" 更改为 "md5",将您的范围或完整网络块添加到 pg_hba.conf,然后更改 postgresql.conf 的 listen_address 参数。再次启动后,您将拥有一个您知道其密码的超级用户帐户,您可以使用此帐户为您的普通用户创建帐户。
示例
示例 1
以用户 test 从 IP 为 10.0.0.100 的计算机通过 tcp/ip(网络)以 md5 身份验证方法访问 test001 数据库
host test001 test 10.0.0.100 255.255.255.255 md5
也可以使用 CIDR 符号以 netmask 编写此相同条目
host test001 test 10.0.0.100/32 md5
示例 2
以用户 test 从网络 10.0.0.0 中的所有计算机(总共 254 台计算机,netmask:255.255.255.0)通过 tcp/ip(网络)以 md5 身份验证方法访问 test001 数据库
host test001 test 10.0.0.0 255.255.255.0 md5
还可以使用 CIDR 符号以 netmask 编写此相同条目
host test001 test 10.0.0.0/24 md5
示例 3
以用户 test 从 IP 为 10.0.0.100 和 10.1.1.100 的计算机通过 tcp/ip(网络)(加密)以 md5 身份验证方法访问集群中的所有数据库(需要在 pg_hba.conf 文件中进行两个条目)
hostssl all test 10.0.0.100 255.255.255.255 md5 hostssl all test 10.1.1.100 255.255.255.255 md5
示例 4
拒绝用户 test 从网络 10.0.0.0/24 中的所有计算机访问集群中的所有数据库,并使用 md5 方法为世界其他地区授予访问权限
host all test 10.0.0.0/24 reject host all all 0.0.0.0/0 md5
LDAP 身份验证
Postgresql 允许我们针对 LDAP 系统检查用户,尽管我们可以执行此操作,但请记住用户同样应该存在于数据库中。
在向 LDAP 服务器发出身份验证请求时需要考虑的参数
Parámetros Descripción ldapserver IP o dominio del servidor ldap a conectarse. ldapprefix El nombre de usuario. ldapsuffix El sufijo que continua al nombre de usuario, que concluiría para formar el “dn”. ldapport Puerto al que se va a conectar al servidor ldap, en caso de no ser especificado se utiliza el puerto por default, 389. ldaptls Debe setearse en 1 si se quiere que la petición de autenticación hacia el servidor ldap se realize utilizando encriptación TLS.
LDAP 身份验证使用示例
host all all 127.0.0.1/24 ldap ldapserver="localhost" ldapprefix="uid=" ldapsuffix=",dn=testing-et,dc=com,dc=cu"
相关文章
- PostgreSQL 和 pam_ldap 作者:Adrian Nida
- 使用 libnss_pgsql 进行 NSS 认证 作者:David Ford
- 对 PostgreSQL 客户端进行认证 作者:SecurityProNews (2002-05-21)
- 针对 AD 进行 LDAP 认证 作者:Joey Wang (2007-04-13)