gaussdb 数据库用户和安全管理【客户端接入认证】【02】

1. 配置客户端接入认证

客户端接入认证是由一个配置文件(默认名称为pg_hba.conf)控制的,它存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。

背景信息
GaussDB支持如下三种认证方式,无论哪种认证方式,都需要配置pg_hba.conf文件。

  • 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
  • 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。
  • SSL加密:使用VPP SSL提供服务器端和客户端安全连接的环境。
  • pg_hba.conf文件的格式是一个记录写在一行,表示一个认证规则,空白和注释(#开头)被忽略。
  • 每个认证规则是由若干空格和/或制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。记录不能跨行存在。

pg_hba.conf文件中的每条记录可以是下面四种格式之一,四种格式的参数说明请参见配置文件参考。

local     DATABASE USER METHOD [OPTIONS]
host      DATABASE USER ADDRESS METHOD [OPTIONS]
hostssl   DATABASE USER ADDRESS METHOD [OPTIONS]
hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]

因为认证时系统是为每个连接请求顺序检查pg_hba.conf里的记录的,所以这些记录的顺序是非常关键的

因此对于认证规则的配置建议如下:

  • 靠前的记录有比较严格的连接参数和比较弱的认证方法。
  • 靠后的记录有比较宽松的连接参数和比较严格的认证方法。

说明:
一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中规则的检查,还必须要有该数据库上的CONNECT权限。如果希望限制哪些用户能够连接到哪些数据库,赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。

重启数据库服务使配置生效。

gs_ctl restart
  • 表1 错误提示
问题现象 解决方法
用户不存在或密码错误:
FATAL: invalid username/password,login denied
这条信息出现说明用户名或者密码错误,请检查输入是否有误。
连接的数据库不存在:
FATAL: database "TESTDB" does not exist
这条信息说明试图连接的数据库不存在,请检查连接的数据库名输入是否有误。
未找到客户端匹配记录:
FATAL: no pg_hba.conf entry for host "123.123.123.123",user "ANDYM", database "TESTDB"
这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入您的信息。
  • 任务示例
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#表示只允许以安装时-U参数指定的用户从服务器本机进行连接
local    	all             all                                     trust
# IPv4 local connections:
#表示允许gaussdba用户从10.10.10.2主机上连接到GaussDB的任意数据库,使用sha256算法对密码进行加密
host     	all           	gaussdba        10.10.10.2/32         	sha256
#表示允许任何用户从10.0.0.0/8网段的主机上连接到GaussDB的任意数据库,使用sha256算法对密码进行加密
hostssl    	all             all             10.0.0.0/8            	sha256

2. 配置文件参考

表1 参数说明

参数名称 描述 取值范围
local 表示这条记录只接受通过Unix域套接字进行的连接。没有这种类型的记录,就不允许Unix域套接字的连接。

只有在使用gsql从服务器本机连接,且不指定-U参数的情况才是通过Unix域套接字连接。
-
host 表示这条记录即接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。 -
hostssl 表示这条记录只接受一个经过SSL加密的TCP/IP套接字连接。 用SSL进行安全的连接,需要配置申请数字证书并配置相关参数,详细请参见用SSL进行安全的TCP/IP连接。
hostnossl 表示这条记录只接受一个普通的TCP/IP套接字连接。 -
DATABASE 声明记录所匹配的、允许访问的数据库。 all:表示该记录匹配所有数据库。
sameuser:表示如果被请求的数据库和请求的用户同名,则匹配。
samerole:表示请求的用户必须是一个与数据库同名的角色中的成员。
一个特定的数据库的名字,或者用逗号分隔的数据库列表。
说明:
“all”关键字与“replication”并不匹配,要访问replication必须用一个单独的记录。
USER 声明记录所匹配的、允许访问的数据库用户。 all:表明该记录匹配所有用户。
一个特定数据库用户的名字,或者用逗号分隔的用户列表。
前缀+用户角色,表示匹配任何直接或者间接属于这个角色的成员。
一个包含用户名的文件可以通过在文件名前面加前缀@来声明。文件中的用户列表以逗号或者换行符分隔。
ADDRESS 指定与记录匹配的、允许访问的IP地址范围。 支持IPv4和IPv6,可以使用如下两种形式来表示:

IP地址/掩码长度。例如,10.10.10.0/24
IP地址 子网掩码。例如,10.10.10.0 255.255.255.0
说明:
以IPv4格式给出的IP地址会匹配那些拥有对应地址的IPv6连接,比如127.0.0.1将匹配IPv6地址 ::ffff:127.0.0.1
METHOD 声明连接时使用的认证方法。 GaussDB支持如下几种认证方式,详细解释请参见表2:

trust
reject
md5(不推荐使用)
sha256
OPTIONS OPTION是认证的一个选择集,它的格式是NAME = VALUE。 可用的选项取决于认证方式。

说明:
GaussDB支持的认证方式不需要此参数。

表2 认证方式

认证方式 说明
trust 采用这种认证模式时,GaussDB只完全信任从服务器本机使用gsql、且不指定-U参数的连接,此时不需要口令。

trust认证对于单用户工作站的本地连接是非常合适和方便的,通常不适用于多用户环境。如果想使用这种认证方法,可利用文件系统权限限制对服务器的Unix域套接字文件的访问。要做这种限制有两个方法:

设置unix_socket_permissions参数和unix_socket_group参数。
设置unix_socket_directory,将Unix域套接字文件放在一个经过恰当限制的目录里。
注意:
设置文件系统权限只能帮助Unix域套接字连接,它不会限制本地TCP/IP连接。为保证本地TCP/IP安全,GaussDB不允许远程连接使用trust认证方法。
reject 无条件地拒绝连接。常用于过滤某些主机。
md5 要求客户端提供一个md5加密的口令进行认证。

小心:
不推荐使用md5认证,因为md5为不安全的加密算法,存在网络安全风险。GaussDB保留md5认证和密码存储,是为了便于第三方工具的使用(比如TPCC评测工具)。
sha256 要求客户端提供一个sha256算法加密的口令进行认证,该口令在传送过程中结合salt(服务器发送给客户端的随机数)的单向sha256加密,增强了安全性。

猜你喜欢

转载自blog.csdn.net/qq_42226855/article/details/109563367