0

调用我有一个名为的帐户下运行的网页存储过程获取网站用户的Windows登录名,WebUser(IIS该帐户下运行)如何从通过网站

现在这里的问题是,当该网页由用户(内联网)访问,
用户通过认证Windows认证

该网页调用存储过程SaveClientInfo。 当我试图通过SYSTEM_USER

来获取用户名(比如,用户1)谁在呼唤SaveClientInfo
我得到WEBUSER,而不是用户1有没有办法让用户1 from SaveClientInfo而不必将用户名传递给存储过程?

下面是相关一块存储过程定义

create procedure SaveClientInfo 
    @ClientID int 
    ... --; other parameters 
as 
begin 
    declare @UserName sysname 
    --; returns the name of user name that IIS runs under 
    --; But I would like to log the name of the person 
    --; who is accesing the site through Windows Authentication 
    select @UserName = SYSTEM_USER 

    --; Save client data and the person who saved the info 
    ... 
end 
GO 

回答

1

除非您在您的网络应用程序中使用模拟,否则Web应用程序将作为Windows身份验证用户连接,否则您不能。

0

检索来自SQL用户的名称应该只给你与连接相关联的用户名的 - 通常情况下,使用ASP.NET的用户帐户。

在.NET方面,您可以使用(C#)

string s = Environment.User.Identity.Name 

检索登录到您的站点的用户的名称。我们使用它来跟踪谁通过我们的管理网站对数据库进行了更改等等。

+0

我试图避免必须为每个* sprocs创建一个新参数,如@ UserName,以保存信息。 – Sung 2009-10-24 15:53:48

+0

问题是,正如Chris J指出的那样,登录用户不会与SQL服务器通话。 ASP.NET是使用自己的权限。你将*有*传递一些参数来识别用户。无论是会话ID,用户名还是你有什么,都没有真正的方法来避免这种情况。 另外,恕我直言,这样做是不好的数据库和DAL设计。 – 2009-10-25 16:08:40