2009-06-18 77 views
1

我有一個asp.net應用程序(使用Windows身份驗證進行訪問)(由安全團隊規定)需要使用集成安全性連接到遠程SQL Server 2005通過。由於這一事實,這是我需要模擬一個自定義帳戶(冒充原調用將無法正常工作)遠程SQL服務器:ASP.NET Web應用程序不能使用多個模擬驗證

<identity impersonate = "true" userName="domainname\user" password="password" /> 

這workes罰款。蹭的是我的應用程序還使用ReportViewer控件連接到SSRS服務器以報告需求。報表服務器位於單獨的服務器上,安全團隊要求所有對此服務器的調用都必須使用原始窗口的帳戶進行審計。看來我唯一的選擇是嘗試將我的應用程序分離到文件夾中,並在我的web.config中使用「位置」標記並使用單獨的標識標記。如:

<location path="Reporting"> 
    <system.web> 
     <identity impersonate = "true"/> 
    </system.web> 
    </location> 

注:沒有指定的用戶名和密碼,這意味着它要模擬原始訪問者。

但是,使事情變得更加複雜我的應用程序是一個母版/內容頁面的應用程序。主頁面調用SQL來填充菜單等。底線是雙重模仿軌道不起作用。我準備好拋出我的手,並宣佈這是做不到的。如果有一種方法可以讓我的應用程序模擬原來的調用方來滿足我的SSRS審計需求,但可以將SQL Server作爲自定義域帳戶進行連接。我無法使用SQL身份驗證:雖然這可以解決此問題,但不允許使用。

回答

0

您應該能夠開啓和關閉模擬,以便您可以返回使用運行該網站的默認帳戶。我將不得不檢查一下,自從我做完了這一段時間。

這看起來像一個開端,如何做到這一點:

System.Security.Principal.WindowsImpersonationContext impersonationContext; 
impersonationContext = 
    ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); 

//Insert your code that runs under the security context of the authenticating user here. 

impersonationContext.Undo(); 

基本上你只是模仿適當的用戶您需要的電話,然後「撤銷」的背景和關閉它。它在那之後回到默認用戶。

下面是Windows標識類的鏈接:

http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx

+0

當我爲自定義用戶設置模擬時,如: Windows Identity是自定義用戶。我試過了,這是事實。因此,如果我默認使用原始用戶 如何爲我的數據庫調用指定自定義用戶? – MikeD 2009-06-18 18:04:02

+0

如果內存正確地爲我提供服務,它應該自動執行,只要連接字符串使用sspi上下文。 – kemiller2002 2009-06-18 18:25:10

1

你試過以下設置:

  1. 模擬設置爲true。這對於身份驗證進入應用程序以及訪問SSRS以使用當前用戶登錄時是必需的。

  2. 將一個連接字符串用於具有集成安全性設置爲true的SSRS,以便模擬用戶直接通過。

  3. 使用第二個連接字符串,將自定義用戶名和密碼硬編碼到連接字符串中。您可以對web.config的連接字符串部分進行加密,以使其對人眼不可見,但是框架會在創建連接時自動解密此部分。

我有類似的情況(需要特定帳戶檢索具體的數據,但對於服務功能,其餘的一般模擬)和此設置工作。

編輯:從命令提示符加密你的web.config一般語法是:

aspnet_regiis -pef "connectionStrings" [PhysicalPathToApplication] -prov "DataProtectionConfigurationProvider" 

加密是每臺機器基礎的機器上完成的,因此加密將必須在特定的服務器上完成。如果需要的話,你可以拿出更多的文檔。

相關問題