域環境下配置連線sql server 的asp.net網站

iSQlServer發表於2009-02-06

域控制器+資料庫伺服器  域名local
               window 2003  sp2
               sql server 2000 sp4     windows 認證

web伺服器
               window 2003 sp2
               iis6   允許匿名登入  
               asp.net 1.1  系統網站  要求允許internet訪問
               web.config  impersonate=false   authentication mode=”Forms”

連線採用 Intergrated Security=true(即Trusted Connection=true)
問題1:碰到no authority/network service(iis5下為 no authority/aspnet)
解決方案:網上搜了一下,要在sql server上新增network service相應的許可權,可是在sql server上找了一圈也沒有發現,後來找到了老外的一個帖子Installing SQL Server on a domain controller,大體意思就是不推薦把sql server安裝到域控制器上,可能會導致帳戶的許可權等。

於是做了更改
資料庫伺服器
               window 2003  sp2
               sql server 2000 sp4     windows 認證

域控制器+web伺服器   域名local
               window 2003 sp2
               iis6   允許匿名登入  
               asp.net 1.1  系統網站  要求允許internet訪問
               web.config  impersonate=false   authentication mode=”Forms”

把域伺服器安裝到web伺服器上,這個時候能夠在sql server新增 local\Network Service 帳號,並且設定對具體資料庫的許可權。不過瀏覽頁面的時候報 使用者 'LOCAL\WIN03$' 登入失敗,WIN03是我這裡web伺服器的機器名。
從網上查了一下
如果IIS啟用了匿名訪問
  1 如果asp.net應用程式啟用模仿,則用IUSR_machinename發出請求
  2 如果asp.net應用程式未啟用模仿,則用特定的ASP.NET程式帳戶發出請求
所以將impersonate設為true,另外之前已經設定了IUSR_machinname(就是Network Service)在Sql Server的使用者許可權,頁面能夠正常瀏覽。
還要注意的是,如果啟用了模仿,但IUSR_machinname在Sql Server中沒有相應許可權,會報使用者 'LOCAL\IUSER_WIN03' 登入失敗錯誤。

最後如果正在執行 Windows Server 2003,其中的 IIS 6.0 配置為執行在輔助程式隔離模式下(預設情況),則可通過將 ASP.NET 應用程式配置為在自定義應用程式池(在特定的域標識下執行)中執行來避免模擬。然後,可以使用指定的域標識訪問資源而無需使用模擬。

 

補充:
今天從網上看到說不建議使用impersonate,可能會導致應用程式池工作不正常,於是嘗試將impersonate設定為false,此時報使用者 'LOCAL\WIN03$' 登入失敗,可以在sql server中新增local\win03$使用者許可權,在虛擬機器上測試能夠正常訪問。明天在伺服器環境試一下。

 

今天在伺服器環境下測試,發現外網使用者不能訪問(始終彈出使用者名稱密碼的登入對話方塊),在網上找到這樣一段話

使用   Windows   整合安全性。此選擇將使用者的憑據傳遞到   SQL   Server。由於委託問題,這樣做是切實可行的,條件是   SQL   Server   和   IIS   位於同一臺計算機上,而且使用者必須與   Web   伺服器計算機位於同一域中。

看來,不使用模仿是無法解決這個問題的,但我有不想使用模仿,不知道還有沒有其他辦法.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-545477/,如需轉載,請註明出處,否則將追究法律責任。

相關文章