我想知道如何解决以下问题:
我有一个web asp.net应用程序,其中使用Forms Authentification,连接到Active Directory。此外,我在Web应用程序中有一个到MS SQL db的连接字符串,其中使用了一个全局用户(具有给定的权限)。问题是,当我想在数据库中存储有关用户的信息(例如数据修改日志)时,我只能获取连接字符串中提供的全局用户信息,而不是登录的真实用户。
是否有可能使用我的个人凭据登录Web应用程序,之后,使用全局用户凭据连接到数据库并传递我的个人用户凭据(但不作为存储过程中的参数)数据库将认为登录的用户不是全局用户?
我认为,如果我也在数据库中创建相同的用户并使用非个性化,那么它可能是唯一可能的吗?
还是其他任何可能性?
提前致谢。
答案 0 :(得分:0)
你在做什么才能获得当前用户?你在做SELECT @user = SYSTEM_USER
之类的事吗?这显然只会返回使用。
我宁愿继续使用应用程序使用的单个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”。)
我会注意到,只有当您的服务器和用户都在同一个网络上时,这才能轻松实现。