操作系統使用的是WIN7,IIS版本為7.5,其他IIS版本未做測試,不一定適用本文所述方法。

之前用ASP.NET做了一個小網站,通過Windows身份驗證來連接SQL Server資料庫。

在開發環境中使用時也一直沒有問題。

然而,把網站發布到IIS上進行測試的時候出現了異常,提示無法連接到資料庫。

查了資料,找到以下兩種方法:

1、將資料庫連接方式改為通過帳號密碼來訪問

這種方式可以解決問題,但不是我所需要的,此處就不做過多的說明了。

2、在IIS管理器中,找到網站使用的應用程序池,在高級配置中,找到[標識]

可以看到默認選中的是ApplicationPoolIdentity

將[標識]改為LocalSystem即可

這種方式也可以解決問題,但是卻使用了更高的用戶許可權

以具有高級別用戶許可權的帳戶運行應用程序池存在嚴重的安全風險,因此不推薦使用

那麼問題就來了,怎麼做才更好呢?

解決問題的關鍵點還是在於這個默認選中的標識ApplicationPoolIdentity,這是幾個選項中最安全的

在啟動應用程序池時動態創建了一個跟「應用程序池標識」同名的帳戶

此時,在訪問資料庫時也是通過這個帳戶來訪問的

那麼問題就好解決了,在SQL Server中,在相應的資料庫中添加這個帳戶對資料庫的相關許可權就可以了

需要注意的是:再添加的時候,帳戶名要跟異常信息中提示的那個帳戶名一致

例如:

應用程序池名為:ASP.NET v4.0

對應的帳戶名為:ASP.NET v4.0

在SQL中添加為:IIS APPPOOLASP.NET v4.0

資料庫--安全性--用戶,右鍵新建用戶

用戶名:IIS APPPOOLASP.NET v4.0

登錄名:IIS APPPOOLASP.NET v4.0

再設置該帳戶的資料庫角色成員身份並保存

參考資料:

「應用程序池標識」對話框

http://technet.microsoft.com/zh-cn/library/cc731981.aspx


推薦閱讀:
查看原文 >>
相关文章