如何将带外(当前用户ID)数据传递给SQL Server 2008

时间:2010-07-07 18:12:40

标签: sql-server security forms-authentication

我们有一个Web应用程序,它使用表单身份验证来根据数据库中的用户表对用户进行身份验证。 (即,此处不涉及活动目录或SQL Server用户帐户)。 Web应用程序使用服务帐户访问SQL Server。但是,对于审计,授权和其他目的,我们的存储过程需要知道正在执行任何给定操作的用户。

在以前的生活中,我使用Oracle数据库处理类似的情况。在这种情况下,每次打开连接时,我们首先调用Oracle构建过程来设置连接范围的上下文变量。此变量包含将使用该连接的用户的用户标识。然后,需要知道当前用户的所有存储过程将检查上下文变量。

从概念上讲,这很像在远程调用之前将用户信息推送到CallContext上。

我的问题是,Microsoft SQL Server中是否有类似的机制?

Obvioulsy,如果必须的话,我可以将UserId作为参数传递给每个存储过程,但这正是我想要避免的。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

您可以做的是在数据库中创建用户(没有服务器登录)并为他们提供适当的权限。之后,您所做的是“执行为”语句,然后数据库调用的用户上下文就像用户调用它一样。例如:

EXECUTE AS USER = 'user2';
EXECUTE usp_insert_stuff @params;
REVERT;

下行:您必须设置SQL安全性并管理用户 好处:用户无法直接连接到SQL Server,您将获得审核。

此处参考: http://msdn.microsoft.com/en-us/library/ms188354.aspx

请参阅页面底部的示例。