关键字:
KingbaseES、ksql、oracle
1.产品新特性
Ksql 一般的登录方式包括,Ksql 是一个常规 KingbaseES 客户端应用。为了连接到数据库,ksql需要知道连接的目标数据库的名称、主机名以及该服务器的服务的端口号。在这个过程中,在实际的应用过程中,服务器可能会使用较长的密码字符串,在登录时较为不便。kingbaseES支持ksql使用”用户名/密码@服务名”的方式来登录ksql方便后期产品的实际使用。在实际的应用中,需要先在本地~/.sys_service.conf文件中配置端口等信息,比如:
[kingbase]
dbname=test
user=system
password=123@456
port=54449
然后可以通过 ./ksql system/@kingbase 的方式来对ksql进行登录。登录过程中如果设置了密码,则ksql端输入的密码优先级更高。这种方式使得ksql操作具有更大的灵活性,应用场景更加广泛。
2.Oracle中ksql 通过服务进行登录
语法格式: ksql username[/password][@[//][host][:port/]servicename]
参数说明:
- username: 表示用户名
- password: 表示用户密码
- servicename: 表示服务名称
- host: 表示网络地址 IP
- port: 表示端口号
其中 host、port 和 servicename 等信息是在 sys_service.conf 文件中配置的内容。
用户名和密码中不含有特殊字符字符如 \、/或引号等特殊时,在终端可以直接输入,不需要被引号引起来。这样的密码不会对命令产生歧义,可以正常的解析。kes将连接串末尾找到最后一个@符号,在解析密码时将这个符号以前的字符串都视为密码。所以含有@符号的密码也能正常解析。
用户名或密码中含有‘\’特殊字符时,需要使用引号将其引起来,否则会导致命令中的特殊字符和密码的字符产生冲突。
3.通过shell 进行ksql 的登录
DELETE FROM
当需要管理大量的服务,可以设置脚本文件对大量的机器进行验证处理登录ksql进行验证。
#!/bin/bash
while read -r line
do
uplist=(${line//,/})
dbuser=${uplist[0]}
dbpw=${uplist[1]}
dbport=${uplist[2]}
dbhost=${uplist[3]}
command5="$path ${dbuser}/${dbpw}@kingbase"
#command5="$path ${dbuser}/@$dbhost:$dbport/kingbase"
#echo \\\q | eval $command5
done < userpw_list
同样,可以借助linux的expect 工具进行交互。实例如下:
#!/usr/bin/expect
spawn ./ksql -U system test -p 51125 -W -f 1.sql
expect "Password:"
send "123456\r"
expect eof
#!/bin/bash
while read -r line
do
uplist=(${line//,/})
dbuser=${uplist[0]}
dbpw=${uplist[1]}
echo "#!/usr/bin/expect" > expect.sh
eval echo "spawn ./ksql $dbuser/\'$dbpw\'@kingbase" >> expect.sh
echo 'expect "help"' >> expect.sh
echo 'send "exit \r"' >> expect.sh
echo 'expect eof ' >> expect.sh
chmod +x expect.sh
cat expect.sh
./expect.sh
done < userpasswd
值得注意的是,Port 如果包含在单引号中,service 信息将不能被正确的解析,Host 信息包含在引号里,service 信息不能被正确解析,会导致登录失败。如果用户名或者是用户密码包含 @ 或/等特殊字符,在脚本中,shell可能无法正确解析密码中包括的特殊字符如引号等。建议使用如下方式:’” username”/” password” @servicename。将用户名和密码明确的分离开来。 更多信息,参见https://help.kingbase.com.cn/v8/index.html