我们使用KornShell(ksh)脚本连接到Oracle,这些脚本使用SQL * Plus连接到Oracle。 Oracle数据库位于同一Solaris机器上。目前,我们将Oracle用户ID和密码(纯文本)存储在连接用户的.ssh文件夹中的文件中,具有400个权限位。
DBA反对这种工作方式,理由是我们使用纯文本密码进行身份验证。当我们提出我们将使用base64编码密码时,他们仍然不喜欢这个想法,因为我们仍然会在shell脚本中解密密码并通过网络传输密码。
现在,我想了解这个 -
我一直在阅读Oracle在传输之前加密/哈希密码字符串。我现在找不到参考,但是,我仍然想确认我的理解。它真的像这样吗?我们是11g r2,会有所作为吗?
我是否可以在不解密密码哈希的情况下登录SQL * Plus?例如,DBA设置密码,将哈希传递给我。我把它放在一个文件中,并作为参数提供给SQL * Plus。这种认证有哪些方法可行?我知道有些工具允许这样做,如果使用他们的工具进行编码,他们就能够解密该值并将其用于身份验证。甲骨文?
帮帮我找人。
答案 0 :(得分:4)
这样做已经有一段时间了(而且我没有方便的linux盒子),但你可以尝试来隐藏ps中的细节:
echo password | sqlplus -s username@database @myscript.sql
请注意-s是sqlplus的静默模式。我相信您也可以将密码放在“受保护”文件中(我使用松散的术语,但将位设置为400)并捕获文件,如上所述输入到sqlplus。
修改强>: 如果DBA真的关心密码,那么如何使用NO密码。您可以尝试OS身份验证,但首先需要进行一些设置。例如:
- 在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 wallet imo复杂,但也不完美。
答案 1 :(得分:2)
您可以使用Oracle Wallets进行数据库身份验证。
可以找到调整示例here。
答案 2 :(得分:1)
你究竟是如何连接数据库的?如果您使用命令行/脚本中的sqlplus user/password@database
,那么您就会遇到问题。原因是,您可以使用ps
命令轻松查看密码。
使用Base64
对其进行模糊处理并不是真正的加密,因为Base64
是用于通过线路传输二进制数据的已知算法。这可能会让人感到困惑,但肯定不是一种安全的密码发送方式。
在这种情况下,我要做的是,为了避免在进程列表中显示密码,我将密码写入具有本地用户的只读权限的文本文件。然后我用nohup或后台sqlplus user@db < pwdfile
运行sqlplus并立即再次删除该文件。