告别明文密码!保姆级教程教你配置 Oracle Wallet,让数据泵安全提升 10 倍
预计阅读时间: 5 分钟
做 DBA 或运维的朋友,大概都有过这种“心惊肉跳”的时刻:
当你在服务器上随手敲下一个 ps -ef | grep expdp,屏幕上赫然显示着一行刺眼的字符:expdp system/P@ssw0rd123...
那个极其复杂的强密码,此刻正像在“裸奔”一样,毫无遮掩地展示在所有登录这台服务器的人面前。 😱
更别提那些每天自动运行的 Shell 备份脚本,日志文件里可能写满了明文密码。一旦被安全审计抓到,就是一顿通报批评;万一日志泄露,那就是妥妥的生产事故。
今天,咱们就来彻底解决这个问题。
别再写 system/password 了!我来手把手教你配置 Oracle Wallet(安全钱包)。这玩意儿就像给你的数据库账号穿上了一件“隐身衣”,让你的脚本既专业又安全。🔒
🛑 为什么要抛弃明文密码?
很多朋友习惯这么写备份脚本:
1 2 3
# 危险写法:密码直接暴露
expdp system/Oracle2023@prod full=y directory=DATA_PUMP_DIR ...
这种写法的硬伤太多了:
1. 容易泄露: ps进程可见,脚本文件可见,日志可见。2. 维护痛苦:每当改一次数据库密码,你得去修改几十个脚本,漏一个就报错。
而我们要达到的**“高手境界”**是这样的:
1 2 3
# 安全写法:没有用户名,没有密码
expdp /@prod_db full=y directory=DATA_PUMP_DIR ...
看到了吗?没有用户名,没有密码! 只有一个连接别名。脚本看起来清爽极了,安全系数直接拉满!🚀
下面进入保姆级实操环节,总共 4 步,跟着做就行。
🛠️ 核心实操:四步配置 Oracle Wallet
在此之前,请确保你的 tnsnames.ora 里已经配好了数据库连接串(假设别名为 prod_db)。
Step 1:规划“钱包”存放位置
首先,我们需要找个目录来存放 Wallet 文件。
1 2 3
# 创建一个专门存放 wallet 的目录
mkdir -p /u01/app/oracle/wallet
Step 2:配置 sqlnet.ora
这是最关键的一步。我们需要告诉 Oracle 客户端:“我想用 Wallet 登录,别问我要密码。”
找到 $ORACLE_HOME/network/admin/sqlnet.ora 文件(如果没有就新建),加入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 指定 Wallet 的存放路径
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)
# 允许覆盖默认的系统认证
SQLNET.WALLET_OVERRIDE = TRUE
# 建议配置,避免 SSL 干扰
SSL_CLIENT_AUTHENTICATION = FALSE
💡 划重点:
SQLNET.WALLET_OVERRIDE = TRUE这句一定要加!否则 Oracle 还是会傻傻地等待你输入密码。
Step 3:创建钱包并把密码“存”进去
我们要用到 mkstore 这个工具(Oracle 自带的,在 bin 目录下)。
1. 初始化钱包:
1 2 3 4 5
# -create:创建钱包
# -wrl:指定路径
# -auto_login:创建自动登录文件(关键!)
mkstore -wrl /u01/app/oracle/wallet -create
(执行时会让你设一个钱包的主密码,记得设一个复杂的并记在小本本上。)
2. 存入账号密码:
1 2 3
# 格式:mkstore -wrl <路径> -createCredential <TNS别名> <用户名> <密码>
mkstore -wrl /u01/app/oracle/wallet -createCredential prod_db system Oracle2023
⚠️ 注意:这里的
prod_db必须和你的tnsnames.ora里的别名一模一样!
Step 4:见证奇迹的时刻
配置完了,我们来验证一下。
不输入用户名密码,直接尝试连接:
1 2
sqlplus /@prod_db
如果你看到了熟悉的 Connected to: Oracle Database...,恭喜你!配置成功!🎉
📁 成果验收:改造你的备份脚本
现在,你可以把你脚本里那些丑陋的明文密码统统删掉了。
Before(改造前):
1 2 3 4 5
expdp system/Oracle2023@prod_db \
directory=dump_dir \
dumpfile=backup_%U.dmp \
logfile=backup.log
After(改造后):
1 2 3 4 5
expdp /@prod_db \
directory=dump_dir \
dumpfile=backup_%U.dmp \
logfile=backup.log
这也是 impdp 的最佳实践!
这样做还有一个巨大的好处:
如果数据库密码过期需要修改,你只需要用 mkstore 命令更新一下 Wallet 里的凭证即可,所有下游的几十个脚本完全不用动! 简直是运维人的福音。🍵
✍️ 写在最后
安全合规无小事,专业往往体现在这些不起眼的细节里。
把 system/password 这种写法留给刚入行的实习生吧。作为资深 DBA,Oracle Wallet 才是你该有的“排面”。
你的生产环境还在“裸奔”吗? 欢迎在评论区聊聊你的血泪史。👇
🎁 福利时间
觉得上面敲命令还是太麻烦?怕改错配置文件?
别担心,主编连夜写了一个 Shell 脚本。你只需要填入路径和账号密码,它自动帮你搞定目录创建、参数配置和钱包生成!
👇 获取方式:
在公众号后台回复关键字 【Wallet】,即可获取这份 Oracle Wallet 一键配置脚本。拒绝繁琐,一键搞定!