PolarDB PostgreSQL轻量版支持多种认证方式以实现客户端认证。通过限制用户对数据库的访问权限,确保数据库的安全性。
客户端认证
客户端认证主要由pg_hba.conf
配置文件控制,该文件通常存放在数据库集群目录中,其中hba
表示基于主机的认证。在安装和初始化数据目录时,会生成一个默认的pg_hba.conf
文件。通过修改该文件,可以调整客户端认证方式。完成配置文件的修改后,需运行pg_ctl reload
命令或调用SQL函数pg_reload_conf()
,使集群重新加载配置文件。pg_hba.conf
配置文件示例如下:
#TYPE DATABASE USER ADDRESS METHOD [AUTH-OPTIONS]
local database user auth-method [auth-options]
host database user address auth-method [auth-options]
hostssl database user address auth-method [auth-options]
hostnossl database user address auth-method [auth-options]
host database user IP-address IP-mask auth-method [auth-options]
hostssl database user IP-address IP-mask auth-method [auth-options]
hostnossl database user IP-address IP-mask auth-method [auth-options]
pg_hba.conf
文件常由一组记录组成。每条记录由若干用空格和/
或制表符分隔的域构成,并且不得跨行。如果域值用双引号包围,则可以包含空字符。每条记录指定连接类型、数据库名、用户名、客户端IP地址范围以及用于匹配这些参数的连接所采用的认证方法。认证过程中,第一条记录将被优先使用。如果选择的记录认证失败,则后续记录将中止认证。具体参数说明如下:
参数名称 | 描述 |
参数名称 | 描述 |
TYPE | 指定连接类型,常见连接类型如下:
|
DATABASE | 指定适用的数据库,取值范围如下:
|
USER | 指定允许连接的用户,取值范围如下:
|
ADDRESS | 指定允许访问的IP地址范围。支持IPv4和IPv6,可以使用如下两种形式来表示:
|
METHOD | |
[AUTH-OPTIONS] | 可选,用于身份验证方法的附加选项。例如,证书认证时使用的用户名映射 |
认证方式
认证方式 | 参数值 | 说明 |
认证方式 | 参数值 | 说明 |
| 采用这种认证模式时,即完全信任从服务器本机使用psql且不指定-U参数的连接,此时不需要密码。 | |
要求执行SCRAM-SHA-256加密认证来验证用户的口令。 | ||
要求执行MD5加密认证来验证用户的口令。 | ||
| 要求客户端提供一个未加密的口令进行认证。由于口令以明文形式在网络上发送,建议您在可信的网络上使用这种方式。 | |
| 使用SSL客户端证书认证。 |
Trust认证
使用Trust认证方式时,PolarDB信任所有连接到服务器的客户端,允许以任意数据库用户名无密码访问数据库。这种认证方式虽然简化了连接流程,但存在安全风险,建议仅在受保护的环境(如通过防火墙、IP 白名单或其他安全机制)中使用。
在单用户的本地环境中,Trust认证方式非常简便,且pg_hba.conf
文件中database
和user
列所设置的限制仍然有效。这些限制可以约束用户能够访问的数据库或使用的用户名。如需在多用户机器进行访问可使用以下方式控制访问权限:
文件系统权限:限制对服务器的Unix域套接字文件的访问。防止非授权用户通过本地连接访问数据库。
配置Unix套接字目录:配置unix_socket_directories参数,将Unix域套接字文件放在一个受限目录中。
需要注意的是,仅依靠文件系统权限保护Unix域套接字连接时,本地TCP/IP连接不会被文件系统权限所限制。如果您需要使用文件系统权限控制本地安全,可从pg_hba.conf
中移除host ... 127.0.0.1 ...
行,或者将其改为一个非Trust认证方法。
口令认证
SCRAM-SHA-256
按照RFC 7677规范,SCRAM-SHA-256认证实现了一种挑战-响应机制,此机制避免了明文口令的传输,有效防止在不可信连接上对口令的嗅探。同时,支持在服务器上以加密哈希方式存放口令,提供更高的安全保障。
MD5
MD5采用了一种自定义的安全性相对较低的挑战-响应机制。该机制能够有效防止口令嗅探以及在服务器上以明文存储口令的风险,但对于攻击者已经从服务器窃取口令哈希的情况无法提供有效保护。
MD5方法无法与db_user_namespace
特性同时使用。
为了简化从MD5方法到较新SCRAM-SHA-256方法的转换,如果在pg_hba.conf
中指定了MD5,但在服务器上的密码采用SCRAM-SHA-256加密,则将自动选择基于SCRAM-SHA-256的认证方式。
证书认证
证书认证使用SSL客户端证书进行身份验证,提高数据传输安全性,但仅适用于SSL连接。
当使用证书认证时,服务器要求客户端提供一个有效且可信的证书。集群将使用证书的CN属性与被请求的数据库用户名进行对比,若匹配则允许登录。可通过用户名映射指定系统用户名和数据库用户名之间的映射关系。用户名映射可以与数据库用户名不同。
在指定证书认证pg_hba.conf
记录中,认证选项clientcert
默认设置为1,且该选项无法关闭。证书认证在基本clientcert
证书验证测试的基础上增加了一条规则,用于检查CN属性与数据库用户名的匹配情况。
认证失败常见问题
FATAL: no pg_hba.conf entry for host "123.123.123.123", user "andym", database "testdb"
表明您已成功连接到服务器,但
pg_hba.conf
配置文件中认证信息不存在。FATAL: password authentication failed for user "andym"
表示您已连接到服务器,但密码错误或认证方式不匹配。
FATAL: user "andym" does not exist
目标数据库用户不存在。
FATAL: database "testdb" does not exist
目标数据库不存在。
- 本页导读 (1)
- 客户端认证
- 认证方式
- Trust认证
- 口令认证
- 证书认证
- 认证失败常见问题