如何从通过网站
问题描述:
调用我有一个名为的帐户下运行的网页存储过程获取网站用户的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
答
除非您在您的网络应用程序中使用模拟,否则Web应用程序将作为Windows身份验证用户连接,否则您不能。
答
检索来自SQL用户的名称应该只给你与连接相关联的用户名的 - 通常情况下,使用ASP.NET的用户帐户。
在.NET方面,您可以使用(C#)
string s = Environment.User.Identity.Name
检索登录到您的站点的用户的名称。我们使用它来跟踪谁通过我们的管理网站对数据库进行了更改等等。
我试图避免必须为每个* sprocs创建一个新参数,如@ UserName,以保存信息。 – Sung 2009-10-24 15:53:48
问题是,正如Chris J指出的那样,登录用户不会与SQL服务器通话。 ASP.NET是使用自己的权限。你将*有*传递一些参数来识别用户。无论是会话ID,用户名还是你有什么,都没有真正的方法来避免这种情况。 另外,恕我直言,这样做是不好的数据库和DAL设计。 – 2009-10-25 16:08:40