前言
在Kingbase数据库运行维护中,经常用到ksql工具登录数据库,本地免密登录可以让我们维护数据库时,摆脱每次登库输入用户名密码;本文简述KingbaseES V8数据库2种配置免密登录的方法。
KingbaseES免密登录配置方法一:修改sys_hba.conf
sys_hba简介:
1、sys_hba.conf是Kingbase数据库控制客户端认证的主要配置文件,位于主数据目录data中;
2、修改该配置文件的参数,须重启 KES 服务
3、该配置文件是普通文本文件,可以用vi等文本编辑器修改
4、空白行将被忽略;以#开头行的是注释行
5、以行为单位,每行代表一条访问规则,不允许/不支持跨行的记录存在
6、一行记录包含以下字段:连接类型 库名 用户名 客户端 IP 或 IP 段 认证方式
7、各字段之间用空格分隔
配置文件sys_hba.conf内容示例:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5
host all all ::0/0 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication SYSTEM md5
#host replication SYSTEM 127.0.0.1/32 md5
#host replication SYSTEM ::1/128 md5
TYPE 表示主机类型,值可能为:
1、 local
表示 unix-domain 的 socket 连接
2、 host
表示 TCP/IP socket (SSL 和非 SSL)
3、 hostssl
表示 SSL 加密的 TCP/IP socket
4、 Hostnossl 表示不使用 SSL 的连接
DATABASE 表示数据库名称,值可能为
1、all
,匹配所有数据库(不匹配 replication)
2、sameuser
,与用户同名的库
3、replication
,允许流复制连接
4、 数据库名称
5、多个数据库名称用 逗号
分隔
6、@前缀可声明一个包含数据库名的文件清单
USER 表示用户名称,值可以为
1、all
表示可以匹配任何用户。
2、一个用户名
3、多个用户时,可以用 逗号隔开
4、+前缀可声明一个组
5、@前缀可声明一个包含用户名的文件清单
ADDRESS 该参数可以是
1、主机名称
(以 .
开头,)
2、IP/MASKbit
如 192.168.1.100/32 表示一个 IP
如 192.168.1.0/24 表示一个网段
3、samenet
匹配同网段任意 IP 地址
METHOD 一般常用 5 种
1、trust 无条件地允许连接
2、reject 无条件地拒绝连接
3、md5 执行MD5 加密密码验证
4、SCRAM-SHA-256加密密码认证
5、password 未加密的口令进行认证
6、ident 允许客户端上的特定操作系统用户连接到数据库
本地免密配置方法:修改sys_hba.conf中的local行为:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
修改完后重启数据库
免密登录方法二:配置密码文件
密码文件免密的原理:ksql登录时,会去数据库安装用户家目录下的密码文件.encpwd中读取账户,从而登入数据库;密码文件为普通文本文件,可以vi创建,也可以使用kingbase提供的工具sys_encpwd工具来生成密码文件。
sys_pwd配置工具使用方法:
该工具包含5个参数,5个参数均需要输入才能配置成功
参数说明:
-H, --hostname=主机地址,允许单主机地址匹配和全匹配,全匹配时使用*指定
-P, --portnum=端口号,仅允许单端口匹配
-D, --database=数据库名,允许单数据库匹配和全匹配,全匹配时使用*指定
-U, --user=用户名,仅允许单用户匹配
-W, --password=用户对应的密码,仅允许单用户匹配
note:
当前四个参数输入与原文件中的某一条记录完全相同时,会修改该条记录相应的密码,否则生成一条新的记录。
示例:
1、创建用户u1并指定密码,用ksql测试登录需要输入密码
test=# create user u1 with password '123456';
CREATE ROLE
test=# \q
kingbase@ubuntu:~$ ksql -Uu1 test
Password for user u1:
ksql (V008R003C002B0340)
Type "help" for help.
test=>
2、使用sys_encpwd工具配置密码,指定u1用户可以从任意主机、任意端口,登录任意数据库
kingbase@ubuntu:~$ sys_encpwd -H \* -P \* -D \* -U u1 -W 123456
kingbase@ubuntu:~$ cat .encpwd
*:*:*:u1:MTIzNDU2
kingbase@ubuntu:~$
note: -H 指定任意主机,-P指定任意端口,-D指定任意库*,“*”为特殊字符,需要加\转义**
3、测试u1免密登录
kingbase@ubuntu:~$ ksql -Uu1 test
ksql (V008R003C002B0340)
Type "help" for help.
test=>
免密登录配置成功
.encpwd内容解析:
每一行代表一条访问规则记录,可以配置多条记录;每条记录包含5个字段,字段与字段之间用冒号“:”分隔,5个字段分别为:主机地址、端口号、库名、用户名、密码(加密格式);例:
127.0.0.1:54321:test:u1:MTIzNDU2
参考资料:
https://help.kingbase.com.cn/stage-api/profile/document/kes/v8r3/html/safety/safety-guide/safety-audit.html?highlight=encpwd