2009-06-17 109 views
4

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

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

有没有办法来防止这种情况?我们如何确保我们的数据库中的每条记录仅在本场景中使用“ourTool”创建/编辑/删除?

回答

2

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

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

+0

请注意将PW嵌入到源代码中 - 有许多工具可让您在可执行文件中查看嵌入的ASCII字符串。 – DCookie 2009-06-17 14:42:43

2

默认情况下,OCI发送调用应用程序EXE名字,你可以通过查询v$session访问:

SELECT program 
FROM V$SESSION 

,您可以在一个AFTER LOGON触发做。

但是,这可以很容易覆盖,不应该依赖。

+0

+1 - 它会防止通过SQL工具意外登录。 – 2009-06-17 14:26:47

1

我重新命名SQLPLUS.EXE到myTool.exe并且与myTool.exe

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

返回连接后: myTool.exe

所以,要小心,因为Quassnoi说:虽然可用在某些情况下,这当然不是举证。

相关问题