2011-07-25 57 views
0

我不知道如何解決了以下問題:傳遞asp.net登錄名到數據庫

我有一個Web應用程序asp.net窗體哪裏身份認證時,連接到Active Directory。另外,我有一個連接字符串到MS應用程序中的MS SQL數據庫,其中使用了一個全局用戶(具有特定權限)。問題是,當我想在數據庫中存儲有關用戶的信息(例如數據修改日誌)時,我只能獲取連接字符串中提供的全局用戶信息,而不是登錄的真實用戶。

有可能使用我的個人憑證登錄Web應用程序,之後使用全局用戶憑證連接到數據庫並傳遞我的個人用戶憑證(但不作爲存儲過程中的參數),以至於數據庫會認爲用戶是登錄不是全球用戶?

我認爲,這可能是唯一可能的,如果我也在數據庫中創建相同的用戶並使用Impersonalization?

還是其他可能性?

在此先感謝。

回答

0

你在做什麼來獲得當前用戶?你在做類似SELECT @user = SYSTEM_USER的事嗎?這顯然只會返回您連接到SQL Server的用戶。

我寧願繼續使用應用程序使用的單個SQL登錄名,但在進行更改時傳入用戶名(例如,通過一個存儲過程或表更新:

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財產搶在當前登錄的用戶。

+0

咋,我正在使用標準的方式如何讓用戶連接到SQL Server實例。但是,傳遞實際用戶名作爲參數的解決方案不適用於我。我想使用MS SQL 2008審計服務記錄所有更改,並且不可能如何將用戶名作爲參數傳遞(至少我沒有意識到)。最好的是,如果Web應用程序可以authentificate用戶,並告訴數據庫,「是的,用戶弗蘭基是好的,讓他與GlobalUser的權利連接到數據庫,並記住他的名字作爲羊羊」 – Frankie

0

您可以使用數據庫中的某個角色來處理權限,然後在AD中的組中獲取所需的用戶,然後爲該AD組分配權限以在您定義的角色下訪問數據庫。 (這樣,您不需要在創建它們時將每個用戶分配到數據庫)。

然後,您將使用Windows身份驗證,從您的網站到數據庫的方式都是正確的,並擁有您需要登錄的用戶身份。 (你需要在你的配置中設置identity impersonate =「true」)。

我想指出,這僅僅是去上班(容易),如果你的服務器和用戶都在同一個網絡上。