【GaussDB数据库----连接】

1. 确认连接信息

客户端工具通过CN连接数据库。因此连接前,需获取CN所在服务器的IP地址及CN的端口号信息。客户端工具可以通过任何一个CN连接数据库。

  1. 以操作系统用户omm登录安装有MPPDB服务的任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。

  2. 使用“gs_om -t status --detail”命令查询集群各实例情况。

gs_om -t status --detail
[ Coordinator State ]

node        node_ip         instance                                  state
-----------------------------------------------------------------------------
1  plat1 192.168.0.11  5001 /srv/BigData/mppdb/data1/coordinator Normal
2  plat2 192.168.0.12  5002 /srv/BigData/mppdb/data1/coordinator Normal
3  plat3 192.168.0.13  5003 /srv/BigData/mppdb/data1/coordinator Normal
  1. 确认端口号。
    在数据路径下的postgresql.conf文件中查看端口号信息(步骤2中获取到的路径)
cat /srv/BigData/mppdb/data1/coordinator/postgresql.conf | grep port
port = 25308    # (change requires restart)

2. 配置服务端远程连接

进行远程连接前,需要在所有部署了CN的机器上设置允许客户端访问数据库,并配置远程连接。

以下步骤需要在集群的每个CN所在主机上执行。

以操作系统用户omm登录CN所在主机,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。

1. 配置客户端接入认证

如果主机需要远程连接数据库,必须在数据库系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(默认名称为pg_hba.conf)存放在数据库的数据目录里。GaussDB支持如下三种认证方式:

基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。
SSL加密:使用VPP(通用协议平台)提供服务器端和客户端安全连接的环境。

配置客户端认证方式,允许客户端以“jack”用户连接到本机,此处远程连接禁止使用“omm”用户。例如,下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。

gs_guc set -Z coordinator -N all -I all -h "host all jack 10.10.0.30/32 sha256"

参数说明

使用“jack”用户前,需先本地连接数据库,并在数据库中使用如下语句建立“jack”用户:
  CREATE USER jack PASSWORD 'Gaussdba@Mpp';
-Z coordinator表示实例类型为coordinator。
-N all表示集群的所有主机。
-I all表示主机的所有实例。
-h表示指定需要在“pg_hba.conf”增加的语句。
all表示允许客户端连接到任意的数据库。
jack表示连接数据库的用户。
10.10.0.30/32表示只允许IP地址为10.10.0.30的主机连接。此处的IP地址不能为集群内的IP,在使用过程中,请根据用户的网络进行配置修改。32表示子网掩码为1的位数,即255.255.255.255
sha256表示连接时jack用户的密码使用sha256算法加密。

这条命令在所有CN实例对应的“pg_hba.conf”文件中添加了一条规则,用于对连接CN的客户端进行鉴定。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里的记录的,所以这些记录的顺序是非常关键的

a.在配置“pg_hba.conf”文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。GaussDB 集群和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在扩容前删除,扩容成功后再进行配置。

b.若服务端pg_hba.conf文件配置了hostssl,postgresql.conf中必须开启SSL认证模式。

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

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

e.对应集群外部客户端连接,trust为不安全的认证方式,请将认证方式设置为sha256。

常见异常
在这里插入图片描述
示例

TYPE  DATABASE        USER            ADDRESS                 METHOD

"local" is for Unix domain socket connections only
#表示只允许以安装时-U参数指定的用户从服务器本机进行连接。
local   all             all                                     trust
IPv4 local connections:
#表示允许omm用户从10.10.0.50主机上连接到任意数据库,使用sha256算法对密码进行加密。
host    all           omm             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.0/24网段的主机上连接到任意数据库,使用Kerberos认证方式。
host    all             all             10.10.0.0/24            gss         include_realm=1        krb_realm=HADOOP.COM

2. [可选]配置listen_addresses

如果是双平面部署,GaussDB 部署在数据库业务平面,远程连接的客户端在客户的业务网络。必须使GaussDB 的CN监听CN所在服务器的客户业务网络IP(由于部署在数据库业务平面,默认只监听数据库业务平面IP),远程客户端才能够连接GaussDB 的CN。使用如下命令查看CN目前的listen_addresses配置。

gs_guc check -Z coordinator -I all -c “listen_addresses”

expected guc information: plat1: listen_addresses=NULL: [/gaussdb/data/data_cn/postgresql.conf]
gs_guc check: plat1: listen_addresses='localhost, 192.168.0.100': [/gaussdb/data/data_cn/postgresql.conf]

Total GUC values: 1. Failed GUC values: 0.
The value of parameter listen_addresses is same on all instances.
    listen_addresses='localhost, 192.168.0.100'

使用如下命令把要添加的IP追加到listen_addresses后面,多个配置项之间用英文逗号分隔。例如,追加IP地址10.11.12.13

gs_guc set -I all -Z coordinator -c "listen_addresses='localhost,192.168.0.100,10.11.12.13'"

执行如下命令重启集群

gs_om -t stop && gs_om -t start

3. 使用gsql连接

1. 本地连接数据库

  1. 以操作系统用户omm登录CN所在主机,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。

  2. 数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。

执行如下命令连接数据库。

gsql -d postgres -p 25308

其中postgres为需要连接的数据库名称,25308为CN的端口号。请根据实际情况替换。连接成功后,系统显示类似如下信息:

gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

postgres=#

a. omm用户是管理员用户,因此系统显示“DBNAME=#”。若使用普通用户身份登录和连接数据库,系统显示“DBNAME=>”。

b. “Non-SSL connection”表示未使用SSL方式连接数据库。如果需要高安全性时,请使用用SSL进行安全的TCP/IP连接。

退出数据库。

\q

2. 远程连接数据库

1.完成远程连接配置,操作步骤参见配置服务端远程连接。
2.安装并配置GaussDB 200客户端工具。
3.数据库安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。

gsql -d postgres -h 10.10.0.11 -U jack -p 25308 -W Gaussdba@Mpp

postgres为需要连接的数据库名称,10.10.0.11为CN所在的服务器IP地址,jack为连接数据库的用户,25308为CN的端口号,Gaussdba@Mpp为连接数据库用户jack的密码。

注意:不在同一网段时,-h指定的IP地址应为Manager界面上所设的“mppdb.coo.cooListenIp2”(应用访问IP)的取值。禁止使用omm用户进行远程连接数据库。

4. 使用psql连接

当前数据库支持使用开源PostgreSQL的客户端psql连接,连接参数与gsql类似。使用psql连接前请确认完成以下步骤:

export PATH=/opt/pgsql/bin:$PATH
/opt/pgsql为PostgreSQL的安装目录,psql存放在其安装目录下的bin文件夹。

添加PostgreSQL的lib库目录到环境变量LD_LIBRARY_PATH,确保psql执行时使用的是PostgreSQL的动态库。

export LD_LIBRARY_PATH=/opt/pgsql/lib:$LD_LIBRARY_PATH
/opt/pgsql/lib为PostgreSQL的lib库目录。

本地连接数据库时,需添加环境变量PGHOST,指向数据库guc参数unix_socket_directory的值。

a.确保执行psql的本地用户对该路径下的文件有读写权限。
b.如果没有读写权限,可使用-h 127.0.0.1连接数据库。

psql -h 127.0.0.1 -p 25308 -d postgres -U jack

postgres为需要连接的数据库名称,jack为连接数据库的用户,25308为CN的端口号。
注意:远程连接数据库时,在确认以上步骤的同时请确保完成远程连接配置
在这里插入图片描述
常见问题处理
authentication method 10 not supported
使用开源客户端碰到此问题,可能原因:数据库中存储的口令校验只存储了SHA256格式哈希,而开源客户端只识别MD5校验,双方校验方法不匹配报错。或者,是因为远程连接时-U传入的用户不存在。

a.数据库并不存储用户口令,只存储用户口令的哈希码。
b.早期版本(V100R002C80SPC300之前的版本)的数据库只存储了SHA256格式的哈希,并未存储MD5的哈希,所以无法使用MD5做用户口令校验。
c.新版本(V100R002C80SPC300及之后版本)的数据库当用户更新用户口令或者新建用户时,会同时存储两种格式的哈希码,这时将兼容开源的认证协议。
d.但是当老版本升级到新版本时,由于哈希的不可逆性,所以数据库无法还原用户口令,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做口令认证。

要解决该问题,可以更新用户口令(ALTER USER);或者新建一个用户(CREATE USER),赋于同等权限,使用新用户连接数据库。

undefined symbol: pqsignal
使用客户端碰到此问题,可能原因:未将PostgreSQL的lib库目录添加到环境变量LD_LIBRARY_PATH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章