暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGuass客户端工具

原创 Hello world 云和恩墨 2022-12-22
448

openGuass客户端工具

1、客户端连接

客户端进程申请连接数据库,Gaussdb监听连接,通过连接认证后,fork出后台进程backend process worker代替客户端进程操作数据库。

建立会话的过程
第一步:客户端发起请求
第二步:该阶段由主服务Gaussdb进程负责服务器是否接受客户端的host通信认证服务器对客户端进行身份鉴别。
第三步:阶段二通过之后,主服务进程为该客户端单独fork一个客户端工作进程worker
第四步:客户端与worker进程建立通信连接,由worker进程负责后续所有的客户端请求操作,直至客户端退出后,该worker进程消失。

客户端与数据库通过线程池连接

openguass服务响应流程

openguass数据库连接方法

连接数据库的客户端工具包括: 命令行工具gsql、图形工具Data Studio和应用程序接口(如ODBC和JDBC)。

1、gsql是openGauss提供在命令行下运行的数据库连接工具,可以通过此工具连接服务器并对其进行操作和维护,除了具备操作数据

库的基本功能,gsql还提供了若干高级特性,便于用户使用。例如,可以交互式地输入、编辑、执行SQL语句。

2、 Data Studio是一个集成开发环境(IDE),帮助数据库开发人员便捷地构建应用程序,以图形化界面形式提供数据库关键特性。

3、用户可以使用标准的数据库应用程序接口(如ODBC和JDBC),开发基于openGauss的应用程序。

2、gsql工具基本功能

数据库在部署成功后,需要通过一些工具来便捷地连接数据库,对数据库进行各种操作和调试。gsql是openGauss提供的在命令行下运行的数据库连接工具,用户可以通过该工具连接服务器并对其进行操作和维护,除了具备操作数据库的基本功能,gsql还提供了若干高级特性,便于用户使用。

2.1 gsql工具基本参数分类

获取数据库连接信息

gsql -d postgres -p 26000 -U user1 -W 'huawei@1234' -h 192.168.0.11 -r

客户端工具通过数据库主节点连接数据库。

因此连接前,需获取数据库主节点所在服务器的IP地址及数据库主节点的端口号信息。

1、服务器的IP地址:数据库主节点实例的服务器IP地址分别为192.168.0.11。

 

gs_om -t status --detail

node node_ip instance state

-----------------------------------------------------------------------------------

1 node1 192.168.0.11 6001 /opt/huawei/install/data/dn01 P Primary Normal

2、数据库主节点的端口号:数据库主节点数据路径下的postgresql.conf文件中查看端口号信息。示例如下:26000为数据库主节点

的端口号。

cat /opt/huawei/install/data/dn01/postgresql.conf | grep port

port = 26000 # (change requires restart)

gsql工具:连接参数

gsql工具:其它参数

2.2gsql工具特性

命令自动补齐:

根据openGauss语法规则,gsql支持使用Tab键进行命令的自动补齐,当编译时指定了选项--with-readline,且客户端连接时指定

“-r”参数,此功能被打开。例如,crea后键入Tab,gsql会将其补齐为create。

说明

● 支持数据库SQL关键字如select、create、table等。● 支持表名、视图名等自定义标识符的补齐。

● 元命令选项'S'、'+'不支持自动补齐。● 对表进行补齐时,只有前缀是"pg_"才会补齐系统表。

● 不支持建表时字段类型的补齐。● select后不支持任何补齐。● 不支持常量与宏的自动补齐。

● select * from a,b... 不支持第二个开始表的自动补齐, insert into t1 (col1,col2, ...) 不支持第二个列的自动补齐。

● 不支持create tablespace语句with以及with后参数的自动补齐。

● 创建索引不支持local、global的自动补齐,修改索引不支持rebuild自动补齐。

● set语句仅支持自动补全user和superuser级别的参数。● 不支持if exists的自动补齐。

● 不支持表名.列名的自动补齐,如alter sequence <name> owned bytableName.colName,owned by。

● 不支持自定义操作符自动补齐。使用复制粘贴这种方式输入命令,如果粘贴的命令里面有TAB键有可能会使输入命令的格式错乱,

无法正常执行。

客户端操作历史记录、超时

1、“-r”参数:

gsql支持客户端操作历史记录,当客户端连接时指定“-r”参数,此功能被打开。可以通过\set设置记录历史的条数,

例如,\set HISTSIZE50,将记录历史的条数设置为50,\set HISTSIZE 0,不记录历史。

说明

● 客户端操作历史记录条数默认设置为32条,最多支持记录500条。当客户端

交互式输入包含中文字符时,只支持UTF-8 的编码环境。

● 出于安全考虑,将包含PASSWORD、IDENTIFIED敏感词的记录识别为敏感

信息,不会记录到历史信息中,即不能通过上下翻回显。

2、session_timeout参数

缺省情况下,客户端连接数据库后处于空闲状态时会根据参数session_timeout的默认值自动断开连接。

默认10min。如果要关闭超时设置,设置参数session_timeout为0即可

获取psql的SQL命令帮助

 

postgres=# \help CREATE DATABASE

Command: CREATE DATABASE

Description: create a new database

Syntax:

CREATE DATABASE database_name

[ [ WITH ] {[ OWNER [=] user_name ]|

[ TEMPLATE [=] template ]|

[ ENCODING [=] encoding ]|

[ LC_COLLATE [=] lc_collate ]|

[ LC_CTYPE [=] lc_ctype ]|

[ DBCOMPATIBILITY [=] compatibility_type ]|

[ TABLESPACE [=] tablespace_name ]|

[ CONNECTION LIMIT [=] connlimit ]}[...] ];

实验:

gsql工具的使用

测试环境准备

 

$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -r

create table t1( id int,name varchar(20));

insert into t1 values(1,'Tom');

insert into t1 values(2,'Jerry');

select * from t1;

 

[omm@db1 ~]$ cat >>test.sql<<EOF

insert into t1 values(3,'user1');

EOF

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -f test.sql

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -c "select * from t1;"

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -l

[omm@db1 ~]$ echo > test.sql && cat >>test.sql<<EOF

insert into t1 values(4,'John');

select * from t1 ;

insert into t1 values(5,'Scott');

EOF

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -1 -f test.sql

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -c "select * from t1;"

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -f test.sql

[omm@db1 ~]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -c "select * from t1;"

实验:gsql工具的使用

查询输出至指定文件

 

[omm@db1 db1]$ gsql -d postgres -p 26000 -U omm -W 'gauss@123' -r -L /home/omm/test1.log

select * from t1;

create user user1 identified by 'gauss@123';

postgres=# \! cat /home/omm/test1.log

输出格式化

 

gsql -d postgres -p 26000 -U omm -W 'gauss@123' -r -A

select * from t1;

gsql -d postgres -p 26000 -U omm -W 'gauss@123' -r -A -t

select * from t1;

gsql -d postgres -p 26000 -U omm -W 'gauss@123' -r -A -t -F ,

select * from t1;

2.3 psql元命令定义及其分类

psql元命令定义及其分类

1、定义:元命令就是在gsql里输入的任何以不带引号的反斜杠开头的命令。

2、分类:

元命令分为: 一般的元命令、

表 查询缓存区元命令、

表 输入/输出元命令、

表 显示信息元命令、

表 格式化元命令、

表 连接元命令、

表 操作系统元命令、

表变量元命令

表 大对象元命令

psql元命令的帮助

gsql里的元命令就是那些输入的任何以不带引号的反斜杠开头的命令。执行gsql元命令:元命令可以帮助管理员查看数

据库对象的信息、查询缓存区信息、格式化SQL输出结果,以及连接到新的数据库等。

 

postgres=# \?

General

\copyright show openGauss usage and distribution terms

\g [FILE] or ; execute query (and send results to file or |pipe)

\h(\help) [NAME] help on syntax of SQL commands, * for all commands

\parallel [on [num]|off] toggle status of execute (currently off)

\q quit gsql

Query Buffer

\e [FILE] [LINE] edit the query buffer (or file) with external editor

\ef [FUNCNAME [LINE]] edit function definition with external editor

\p show the contents of the query buffer

\r reset (clear) the query buffer

\w FILE write query buffer to file

Input/Output

\copy ... perform SQL COPY with data stream to the client host

\echo [STRING] write string to standard output

\i FILE execute commands from file

psql常用的元命令

实验:psql元命令

实验环境准备:

 

postgres=# create database testdb10 with encoding='UTF-8';

postgres=# create tablespace tbs1 relative location 'tablespace/tbs1';

postgres=# create user user1 with sysadmin identified by 'opengauss@123456';

postgres=# create schema sch_user1 authorization user1;

postgres=# create table sch_user1.tt(id int primary key,name varchar(20) check (name=upper(name)));

postgres=# create table sch_user1.lt(id int,content CLOB);

postgres=# create view sch_user1.v1 as select * from sch_user1.tt where id < 2;

postgres=# create materialized view sch_user1.mv1 as select * from sch_user1.tt where id < 2;

postgres=# create sequence seq1 start 1 maxvalue 99999;

postgres=# CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer

AS 'select $1 + $2;'

LANGUAGE SQL

IMMUTABLE

RETURNS NULL ON NULL INPUT;

postgres=# insert into sch_user1.tt values(1,'西红柿');

postgres=# insert into sch_user1.tt values(2,'黄瓜');

实验:psql元命令

实验环境准备:

\l
\d
\du
\dn
\di
\dv

3、客户端认证策略

如果主机需要远程连接数据库,必须在数据库系统的配置文件pg_hba.conf中增加此主机的信息,并且进行客户端接入认证。 配置

文件(默认名称为pg_hba.conf)存放在数据库的数据目录里。

hba(host-based authentication)表示是基于主机的认证。

三种认证方式

1、基于主机的认证:

服务器端根据客户端的IP地址、用户名及要访问的数据库 来查看配置文件从而判断用户是否通过认证。

2、口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。

3、SSL加密:使用OpenSSL(开源安全通信库)提供服务器端和客户端安全连接的环境。

pg_hba.conf书写规则:

1、“pg_hba.conf”文件的格式是一行写一条信息,表示一个认证规则,空白和注释(以#开头)被忽略。

2、每个认证规则是由若干空格和/,空格和制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。一条记录不能跨行存

在。

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]

说明:

配置文件参考官方文档:07 开发者指南-5.1 客户端接入认证-5.1.2 配置文件参考

条目间的优先级 :

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

在配置“pg_hba.conf”文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。

2、openGauss和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在

扩容前删除,扩容成功后再进行配置。

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

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

● 靠后的记录有比较宽松的连接参数和比较强的认证方法。

支持如下几种认证方式:

● trust

● reject

● md5

不推荐使用,默认不支持,可通过password_encryption_type参数配置原因MD5加密算法安全性低,存在安全风险。

建议:使用更安全的加密算法。

● sha256

● cert

● gss(仅用于openGauss内部节点间认证)

系统默认:

配置文件中: #password_encryption_type = 2 #Password storage type,

0 is md5 for PG,

1 is sha256 + md5,

2 is sha256 only

认证方法的选择

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

DataStudio不支持trust的认证方式,请将认证方式设置为sha256。

pg_hba.conf条目说明:

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.0/24网段的主机上连接到任意数据库,使用Kerberos认证方式,当前版本暂不支持客户端kerberos认证。

host all all 10.10.0.0/24 gss include_realm=1 krb_realm=HADOOP.COM

3.1 客户端认证策略设置

1、用户权限对远程用户登录的影响:

一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中的规则检查,还必须要有该数据库上的CONNECT权限。

如果希望控制某些用户只能连接到指定数据库,赋予/撤 销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。

2、使用gs_guc设置客户端认证策略

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

Total instances: 2. Failed instances: 0.

Success to perform gs_guc!

3、修改pg_hba.conf设置客户端认证策略

3.2确认连接信息

 

gsql -d postgres -p 26000 -U user1 -W 'huawei@1234' -h 192.168.0.11 -r

客户端工具通过数据库主节点连接数据库。

因此连接前,需获取数据库主节点所在服务器的IP地址及数据库主节点的端口号信息。

1、服务器的IP地址:数据库主节点实例的服务器IP地址分别为192.168.0.11。

 

gs_om -t status --detail

node node_ip instance state

-----------------------------------------------------------------------------------

1 node1 192.168.0.11 6001 /opt/huawei/install/data/dn01 P Primary Normal

2、数据库主节点的端口号:数据库主节点数据路径下的postgresql.conf文件中查看端口号信息。示例如下:26000为数据库主节点

的端口号

 

cat /opt/huawei/install/data/dn01/postgresql.conf | grep port

port = 26000 # (change requires restart)

4、使用 gsql 本地连接

gsql是openGauss提供的在命令行下运行的数据库连接工具。此工具除了具备操作数据库的基本功能,还提供了若干高级特性,便

于用户使用。

连接方法:

步骤1 以操作系统用户omm登录数据库主节点。

步骤2 连接数据库。

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

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

[omm@node1 ~]$ gsql -d postgres -p 26000

gsql ((openGauss 2.0.0 build 78689da9) compiled at 2021-03-31 21:04:03 commit 0 last mr )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

postgres=#

注意事项:

缺省情况下,客户端连接数据库后处于空闲状态时会根据参数session_timeout的默认值自动断开连接。如果要关闭超时设置,设置参数

session_timeout为0即可。

4.1 配置白名单

通过 gs_guc 配置白名单:

步骤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"

说明:

● -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”文件中添加了一条规则,用于对连接数据库主节点的客户端进行鉴定。

4.2 安装 gsql 客户端并连接数据库

1、安装 gsql 客户端:

在客户端机器上,上传客户端工具包并配置gsql的执行环境变量。

步骤1 以root用户登录客户端机器。

步骤2 创建“/tmp/tools”目录。

mkdir /tmp/tools

步骤3 获取软件安装包中的“openGauss-2.0.0-CentOS-64bit-Libpq.tar.gz”上传到“/tmp/tools”路径下。

步骤4 解压文件。cd /tmp/tools

tar -zxvf openGauss-2.0.0-CentOS-64bit-Libpq.tar.gz

步骤5 登录数据库主节点所在的服务器,拷贝数据库安装目录下的bin目录到客户端主机的

“/tmp/tools”路径下,随后继续登录客户端主机执行步骤6操作。

scp -r /opt/huawei/install/app/bin root@10.10.0.30:/tmp/tools

其中,/opt/huawei/install/app为clusterconfig.xml文件中配置的{gaussdbAppPath}路径,10.10.0.30为客户端主机ip。

步骤6 登录客户端所在主机,设置环境变量。

打开“~/.bashrc”文件。

vi ~/.bashrc

export PATH=/tmp/tools/bin:$PATH

export LD_LIBRARY_PATH=/tmp/tools/lib:$LD_LIBRARY_PATH

步骤7 使环境变量配置生效。

source ~/.bashrc

2、连接数据库。

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

gsql -d postgres -h 10.10.0.11 -U jack -p 26000 -W Test@123

jack为连接数据库的用户,26000为数据库主节点的端口号,Test@123为连接数据库用户jack的密码。

5、客户端连接数据库

下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。

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

gs_guc reload -D /opt/huawei/install/data/dn01/ -h "host all all 192.168.0.1/32 sha256"

这条命令在数据库主节点实例对应的“pg_hba.conf”文件中添加了一条规则,用于对连接数据库主节点的客户端进行鉴定。

说明:

● -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算法加密。

常见问题

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论