数据安全

更新时间:2025-04-03 08:23:05

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

指定连接类型,常见连接类型如下:

  • host:表示TCP/IP连接。

    重要

    除指定服务器外,默认仅监听在本地环回地址localhost上的TCP/IP连接。

  • local:表示支持使用Unix域套接字的连接,适用于同一台机器上的连接。

  • hostssl:使用TCP/IP建立连接,且需要使用SSL加密的连接。

  • hostnossl:与hostssl行为相反,仅匹配在TCP/IP上尝试不使用SSL的连接。

DATABASE

指定适用的数据库,取值范围如下:

  • all:匹配所有数据库。

  • 数据库名称:指定特定目标数据库名。

  • sameuser:允许请求的用户连接与其名称相同的数据库。

  • samerole:允许请求的用户连接与其角色相同的数据库。对于一个用于samerole目的的角色,若超级用户不是该角色的显式成员,则不会使用。

  • replication:当请求一个物理复制时该记录进行相应匹配。这是一个特定的PolarDB数据库名称,可通过逗号分隔的方式指定多个数据库,也可以通过在文件名前使用@来指定一个包含数据库名的文件。

USER

指定允许连接的用户,取值范围如下:

  • all:匹配所有用户。

  • 特定用户名:指定特定用户名。

  • 角色名:指定特定角色。

ADDRESS

指定允许访问的IP地址范围。支持IPv4IPv6,可以使用如下两种形式来表示:

  • IP地址/掩码长度。例如,10.10.0.0/24

  • IP地址 子网掩码。例如,10.10.0.0 255.255.255.0

说明
  • 对于子网掩码,255.0.0.0表示IPv4 CIDR掩码长度 8,255.255.255.255表示CIDR掩码长度32。这些域只适用于hosthostsslhostnossl记录。

  • IPv4格式给出的IP地址会匹配那些拥有对应地址的IPv6连接,例如,127.0.0.1将匹配IPv6地址::ffff:127.0.0.1

METHOD

指定连接时使用的认证方法。支持Trust认证口令认证证书认证认证方式。

[AUTH-OPTIONS]

可选,用于身份验证方法的附加选项。例如,证书认证时使用的用户名映射map信息。

认证方式

认证方式

参数值

说明

认证方式

参数值

说明

Trust认证

trust

采用这种认证模式时,即完全信任从服务器本机使用psql且不指定-U参数的连接,此时不需要密码。

口令认证

SCRAM-SHA-256

要求执行SCRAM-SHA-256加密认证来验证用户的口令。

MD5

要求执行MD5加密认证来验证用户的口令。

password

要求客户端提供一个未加密的口令进行认证。由于口令以明文形式在网络上发送,建议您在可信的网络上使用这种方式。

证书认证

cert

使用SSL客户端证书认证。

Trust认证

使用Trust认证方式时,PolarDB信任所有连接到服务器的客户端,允许以任意数据库用户名无密码访问数据库。这种认证方式虽然简化了连接流程,但存在安全风险,建议仅在受保护的环境(如通过防火墙、IP 白名单或其他安全机制)中使用。

在单用户的本地环境中,Trust认证方式非常简便,且pg_hba.conf文件中databaseuser列所设置的限制仍然有效。这些限制可以约束用户能够访问的数据库或使用的用户名。如需在多用户机器进行访问可使用以下方式控制访问权限:

  • 文件系统权限:限制对服务器的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认证
  • 口令认证
  • 证书认证
  • 认证失败常见问题
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等