在ASP.NET專案使用"Data Source=(local);Integrated Security=SSPI;Initial Catalog=MyDB"以Windows驗證連線本機SQL Server,Visual Studio測試正常,搬到IIS後出現以下錯誤:
System.Data.SqlClient.SqlException: Login failed for user '<Domain>\<Computer>$'.
Visual Studio測試時用的是IIS Express,會以當時登入Windows的帳號執行;移至IIS後執行身分不同可以理解,但怎麼會無端冒出電腦帳號(網域名稱\電腦名稱$)?我知道NETWORK SERVICE在存取遠端主機時會使用電腦帳號,但存取本機SQL為什麼會動用本機的電腦帳號?
爬文得知,原來這是個誤導性十足的錯誤訊息,跟遠端存取、本機電腦帳號沒啥關係,純粹是未設定 NT AUTHORITY\NETWORK SERVICE或IIS虛擬帳號的SQL存取權限造成。
主機為Windows 8.1/IIS 8.5,應用程式集區(名稱為BBDP)使用的身分為ApplicationPoolIdentity,故於SQL新增登入帳號對應到「IIS APPPOOL\BBDP」並授與權限,問題排除。