如果主机需要远程连接数据库,必须在数据库系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(默认名称为pg_hba.conf)存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。
1.以操作系统用户omm登录数据库主节点。
2.配置客户端认证方式,允许客户端以“jack”用户连接到本机,此处远程连接禁止使用“omm”用户(即数据库初始化用户)。
例如,下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。
gs_guc set -N all -I all -h "host all jack 10.10.0.30/32 sha256"
说明:
- 使用“jack”用户前,需先本地连接数据库,并在数据库中使用如下语句建立“jack”用户:
CREATE USER jack PASSWORD 'Test@123';
- -N all表示openGauss的所有主机。
- -I all表示主机的所有实例。
- -h表示指定需要在“pg_hba.conf”增加的语句。
- all表示允许客户端连接到任意的数据库。
- jack表示连接数据库的用户。
- 10.10.0.30/32表示只允许IP地址为10.10.0.30的主机连接。此处的IP地址不能为openGauss内的IP,在使用过程中,请根据用户的网络进行配置修改。32表示子网掩码为1的位数,即255.255.255.255。
- sha256表示连接时jack用户的密码使用sha256算法加密。
这条命令在数据库主节点实例对应的“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”文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。openGauss和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在扩容前删除,扩容成功后再进行配置。
因此对于认证规则的配置建议如下: 靠前的记录有比较严格的连接参数和比较弱的认证方法。靠后的记录有比较宽松的连接参数和比较强的认证方法。
说明:
- 一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中的规则检查,还必须要有该数据库上的CONNECT权限。如果希望控制某些用户只能连接到指定数据库,赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。
- 对应openGauss外部客户端连接,trust为不安全的认证方式,请将认证方式设置为sha256。
用户认证失败有很多原因,通过服务器返回给客户端的提示信息,可以看到用户认证失败的原因。常见的错误提示请参见表1。
表 1 错误提示
问题现象 | 解决方法 |
---|---|
用户名或密码错误:FATAL: invalid username/password,login denied |
这条信息说明用户名或者密码错误,请检查输入是否有误。 |
连接的数据库不存在:FATAL: database "TESTDB" does not exist |
这条信息说明尝试连接的数据库不存在,请检查连接的数据库名输入是否有误。 |
未找到客户端匹配记录:FATAL: no pg_hba.conf entry for host "10.10.0.60", user "ANDYM", database "TESTDB" |
这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入用户的信息。 |
未找到客户端匹配记录:failed to connect 10.10.0.1:12000. |
这条信息说明无法连接到指定IP和端口的服务器,请联系数据库管理员检查pg_hba.conf配置文件里是否有配置对应IP白名单。 |
连接时的用户名不可以包含@字符@ can't be allowed in username |
这条报错说明客户端在连接数据库时使用了包含@的用户名,这是不允许的。 |
TYPE DATABASE USER ADDRESS METHOD
"local" is for Unix domain socket connections only
#表示只允许以安装时-U参数指定的用户从服务器本机进行连接。
local all all trust
IPv4 local connections:
#表示允许jack用户从10.10.0.50主机上连接到任意数据库,使用sha256算法对密码进行加密。
host all jack 10.10.0.50/32 sha256
#表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用sha256算法对密码进行加密,并且经过SSL加密传输。
hostssl all all 10.10.0.0/24 sha256
#表示禁止任何用户从10.10.0.1/32网段的主机上连接到任意数据库。
host all all 10.10.0.1/32 reject
点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!