我们使用的是Oracle 11.2,并且运行在Solaris 10上的C++编写的服务器进程。我们的支持人员拥有自己的Oracle用户名,并且我们有专用的Oracle用户对于我们的服务器进程(我们称之为servuser)。验证需要连接到Oracle的服务器进程的安全方式
对于审计目的,我们需要确保只有服务器进程使用servuser帐户进行更改,但是,支持人员也可以使用servuser访问数据库,只要他们从托管服务器进程的Solaris Box。
明显的解决方案是使用OS身份验证 - 为进程创建一个Solaris用户,并将其映射到Oracle服务器。唯一的问题是:这些服务器进程在Oracle实例的单独主机上运行。打开远程授权是一个巨大的,众所周知的安全漏洞(只需在您的操作系统上创建自己的用户 - presto)。
所有我能想到的另一策略是没有好:
在存储文件中的密码在Solaris帐户是不行的,因为支持人员可以看到他们,并使用通过sqlplus的连接;
加密文件不会有什么好 - 服务器进程必须具有访问私钥,那么这将是提供给支持人员,然后可以解密&我们在步骤1
又回来了我想过创建一个登录触发器来检查我们是否以servuser身份进行连接,如果v $ session中的Module/Program值与我们确定的有效值不匹配,则会引发异常客户端。这是弱保护,因为有人可以编写自己的应用程序来欺骗这些值。
什么是处理这种情况的“官方”方式?操作系统身份验证只在安装了您的实例的同一个盒子上运行您的客户端时才会安全运行,这看起来相当没用,IMO。然而,我认为我们的场景是相当普遍的 - 应用程序服务器运行在不同的实例上,但是您要确保只有他们可以使用特权帐户。
对此提出建议?
钱包是否也适用于机器上给定的操作系统用户? – 2012-03-16 18:36:32
@SteveBroberg - 您当然应该可以使用Unix文件权限来确保只有一个Solaris用户有权访问钱包,是的。 – 2012-03-16 18:56:12
谢谢,但我的意思是有人能够拿到钱包文件,并使用它来作为一个不同的操作系统用户登录?换句话说,它是否作为一种“通行证”以servuser身份进入数据库?如果是这样,那么比用户名/密码文件更好吗? – 2012-03-16 22:12:49