在中间层使用实体框架时,我们应该如何捕获数据库用户?

时间:2010-07-28 16:05:32

标签: sql-server database security entity-framework

我们正在为新系统开发一个服务层,该系统将处理与MSSQL(2005)数据库的所有交互。对于如何在我们的一些遗留审计表中捕获用户所需的所有“完成它”信息,我们感到有点困惑。虽然我们可以传入正在修改数据和记录调用的用户名,但我们将使用一些遗留表,这些表具有触发器以捕获记录插入,更新和删除时的system_user。我们还在某些地方征用了一些行级安全性,我们也希望在不改变代码的情况下利用它们。我已经读过有些人正在使用contextinfo来存储用户,但在这种情况下,这似乎不太安全。

我最喜欢的选项是在每个存储过程调用的基础上使用execute as user

execute sp_myproc @foo as user = 'username'

我们遇到的问题是,在实体框架中,似乎无法将execute as命令添加到存储过程调用中。

感谢您的任何意见。

3 个答案:

答案 0 :(得分:0)

“EXECUTE AS”不支持过程调用(它将在实际的proc定义中)。 Only remote or dynamic SQL.

选项:

  • 任何中间层都必须将最终用户作为参数传递。 我们为没有与数据库直接连接的Web服务和GUI执行此操作

  • 启用服务器委派,以便每个服务器都可以通过最终用户凭据。在asp.net中基本上是“冒充”。

  • Issue a separate command first

答案 1 :(得分:0)

答案 2 :(得分:0)

道格

我假设不同系统上的中间层,并且您需要数据库上的用户信息(即,不在中间层)。如果这不正确,请告诉我。

如果您使用Windows身份验证,则需要设置委派。这将允许您模拟数据库中的最终用户。您使用的是Windows身份验证吗?

埃里克