2012-03-16 21 views
0

我们使用的是Oracle 11.2,并且运行在Solaris 10上的C++编写的服务器进程。我们的支持人员拥有自己的Oracle用户名,并且我们有专用的Oracle用户对于我们的服务器进程(我们称之为servuser)。验证需要连接到Oracle的服务器进程的安全方式

对于审计目的,我们需要确保只有服务器进程使用servuser帐户进行更改,但是,支持人员也可以使用servuser访问数据库,只要他们从托管服务器进程的Solaris Box。

明显的解决方案是使用OS身份验证 - 为进程创建一个Solaris用户,并将其映射到Oracle服务器。唯一的问题是:这些服务器进程在Oracle实例的单独主机上运行。打开远程授权是一个巨大的,众所周知的安全漏洞(只需在您的操作系统上创建自己的用户 - presto)。

所有我能想到的另一策略是没有好:

  1. 在存储文件中的密码在Solaris帐户是不行的,因为支持人员可以看到他们,并使用通过sqlplus的连接;

  2. 加密文件不会有什么好 - 服务器进程必须具有访问私钥,那么这将是提供给支持人员,然后可以解密&我们在步骤1

    又回来了
  3. 我想过创建一个登录触发器来检查我们是否以servuser身份进行连接,如果v $ session中的Module/Program值与我们确定的有效值不匹配,则会引发异常客户端。这是弱保护,因为有人可以编写自己的应用程序来欺骗这些值。

什么是处理这种情况的“官方”方式?操作系统身份验证只在安装了您的实例的同一个盒子上运行您的客户端时才会安全运行,这看起来相当没用,IMO。然而,我认为我们的场景是相当普遍的 - 应用程序服务器运行在不同的实例上,但是您要确保只有他们可以使用特权帐户。

对此提出建议?

回答

0

最好的选择通常是使用secure external password store。这将涉及在服务器机器上创建一个钱包,该钱包存储用于连接到Oracle的用户名密码&。如果您让钱包自动登录,服务器进程将无需打开钱包或查看密码,支持人员也不需要。可以对钱包进行配置,以便自动登录只能在服务器机器上工作,使得钱包或多或少无用,如果有人将其复制到不同的机器。当然,如果您想要更改存储的密码,组织中的某人需要拥有该钱包的密码,但不需要该人员成为支持人员之一。

较不理想的情况是登录触发器检查客户端的用户名和IP地址,如果连接来自Solaris以外的机器(可能除了检查模块或程序),则拒绝登录。这通常有效,但总有可能有人欺骗他们的IP地址。但是欺骗客户端IP地址并使其看起来像网络上的应用服务器通常会导致足够的路由问题,从而导致攻击难以实现。

+0

钱包是否也适用于机器上给定的操作系统用户? – 2012-03-16 18:36:32

+0

@SteveBroberg - 您当然应该可以使用Unix文件权限来确保只有一个Solaris用户有权访问钱包,是的。 – 2012-03-16 18:56:12

+0

谢谢,但我的意思是有人能够拿到钱包文件,并使用它来作为一个不同的操作系统用户登录?换句话说,它是否作为一种“通行证”以servuser身份进入数据库?如果是这样,那么比用户名/密码文件更好吗? – 2012-03-16 22:12:49

相关问题