青年数据库学习互助会

告别明文密码!保姆级教程教你配置 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. 1. 容易泄露:ps 进程可见,脚本文件可见,日志可见。
  2. 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 一键配置脚本。拒绝繁琐,一键搞定!