# 網站佈署到主機後無法登入所要求的資料庫 使用者XXX 登入失敗 ###### tags: `資料庫` ## 錯誤訊息範例 --- 無法開啟登入所要求的資料庫 "資料庫英文名稱DatabaseName"。登入失敗。 使用者 'IIS APPPOOL\站台名稱SiteName' 的登入失敗。 使用者 'XXX' 的登入失敗。 或是 Login failed for 'IIS AppPool\ASP.NET v4.5' --- ## 原因 這個直接的原因就是權限不足,但首先要思考要使用哪種方式驗證,使用 Windows 驗證或是 SQL Server驗證會有不同的解決方式 ## sql server驗證和windows驗證哪個好? 哪個更安全 windows驗證更安全,但是設定較多 swl驗證有傳遞密碼或是密碼暴露的風險,但設定較簡易 https://dotblogs.com.tw/regionbbs/2017/07/13/sqlserver_database_authentication_mode ## 使用 SQL server 驗證 請檢查連線字串是否有 ```Integrated Security=true;``` 這一串文字,有的話代表啟用了 Windows 驗證,因此即使有設定了帳號密碼也會被忽略,刪除此段後,再到SQL Server 開啟權限 ### 連線字串範例 ``` data source=localhost;initial catalog=資料庫名稱;user id=使用者名稱;password=使用者密碼; ``` ## 使用 Windows 驗證 同上,連線字串中需有包含 ```Integrated Security=true;``` 這一段文字,但不需要寫上帳號密碼 ### 連線字串範例 ``` data source=localhost;initial catalog=資料庫名稱;integrated security=True; ``` ## IIS 設定站台的 Windows 驗證(SQL Server驗證無須進行此設定) 開好站台後,在 應用程式集區 > 選擇站台 > 進階設定 > 最下方的識別 > 將識別選擇為內建帳戶的 **ApplicationPoolIdentity** ![](https://i.imgur.com/cuNNzfv.png) ## 在資料庫中開啟權限 ### 作法 開啟 SQL Server管理介面 SQL Server Management Studio 安全性 > 登入(按右鍵)>新增登入 ![](https://i.imgur.com/41aifyi.png) ### 新增使用者 (Windows 驗證和SQL Server驗證皆適用) Windows驗證:名稱可以輸入 **IIS APPPOOL\站台名稱** SQL Server驗證:名稱隨意輸入,不用加\ ![](https://i.imgur.com/CYPyZC3.png) 在左邊頁籤的 **使用者對應** 給予資料庫以及角色權限,最高權限是資料庫擁有者 db_owner ![](https://i.imgur.com/aDso72v.png) ## 預設的資料庫角色權限 如果覺得 db_owner 權限太高,可以參考下表,試著調整成適合的權限 * db_owner 可以在資料庫上執行所有的組態和維護活動,也可以在 SQL Server中卸除資料庫。 (在 SQL Database 和 Azure Synapse 中,某些維護活動需要伺服器層級的權限,而且無法由 db_owners 執行。) * db_securityadmin 可以修改角色成員資格 (僅自訂角色) 以及管理權限。 此角色的成員可能會提升其權限,因此其動作應受到監視。 * db_accessadmin 可以針對 Windows 登入、Windows 群組及 SQL Server 登入加入或移除資料庫的存取權。 * db_backupoperator 可以備份資料庫。 * db_ddladmin 可在資料庫中執行任何「資料定義語言」(DDL) 的命令。 * db_datawriter 可以加入、刪除或變更所有使用者資料表中的資料。 * db_datareader 可以從所有使用者資料表和視圖讀取所有資料。 使用者物件可以存在於 sys 和 INFORMATION_SCHEMA 以外的任何架構中。 * db_denydatawriter 不能加入、修改或刪除資料庫中使用者資料表的任何資料。 * db_denydatareader 無法從資料庫內的使用者資料表和 views 讀取任何資料。 ## 參考來源 https://serverfault.com/questions/186923/login-failed-for-iis-apppool-asp-net-v4-0-sql-server-web https://stackoverflow.com/questions/7698286/login-failed-for-user-iis-apppool-asp-net-v4-0 https://docs.microsoft.com/zh-tw/dotnet/framework/data/adonet/connection-string-syntax https://docs.microsoft.com/zh-tw/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver15