首页 > 解决方案 > Oracle - 获取经过身份验证的用户

问题描述

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

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

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

当我在 localhost 中运行我的应用程序时,数据库会获得正确的用户,但是当我在服务器(IIS)上对其进行 plublish 时,数据库总是以用户身份获得应用程序池名称。

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

标签: oracleiis

解决方案


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

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

有解决问题的替代方法,例如使用代理身份验证。不过,一般来说,这不适用于连接池,尤其是当您拥有大量用户时。


推荐阅读