我们希望仅通过我们自己的应用程序允许数据库访问(Oracle) - 让我们称之为“ourTool.exe”,在用户计算机上本地安装。目前,用户必须在他们开始“ourTool”时提供用户名/密码。提供的密码密码被解密,我们使用username / decrypted-password最终登录到Oracle DB。这种方法可以防止用户使用第三方工具(SQLplus,Excel,Access,...)直接访问我们的数据库,并且保证使用“ourTool”输入/编辑数据库中的所有内容。

现在,我们的一位客户希望允许其用户“单点登录”。 (使用SmartCards / Oracle PKI)。这样,用户每次启动“ourTool”时都可以连接到我们的数据库而无需提供任何密码。但对于像SQLplus,Excel,Access等潜在危险的工具也是如此。

有没有办法防止这种情况发生?我们如何确保只使用“ourTool”创建/编辑/删除数据库中的每条记录。在这种情况下?

有帮助吗?

解决方案

由于它是您的应用程序并且您可以控制源,因此您可以使用受密码保护的数据库角色或从ourTool.exe启用的安全应用程序角色。 (参见 http://www.oracle.com/technology/ obe / obe10gdb / security / approles / approles.htm )。

例如,对于受密码保护的数据库角色,初始连接将仅具有CREATE SESSION权限,然后ourTool.exe将发出SET ROLE,其密码只有您自己知道。任何其他应用程序都没有设置角色的信息。显然,权限仅授予角色,而不是直接授予此配置中的用户。

其他提示

默认情况下, OCI 传输调用应用程序 EXE 名称,您可以通过查询 v $ session 来访问它:

SELECT  program
FROM    V$SESSION

,您可以在 AFTER LOGON 触发器中执行此操作。

但这很容易被覆盖,不应该依赖。

我将sqlplus.exe重命名为myTool.exe并在与myTool.exe建立连接后

SELECT  program
FROM    V$SESSION
where username = 'SYSTEM';

返回: myTool.exe

所以请注意,正如Quassnoi所说:虽然在某些情况下可以使用,但它肯定不是暴饮暴食。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top