最近对在鼓捣disql 希望可以自定义一些好玩的东西,来更快捷的实现登录,本方案借助于达梦提供的外部加密的密码文件,在登录的时候通过读取密码文件来实现代填用户名和密码。这种代填密码的方式在其他的软件中也有广泛的应用
概述
具体实现分两步,
- 配置用户名/密码组合的密码文件
- 配置disql实现自定义效果
配置密码文件
具体实现分为两步:一是创建 wallet 文件,用于存储服务名、用户名和登录密码。二是配置 dm_svc.conf 文件,设置 wallet 文件路径以及服务名对应的数据库连接地址(IP和 PORT)。配置完成后用户便可直接通过服务名成功登录数据库。 – 来自于达梦安全管理手册
[dmdba@VM-20-12-centos bin]$ ./dmmkstore -wrl /home/dmdba -create
DM Secret Store Tool: V8
Enter password:
mkstore-86508: Invalid password: Passwords length [9, 48], and contain uppercase and lowercase characters combined with numbers and special characters.
Enter password:
Enter password again:
mkstore-86509: Passwords did not match.
## 在这一步指定 密码文件的密码
[dmdba@VM-20-12-centos bin]$ ./dmmkstore -wrl /home/dmdba -create
DM Secret Store Tool: V8
Enter password:
Enter password again:
mkstore-86509: Passwords did not match.
[dmdba@VM-20-12-centos bin]$ ./dmmkstore -wrl /home/dmdba -create
DM Secret Store Tool: V8
Enter password:
Enter password again:
## 在这一步指定 用户/密码/服务名组合
[dmdba@VM-20-12-centos bin]$ ./dmmkstore -wrl /home/dmdba -createCredential dm_user 用户名 密码
DM Secret Store Tool: V8
Enter wallet password:
Create credential DM.security.client.connect_string1
[dmdba@VM-20-12-centos bin]$ ./dmmkstore -wrl /home/dmdba -listCredential
DM Secret Store Tool: V8
Enter wallet password:
List credential (index: connect_string username)
1: dm_user SYSDBA
## 自定义dm_svc.conf 文件目录
[dmdba@VM-20-12-centos ~]$ export DM_SVC_PATH="/home/dmdba"
[dmdba@VM-20-12-centos ~]$ cat dm_svc.conf
WALLET_LOCATION=(/home/dmdba) ## 此处需要指定密码文件所在的目录
TIME_ZONE=(+8:00)
dm_user=(127.0.0.1:5236)
[dm_user]
封装disql 工具实现自定义登录
也可以做一些复杂的封装实现更多的效果,具体就要看脑洞怎么样了
vim newdisql
chmod +x newdisql
### 将如下内容复制到newdisql中
PRG="$0"
PRGDIR=`dirname "$PRG"`
#################################################
## 我这里使用默认的DM_HOME变量,如果有单独的disql 工具目录,可以进行修改,并记得将disql 工具目录添加到LD_LIBRARY_PATH中
cd "$PRGDIR/.."
#DM_HOME=`pwd`
cd "$DM_HOME/bin"
#################################################
sed -i '4s/.*/dm_user=($1)/g' dm_svc.conf
"$DM_HOME/bin/disql" /@dm_user
## 也可以增加 rlwrap 实现上下左右键的使用
## rlwrap"$DM_HOME/bin/disql" /@dm_user
做一些登录效果
export DM_SQLPATH="/home/dmdba"
[dmdba@VM-20-12-centos ~]$ cat login.sql
set time on
column instance_name new_value instance_name
select instance_name from v$instance;
column user_name new_value user_name
select user user_name from dual;
column HOST_NAME new_value HOST_NAME
select HOST_NAME from v$instance;
set sqlprompt "&user_name'@'&HOST_NAME(&instance_name) SQL>"
效果展示
此处我的两个实例的密码都是一样的,因此才能有如此效果,如果用户名密码不一样,就要配置多种组合,并通过脚本来做ip的替换
这样就可以实现安全的免密登录了