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

阻止应用程序登录Oracle数据库,oracle,Oracle,有人知道我怎样才能触发或阻止人们在我的数据库上连接除我之外的任何类型的应用程序吗 请注意,阻止少数.exe(如TOAD或watever)的超旧且不安全的触发器实际上不起作用,因为您可以将exe重命名为MyApplication.exe 提示?如果您不信任v$session中的程序名,那么您想到的唯一选项是让您的应用程序对密码进行编码,这样他们键入的内容实际上不是用于连接数据库的内容;或者使用私人用户名/密码登录应用程序,并根据您自己的用户表对用户进行身份验证,而不是使用Oracle用户帐户。不过

有人知道我怎样才能触发或阻止人们在我的数据库上连接除我之外的任何类型的应用程序吗

请注意,阻止少数.exe(如TOAD或watever)的超旧且不安全的触发器实际上不起作用,因为您可以将exe重命名为MyApplication.exe


提示?

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

我不知道Oracle是否有任何功能可以帮助实现这一点(不过我可能错了)因此,下一个最好的方法可能是编写一个小型服务器应用程序,让您能够更好地控制登录过程,并充当客户端应用程序和数据库服务器之间的中间人。这样,到数据库的所有连接都通过服务器应用程序实现,您可以控制服务器如何识别哪个客户端应用程序是合法的。不过,这会增加系统的复杂性。

当应用程序登录时,您会调用一个存储过程,将当前oracle会话关联为“受信任”会话。为此,创建一个可信会话表,其中包含sessionID和trusted位字段(以及防止用户篡改的随机散列)

创建一个,用于检查当前会话id(和随机哈希)以检测其是否可信。如果该会话在表中不存在,则不允许查询,并注销该用户


您还应该设置一个关闭触发器来清除退出时的可信会话表。

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


您可以找到关于部署它的教程,尽管要保护它,您必须使用密码创建角色,并且您的应用程序在发布由rolepassword标识的
SET role rolename时必须知道密码语句。

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


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

我猜问题可能是:某些应用程序已经有用户名/密码(您无法更改这些用户名/密码)因此,您希望基于连接应用程序本身阻止连接…应用程序没有通用的登录/密码。用户获得他们的登录/密码并使用这些密码登录。体系结构是什么?是什么让你的应用程序成为“你的”(即如果它部署在客户端PC上,那么是什么阻止它在那里被编辑)。一般来说,n层体系结构会更容易,因为您可以确保数据库只接受来自应用服务器的连接,并且最终用户没有物理/操作系统访问应用服务器的权限进行“欺骗”。嗯。。。如果应用程序具有正确的连接字符串和用户名/密码,他如何首先防止不受信任的应用程序连接?该应用程序可以在单独的会话中执行此操作,以私人用户身份登录,并且只有该用户才能执行该过程?然后你就不能通过Toad登录并自己调用它。@FrustratedWithFormsDesigner我认为你不能阻止他们登录,但如果他们试图执行任何操作,你可以用错误消息将他们注销@亚历克斯:好主意!