阻止应用程序登录Oracle数据库

时间:2010-08-11 17:19:05

标签: oracle

有人知道我怎么能制作一个触发器或其他任何东西来阻止人们在我的数据库上连接除我的任何类型的应用程序?

请注意,用于阻止少量.exe此类TOAD或Watever的超级旧的和不安全的触发器并不真正起作用,因为您只需将EXE重命名为MyApplication.exe。

提示?

5 个答案:

答案 0 :(得分:5)

更简单的方法是将安全性移动到只能由您的应用启用的角色 - 请参阅我之前的答案here

使用此方法,另一个应用程序可能会创建一个会话,但由于未启用该角色,因此没有其他权限。

答案 1 :(得分:2)

您可能希望考虑Oracle的安全应用程序角色 - 它不会阻止人们通过恶意应用程序登录数据库,但是如果应用程序没有使用设置角色,它可以阻止他们访问表和包只有它知道的密码。

您可以找到有关部署它的教程here,但为了保护它,您必须使用密码创建角色,并且您的应用程序必须在发出{{1}时知道密码声明。

答案 2 :(得分:1)

我不知道Oracle有任何功能可以帮助解决这个问题(我可能错了)所以下一个最好的事情可能就是编写一个小型服务器应用程序,让您可以更好地控制登录过程和行为作为客户端应用程序和数据库服务器之间的中间人。这样,与数据库的所有连接都通过您的服务器应用程序进行,您可以控制服务器如何识别哪个客户端应用程序是合法的。这会给系统增加一些复杂性。

答案 3 :(得分:0)

如果您不相信v $ session中的程序名称,那么我想到的唯一选项是让您的应用程序对密码进行编码,这样他们输入的内容实际上并不是用于连接数据库的内容。 ;或者让您的应用使用私人用户名/密码登录,并根据您自己的用户表对用户进行身份验证,而不是拥有Oracle用户帐户。这两个选项使得帐户管理变得更加复杂。

答案 4 :(得分:0)

当您的应用程序登录时,您将调用一个存储过程,该存储过程将当前oracle会话关联为“受信任”会话。通过创建一个带有sessionID和受信任位的字段的可信会话表(以及可选的随机散列来防止用户篡改)来完成此操作。

创建一个system wide trigger,检查您当前的会话ID(和随机哈希)以检测它是否可信。如果表中不存在会话,则不允许查询,并注销用户。

您还应该设置关闭触发器以在退出时清除可信会话表。