如何使用加密密码验证Oracle登录

如何使用加密密码验证Oracle登录,oracle,authentication,login,database-administration,Oracle,Authentication,Login,Database Administration,我们使用KornShell(ksh)脚本连接到Oracle,该脚本使用SQL*Plus连接到Oracle。Oracle数据库位于同一Solaris设备上。目前,我们将Oracle用户id和密码(纯文本)存储在连接用户的.ssh文件夹中的一个文件中,具有400个权限位 DBA反对这种工作方式,理由是我们使用纯文本密码进行身份验证。当我们提出使用base64对密码进行编码时,他们仍然不喜欢这个想法,理由是我们仍然会在shell脚本中解密密码,并通过网络传输密码 现在,我想了解这一点- 我一直在读Or

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

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

现在,我想了解这一点-

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

  • 我是否可以登录到SQL*Plus而不解密密码哈希?e、 例如,DBA设置密码,将哈希传递给我。我将其放在一个文件中,并将其作为参数提供给SQL*Plus。这种身份验证有什么方法可以起作用吗?我知道有些工具确实允许这样做,如果你使用他们的工具编码,他们能够解密值并使用它进行身份验证。甲骨文呢


  • 伙计们,帮帮我。

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

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

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

    您可以使用数据库身份验证


    可以找到调优的示例。

    这样做已经有一段时间了(我没有linux box随手可得的atm),但您可以尝试这样对ps隐藏详细信息:

    echo password | sqlplus -s username@database @myscript.sql
    
    注意,-s是sqlplus的静默模式。我相信您也可以将密码放在一个“受保护”的文件中(我松散地使用这个术语,但将位设置为400)并对文件进行cat,如上所述,通过管道传输到sqlplus

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

    --在Oracle中,创建新用户

    create user ops$batch_user IDENTIFIED EXTERNALLY;
    grant connect to ops$batch_user;
    
    --在Unix中(以批处理用户身份登录,或使用su命令)

    请注意,由于用户已通过操作系统的身份验证,因此不使用密码。这没有Oracle wallet imo复杂,但也不完美

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