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