我们正在为新系统开发一个服务层,该系统将处理与MSSQL(2005)数据库的所有交互。对于如何在我们的一些遗留审计表中捕获用户所需的所有“完成它”信息,我们感到有点困惑。虽然我们可以传入正在修改数据和记录调用的用户名,但我们将使用一些遗留表,这些表具有触发器以捕获记录插入,更新和删除时的system_user。我们还在某些地方征用了一些行级安全性,我们也希望在不改变代码的情况下利用它们。我已经读过有些人正在使用contextinfo来存储用户,但在这种情况下,这似乎不太安全。
我最喜欢的选项是在每个存储过程调用的基础上使用execute as user
execute sp_myproc @foo as user = 'username'
我们遇到的问题是,在实体框架中,似乎无法将execute as命令添加到存储过程调用中。
感谢您的任何意见。
答案 0 :(得分:0)
“EXECUTE AS”不支持过程调用(它将在实际的proc定义中)。 Only remote or dynamic SQL.
选项:
任何中间层都必须将最终用户作为参数传递。 我们为没有与数据库直接连接的Web服务和GUI执行此操作
启用服务器委派,以便每个服务器都可以通过最终用户凭据。在asp.net中基本上是“冒充”。
答案 1 :(得分:0)
答案 2 :(得分:0)
道格
我假设不同系统上的中间层,并且您需要数据库上的用户信息(即,不在中间层)。如果这不正确,请告诉我。
如果您使用Windows身份验证,则需要设置委派。这将允许您模拟数据库中的最终用户。您使用的是Windows身份验证吗?
埃里克