# 網站佈署到主機後無法登入所要求的資料庫 使用者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**  ## 在資料庫中開啟權限 ### 作法 開啟 SQL Server管理介面 SQL Server Management Studio 安全性 > 登入(按右鍵)>新增登入  ### 新增使用者 (Windows 驗證和SQL Server驗證皆適用) Windows驗證:名稱可以輸入 **IIS APPPOOL\站台名稱** SQL Server驗證:名稱隨意輸入,不用加\  在左邊頁籤的 **使用者對應** 給予資料庫以及角色權限,最高權限是資料庫擁有者 db_owner  ## 預設的資料庫角色權限 如果覺得 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
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.