将asp.net登录名传递给数据库

时间:2011-07-25 08:50:18

标签: asp.net sql-server logging credentials

我想知道如何解决以下问题:

我有一个web asp.net应用程序,其中使用Forms Authentification,连接到Active Directory。此外,我在Web应用程序中有一个到MS SQL db的连接字符串,其中使用了一个全局用户(具有给定的权限)。问题是,当我想在数据库中存储有关用户的信息(例如数据修改日志)时,我只能获取连接字符串中提供的全局用户信息,而不是登录的真实用户。

是否有可能使用我的个人凭据登录Web应用程序,之后,使用全局用户凭据连接到数据库并传递我的个人用户凭据(但不作为存储过程中的参数)数据库将认为登录的用户不是全局用户?

我认为,如果我也在数据库中创建相同的用户并使用非个性化,那么它可能是唯一可能的吗?

还是其他任何可能性?

提前致谢。

2 个答案:

答案 0 :(得分:0)

你在做什么才能获得当前用户?你在做SELECT @user = SYSTEM_USER之类的事吗?这显然只会返回使用。

连接到SQL Server的用户

我宁愿继续使用应用程序使用的单个SQL登录,但在进行更改时传入用户名,例如:通过sproc或表更新:

CREATE PROCEDURE dbo.DoSomething
    @id INT,
    @username VARCHAR(50)
AS
    -- Make your changes.

    INSERT INTO dbo.[Audit] SELECT 'update', @id, @username
GO

在ASP.NET中,您可以通过页面的User.Identity.Name属性获取当前登录的用户。

答案 1 :(得分:0)

您可以使用数据库中的角色来处理权限,然后在AD中的组中获取所需的用户,并为该AD组分配权限,以便在您定义的角色下访问数据库。 (这样,您无需在创建数据库时将每个用户分配到数据库中。)

然后,您可以在从网站到数据库的过程中使用Windows身份验证,并拥有记录所需的用户身份。 (您需要在配置中设置identity impersonate =“true”。)

我会注意到,只有当您的服务器和用户都在同一个网络上时,这才能轻松实现。