Ubuntu环境下Bash脚本加密数据库密码并读取解密的实现方法
加密密码文件并解密用于数据库连接的实现方案
问题描述
我有两个文件:一个用于存储密码,另一个用于读取密码并建立数据库连接。需要解决两个问题:如何加密密码文件中的密码,以及读取文件后如何解密密码用于数据库访问?
1) 密码文件(原内容)
USER="User_Name" PASS="Pass" # 如何加密这个密码?
2) 读取文件(原内容)
. Password.txt sqlplus.exe -S ${USER}/${PASS}@DBLINK # 如何解密密码并在此处使用?
具体解决方案
方案一:用OpenSSL对称加密(通用bash环境)
1. 加密密码并更新密码文件
使用AES-256-CBC算法加密明文密码,执行以下命令:
echo -n "你的明文密码" | openssl enc -aes-256-cbc -salt -out encrypted_pass.bin
执行时会要求你输入一个加密密钥(务必妥善保存,解密时必须用到)。
修改密码文件Password.txt,替换明文密码为加密文件路径:
USER="User_Name" ENCRYPTED_PASS="encrypted_pass.bin"
2. 解密密码并执行数据库连接
修改读取脚本,添加解密逻辑:
# 加载密码文件中的配置 . Password.txt # 解密密码(执行时会提示输入加密密钥) PASS=$(openssl enc -aes-256-cbc -d -in $ENCRYPTED_PASS) # 连接数据库 sqlplus.exe -S ${USER}/${PASS}@DBLINK
方案二:Oracle官方Wallet(Oracle数据库专属)
如果是Oracle数据库,官方推荐使用Wallet存储凭证,安全性更高:
1. 创建Wallet并添加凭证
首先创建Wallet目录并初始化:
mkstore -wrl /your/wallet/path -create
按提示设置Wallet密码,然后添加数据库连接凭证:
mkstore -wrl /your/wallet/path -createCredential DBLINK User_Name 你的明文密码
2. 配置并连接数据库
修改sqlnet.ora文件,指定Wallet路径:
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /your/wallet/path))) SQLNET.WALLET_OVERRIDE = TRUE
之后连接脚本无需再处理密码,直接执行:
sqlplus.exe -S /@DBLINK
关键注意事项
- 加密密钥不要硬编码到脚本中,优先通过交互式输入传递;若用环境变量,需限制环境变量的访问权限。
- 加密文件、Wallet目录要设置严格的权限(如
chmod 600),仅允许执行脚本的用户读取。 - 避免在命令行直接输入明文密码,防止被命令历史记录捕获。
内容的提问来源于stack exchange,提问作者Abdul Rahman
相关产品推荐
相关产品推荐

