2

我们使用 KornShell (ksh) 脚本连接到 Oracle,该脚本使用 SQL*Plus 连接到 Oracle。Oracle 数据库位于同一个 Solaris 机器上。目前,我们将 Oracle 用户 ID 和密码(纯文本)存储在连接用户的 .ssh 文件夹中的一个文件中,具有 400 个权限位。

DBA 反对这种工作方式,理由是我们使用纯文本密码进行身份验证。当我们提出我们将使用 base64 对密码进行编码时,他们仍然不喜欢这个想法,理由是我们仍然会在 shell 脚本中解密密码并通过网络传输密码。

现在,我想明白这一点——

  1. 我一直在阅读 Oracle 在传输密码字符串之前对其进行加密/散列。我现在找不到参考资料,但是,我仍然想确认我的理解。真的是这样吗?我们在 11g r2 上,这会有所不同吗?

  2. 我可以在不解密密码哈希的情况下登录 SQL*Plus 吗?例如,DBA 设置密码,将哈希传递给我。我把它放在一个文件中,并作为参数提供给 SQL*Plus。这种身份验证有什么方法可以工作吗?我知道有些工具确实允许这样做,如果您使用他们的工具进行编码,他们就能够解密该值并将其用于身份验证。甲骨文吗?

帮帮我,伙计们。

4

3 回答 3

4

这样做已经有一段时间了(而且我没有方便的 linux 机器 atm),但是您可以尝试这样做以隐藏 ps 的详细信息:

echo password | sqlplus -s username@database @myscript.sql

注意 -s 是 sqlplus 的静默模式。我相信您也可以将密码放在“受保护”文件中(我使用松散的术语,但将位数设置为 400)并将文件分类,如上所示通过管道连接到 sqlplus。

编辑:如果 DBA 真的关心密码,那么使用 NO 密码怎么样。您可以尝试操作系统身份验证,但您需要先进行一些设置。例如:

--在Oracle中,创建新用户

create user ops$batch_user IDENTIFIED EXTERNALLY;
grant connect to ops$batch_user;

-- 在 Unix 中(以 batch_user 身份登录,或使用 su 命令)

export ORACLE_HOME=/app/oracle/product/11.2
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=DEV
sqlplus /

请注意,由于用户已通过操作系统身份验证,因此不使用密码。这比 Oracle 钱包 imo 简单,但也不完美。

于 2013-07-23T14:19:00.057 回答
2

你到底是如何连接到数据库的?如果您sqlplus user/password@database从命令行/脚本中使用,那么您确实有问题。原因是,您可以使用ps命令轻松查看密码。

混淆它Base64并不是真正的加密,因为Base64它是一种用于通过网络传输二进制数据的已知算法。这可能会让一些人感到困惑,但肯定不是发送密码的安全方式。

在这种情况下,为了避免在进程列表中显示密码,我所做的是将密码写入具有本地用户只读权限的文本文件。然后我用 nohup 或在后台运行 sqlplussqlplus user@db < pwdfile并立即再次删除该文件。

于 2013-07-23T10:28:51.103 回答
2

您可以使用Oracle Wallets进行数据库身份验证。

可以在此处找到调整示例。

于 2013-07-23T14:17:58.107 回答