达梦数据库安全实践:通过Wallet实现无密码登录与导出
目的:避免在命令行/脚本中暴露数据库明文密码,提升系统安全性
1. 传统逻辑导出(含密码)
dexp USERID=SYSDBA/Da***** FILE=db_str.dmp DIRECTORY=/home/dmdba/bak LOG=db_str.log FULL=Y复制
风险提示:命令行中直接使用
SYSDBA/Da*****会暴露敏感信息,存在安全漏洞。
2. 配置Wallet实现密码脱敏
2.1 配置 dm_svc.conf
# /etc/dm_svc.conf 新增: WALLET_LOCATION=(/home/dmdba/dmdbms/wallet) # Wallet存储路径 sysdba=(192.168.**.**:5236) # 自定义服务名映射复制
2.2 创建Wallet文件
[dmdba@dms8 ~]$ dmmkstore -wrl /home/dmdba/dmdbms/wallet -create DM Secret Store Tool: V8 Version: 2 输入口令: Wallet_*** 再次输入口令: Wallet_***复制
按提示输入两次Wallet管理口令(示例中为
Wallet_***,生产环境需加强复杂度)
2.3 添加数据库凭据
#sysdba 服务名 sysdba 用户名 Da***** 用户密码,服务名要配合dm_svc.conf使用 [dmdba@dms8 bak]$ dmmkstore -wrl /home/dmdba/dmdbms/wallet -createCredential sysdba sysdba Da***** DM Secret Store Tool: V8 Version: 2 输入 Wallet 口令: Wallet_*** Create credential DM.security.client.connect_string1 [dmdba@dms8 bak]$ ll /home/dmdba/dmdbms/wallet/ 总用量 4 -rw-r--r-- 1 dmdba dinstall 3414 8月 14 09:47 dmwallet.prikey复制
sysdba:服务名(需与dm_svc.conf一致)- 第二个
sysdba:数据库用户名Da*****:数据库密码(此处输入实际密码,但不会被保存到历史记录)
需验证Wallet管理口令后生效
2.4 查看已存凭据
dmmkstore -wrl /home/dmdba/dmdbms/wallet -listCredential复制
输出示例:
1: sysdba sysdba
2.5 使用Wallet连接数据库
disql /@sysdba # 通过服务名自动获取凭据复制
连接成功即表明Wallet配置有效
3. 安全实践:无密码逻辑导出
[dmdba@dms8 ~]$ dexp USERID=/@sysdba FILE=db_str1.dmp DIRECTORY=/home/dmdba/bak LOG=db_str1.log FULL=Y …… 整个导出过程共花费 0.107 s 成功终止导出, 没有出现警告复制
关键变化:USERID=/@sysdba 替代了 USERID=SYSDBA/******,通过Wallet自动认证,彻底消除密码泄露风险。
安全增强建议
- 权限控制
chmod 700 /home/dmdba/dmdbms/wallet # 限制Wallet目录权限复制
- 密码策略
- Wallet管理口令使用12位以上强密码
- 定期轮换数据库密码(通过
dmmkstore -modifyCredential更新)
- 审计跟踪
启用数据库审计功能,监控/@服务名方式的登录行为
技术价值:通过Wallet机制,将密码存储于加密文件中,杜绝了密码在脚本、历史记录、进程信息中的暴露,符合等保合规要求。
此方案适用于自动化运维场景(如定时备份),大幅提升数据库安全水位。




