Oracle-获取经过身份验证的用户

时间:2019-02-18 20:22:13

标签: oracle iis

我的MVC应用程序连接到Oracle数据库。我们创建了许多触发器来保存用户更改的所有数据。

在触发器内部,我们使用下面的代码获取经过身份验证的用户:

UPPER(SYS_CONTEXT('USERENV', 'OS_USER'))

当我在本地主机上运行我的应用程序时,数据库会获取正确的用户,但是当我在服务器(IIS)上添加它时,数据库总是以用户身份获得应用程序池名称。

是否需要设置一些IIS配置以获得“ Windows身份验证”用户?有没有其他方法可以在oracle函数/触发器中获取此信息?

1 个答案:

答案 0 :(得分:3)

您实际上会希望使用secure application context,它基本上是用户控制的上下文,与系统控制的USERENV上下文不同。当应用程序代码从池中获得连接时,它将调用存储过程,该存储过程在新的应用程序上下文中设置应用程序用户名。然后,您的触发器将引用新上下文,而不是USERENV。您的应用程序需要确保每次从池中获取连接时都正确设置了上下文-如果应用程序无法正确设置上下文,则触发器将获得错误的信息。

如果您不想创建自己的上下文,则可以在CLIENT_IDENTIFIER中使用USERENV,只要您从池中获得连接,就可以通过dbms_session进行设置。从功能上讲,这基本上与创建自己的上下文相同。但是,关于创建自己的上下文的好处是,您可以在将来确定需要时无缝添加属性(即,添加客户端浏览器的IP地址或分层属性(如果您有金,银和青铜客户) )。

有其他方法可以解决此问题,例如使用proxy authentication。但是,总的来说,这对于连接池来说效果不佳,尤其是当您有大量用户时。