當因為驗證失敗而拒絕連線嘗試時,您會收到此錯誤訊息。 使用者登入可能會因為許多原因而失敗,例如不正確認證、密碼到期,以及啟用錯誤的驗證模式。 在許多情況下,錯誤碼包含描述。
使用者動作
下列範例是一些常見的登入失敗。 選取您遇到的確切錯誤,以針對問題進行疑難排解:
使用者 ' < username > ' 登入失敗,或使用者 ' < domain > \ < username > ' 登入失敗
使用者 'NT AUTHORITY\ANONYMOUS' 登入失敗
使用者 'empty' 的登入失敗
使用者 ' (null) ' 登入失敗
使用者 ' < username > ' 登入失敗,或使用者 ' < domain > \ < username > ' 登入失敗
如果未指定功能變數名稱,則問題在於登入嘗試SQL Server失敗。 如果指定功能變數名稱,問題就是失敗的 Windows 使用者帳戶登入。 如需潛在原因和建議的解決方案,請參閱:
可能的原因
建議的解決方式
您嘗試使用
SQL Server 驗證
,但 SQL Server 實例已設定為 Windows 驗證模式。
確認SQL Server已設定為使用
SQL Server 和 Windows 驗證模式
。 您可以在 [
安全性
] 頁面的 [SQL Server Management Studio (SSMS) 中對應實例的屬性]
底下,
檢閱和變更SQL Server實例的驗證模式。 如需詳細資訊,請參閱
變更伺服器驗證模式
。 或者,您可以將應用程式變更為使用
Windows 驗證模式
來連線到SQL Server。
注意
:您可以在此案例的SQL Server錯誤記錄中看到類似下列的訊息:
Login failed for user '<UserName>'. Reason: An attempt to login using SQL authentication failed. Server is configured for Windows authentication only.
登入不存在於您嘗試連線的SQL Server實例上。
確認SQL Server登入存在,且您已正確拼字。 如果登入不存在,請加以建立。 如果存在但拼錯,請在應用程式連接字串中更正。 SQL Server Errorlog 會有下列其中一則訊息:
-
Login failed for user 'username'. Reason: Could not find a login matching the name provided.
-
Login failed for user 'Domain\username'. Reason: Could not find a login matching the name provided.
如果您將使用 DEV 或 QA 伺服器的應用程式部署至生產環境,而且無法更新連接字串,這可能是常見的問題。 若要解決此問題,請驗證您連線到適當的伺服器。 如果不是,請更正連接字串。 如果是,請將登入存取權授與您的SQL Server。 或者,如果是直接授與存取權的 Windows 登入,或將它新增至允許連線到資料庫伺服器的本機或網域群組。 如需詳細資訊,請參閱
建立登入
。
您使用
SQL Server驗證
,但您為SQL Server登入指定的密碼不正確。
請檢查 SQL 錯誤記錄檔中的訊息,例如「
原因:密碼不符合所提供的登入
」,以確認原因。 若要修正此問題,請在應用程式中使用正確的密碼,或如果您無法記住密碼,請使用不同的帳戶。 或者,請與SQL Server系統管理員合作,重設帳戶的密碼。
如果應用程式SQL Server Integration Services (SSIS) ,作業可能會有多個層級的組態檔,這可能會覆寫封裝的連線管理員設定。
如果應用程式是由貴公司所撰寫,而且連接字串是以程式設計方式產生,請洽詢開發小組以解決問題。 暫時的因應措施是將連接字串硬式編碼並進行測試。 使用
UDL 檔案
或腳本來證明可以使用硬式編碼的連接字串來證明連線。
伺服器名稱不正確。
請確定您連線到正確的伺服器。
您嘗試使用 Windows 驗證 連線,但已登入不正確的網域。
確認您已正確登入正確的網域。 錯誤訊息通常會顯示功能變數名稱。
例如,您不是以系統管理員身分執行應用程式 (SSMS) 。
如果您嘗試使用系統管理員認證進行連線,請使用 [
以系統管理員身分執行
] 選項啟動您的應用程式。 連接之後,請將您的 Windows 使用者當做個別登入加入。
移轉至自主資料庫使用者之後,會刪除登入。
如果 Database Engine 支援自主資料庫,請確認移轉至自主資料庫使用者之後未刪除登入。 如需詳細資訊,請參閱
自主資料庫驗證:簡介
。
登入的預設資料庫離線或無法使用。
請洽詢您的SQL Server系統管理員,並解決與資料庫可用性相關的問題。 如果登入具有伺服器上其他資料庫的許可權,而且您不需要存取應用程式中目前設定的預設資料庫,請使用下列其中一個選項:
- 要求系統管理員使用
ALTER LOGIN
語句或 SSMS 變更登入的預設資料庫。
- 在應用程式
連接字串
中明確指定不同的資料庫。 或者,如果您使用 SSMS 切換至 [
連線屬性
] 索引標籤,即可指定目前可用的資料庫。SSMS 之類的應用程式可能會顯示如下的錯誤訊息:
Cannot open user default database. Login failed.
Login failed for user <user name>. (Microsoft SQL Server, Error: 4064)
SQL Server Errorlog 會有如下的錯誤訊息:
Login failed for user '<user name>'. Reason: Failed to open the database '<dbname>' specified in the login properties [CLIENT: <ip address>]
如需詳細資訊,請參閱
MSSQLSERVER_4064
。
連接字串或 SSMS 中明確指定的資料庫拼字不正確、離線或無法使用。
- 修正連接字串中的資料庫名稱。 如果在伺服器上使用區分大小寫定序,請注意區分大小寫。
- 如果資料庫名稱正確,請洽詢您的SQL Server系統管理員,並解決與資料庫可用性相關的問題。 檢查資料庫是否離線、未復原等等。
- 如果登入已對應至具有伺服器上其他資料庫許可權的使用者,而且您不需要存取應用程式中目前設定的資料庫,請在
連接字串
中指定不同的資料庫。 或者,如果您使用 SSMS 進行連線,請使用 [
連線屬性
] 索引標籤來指定目前可用的資料庫。
SQL Server Errorlog 會有如下的錯誤訊息:
Login failed for user <UserName>. Reason: Failed to open the explicitly specified database 'dbname'. [CLIENT: <ip address>]
注意
:如果登入的預設資料庫可用,SQL Server允許連線成功。 如需詳細資訊,請參閱
MSSQLSERVER_4064
。
使用者沒有要求之資料庫的許可權。
- 嘗試以另一個具有系統管理員許可權的使用者身分連線,以查看是否可以建立連線。
- 藉由建立對應的使用者 (來授與資料庫的登入存取權,例如)
CREATE USER [<UserName>] FOR LOGIN [UserName]
此外,請參閱
疑難排解錯誤 18456
中的大量錯誤碼清單。
如需更多疑難排解說明,請參閱
針對 SQL 用戶端/伺服器連線問題進行疑難排解
。
使用者 NT AUTHORITY\ANONYMOUS LOGON 登入失敗
此問題至少有四個案例。 在下表中,檢查每個適用的潛在原因,並使用適當的解決方式:如需
雙躍點
一詞的說明,請參閱下表下方的附注。
建議的解決方案
您嘗試將 NT LAN Manager (NTLM) 認證從一個服務傳遞至相同電腦上的另一個服務 (例如:從 IIS 到 SQL Server) ,但程式中發生失敗。
新增
DisableLoopbackCheck 或 BackConnectionHostNames
登錄專案。
在多部電腦上,有
雙躍點
(條件限制委派) 案例。 如果 Kerberos 連線因為服務主體名稱 (SPN) 問題而失敗,就可能發生此錯誤。
在每個SQL Server和網頁伺服器上執行
SQLCheck
。 使用疑難排解指南:
0600 認證委派問題和
0650 SQL Server連結的伺服器委派問題
。
如果涉及任何雙躍) 點 (條件限制委派,則可能會有重複的 SPN 存在,而且用戶端是以 LocalSystem 或另一個電腦帳戶的形式執行,而該帳戶會取得 NTLM 認證,而不是 Kerberos 認證。
使用
SQLCheck
或
Setspn.exe
來診斷並修正任何 SPN 相關問題。 另請檢閱
SQL Server 的 Kerberos Configuration Manager概觀
。
Windows 本機安全性原則可能已設定為防止電腦帳戶用於遠端驗證要求。
流覽至
[本機安全性原則
>
> ] [安全
策略安全選項
>
] [網路安全性:允許本機系統使用 NTLM 的電腦身分
識別],如果停用設定,請選取 [
已啟用
] 選項,然後選取 [
確定
]。
注意
:如 [
說明
] 索引標籤上的詳細資料,預設會在 Windows 7 和更新版本中啟用此原則。
使用限制委派時發生此問題的間歇性發生可能表示仲介層無法更新的過期票證存在。 這是連結伺服器案例或任何保留登入會話超過 10 小時的應用程式的預期行為。
將仲介層伺服器上的委派設定從
[信任這部電腦] 變更為僅限指定的服務 – 使用 Kerberos 僅
信任此電腦,僅委派至指定的服務 - 使用任何通訊協定。
如需詳細資訊,請參閱
SQL Server連結的伺服器雙躍點間歇性匿名登入
。
雙躍點通常牽涉到跨多部遠端電腦委派使用者認證。 例如,假設您有一個名為
SQL1
的SQL Server實例,您可以在其中為名為
SQL2
的遠端SQL Server建立連結伺服器。 在連結的伺服器安全性設定中,您已選取 [
使用登入目前的安全性內容進行]
選項。 使用此設定時,如果您從名為
Client1
的遠端用戶端電腦在
SQL1
上執行連結的伺服器查詢,則 Windows 認證必須先從
Client1
跳至
SQL1
,然後從
SQL1 跳至 SQL2
(,因此
稱為雙躍點) 。 如需詳細資訊,請參閱
瞭解 Kerberos 雙躍點
和
Kerberos 限制委派概觀
使用者登入失敗, (空白)
當使用者嘗試不成功登入時,就會發生此錯誤。 如果您的電腦未連線到網路,就可能發生此錯誤。 例如,您可能會收到類似下列的錯誤訊息:
Source: NETLOGON
Date: 8/12/2012 8:22:16 PM
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <computer name>
Description: This computer was not able to set up a secure session with a domain controller in domain due to the following: The remote procedure call was cancelled.
This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your domain administrator.
空字串表示SQL Server嘗試將認證交給本機安全性授權單位子系統服務 (LSASS) ,但因為某些問題而無法。 LSASS 無法使用,或無法連絡網域控制站。
檢查用戶端和伺服器上的事件記錄檔,以取得在失敗期間記錄的任何網路相關或 Active Directory 相關訊息。 如果您發現任何專案,請與您的網域系統管理員合作來修正問題。
使用者 '(null)' 登入失敗
「null」 的指示可能表示 LSASS 無法使用 SQL Server 服務帳號憑證來解密安全性權杖。 此狀況的主要原因是 SPN 與錯誤的帳戶相關聯。
若要修正問題,請依照下列步驟執行︰
使用 SQLCheck 或 Setspn.exe 來診斷和修正 SPN 相關問題。
使用 SQLCheck 檢查 SQL 服務帳戶是否信任委派。 如果輸出指出帳戶不信任委派,請與您的 Active Directory 系統管理員合作,以啟用帳戶的委派。
診斷和修正網域名稱系統 (DNS) 名稱解析問題。 例如:
使用 PowerShell 腳本偵測 IP 位址:
ping -a <your_target_machine>
(-4
特別用於 IPv4 和 -6
IPv6)
ping -a <your_remote_IPAddress>
使用 NSLookup 多次輸入您的本機和遠端電腦名稱稱和 IP 位址。
在傳回的結果中尋找任何不一致和不相符之處。 網路上 DNS 組態的精確度對於成功SQL Server連線很重要。 不正確的 DNS 專案可能會在稍後造成許多連線問題。
請確定防火牆或其他網路裝置不會封鎖用戶端連線到網域控制站。 SPN 會儲存在 Active Directory 中。 如果用戶端無法與目錄通訊,連線將無法成功。
為增加安全性,傳回用戶端的錯誤訊息會刻意隱藏驗證錯誤的原本形式。 不過,在SQL Server錯誤記錄檔中,對應的錯誤包含對應至驗證失敗狀況的錯誤狀態。 請將錯誤狀態與下列清單做比較,以判斷登入失敗的原因。
State
登入有效,但伺服器存取失敗。 此錯誤的其中一個可能原因是 Windows 使用者有權以本機系統管理員群組的成員身分SQL Server,但 Windows 未提供系統管理員認證。 若要連線,請使用 [以系統管理員身分執行] 選項啟動連接程式,然後將 Windows 使用者新增至SQL Server作為特定登入。
登入是有效的登入,但伺服器存取失敗。
密碼必須變更。
38, 46
找不到使用者所要求的資料庫。
當 SQL Server 設定為僅限使用 Windows 驗證,而用戶端嘗試使用 SQL 驗證登入時。 另一個原因是 SID 不相符。
102 - 111
Azure AD 失敗。
122 - 124
因為使用者名稱或密碼空白而失敗。
使用者所要求的資料庫不存在。
132 - 133
Azure AD 失敗。
其他錯誤狀態存在,表示有未預期的內部處理錯誤。
更罕見的可能原因
錯誤原因嘗試使用 SQL 驗證登入失敗。伺服器僅針對Windows 驗證進行設定。在下列情況下可以傳回。
當伺服器設定為混合模式驗證,且 ODBC 連線使用 TCP 通訊協定,而且連線不會明確指定連接應該使用信任的連接。
當 SQL Server 設定為混合模式驗證,且 ODBC 連線使用具名管道時,以及用來開啟具名管道的用戶端用來自動模擬使用者的認證,而且連接字串不會明確指定使用受信任的驗證。
若要解決此問題,請在連接字串中加上 TRUSTED_CONNECTION = TRUE
。
在此範例中,驗證錯誤狀態為 8。 這表示密碼不正確。
使用 Windows 驗證模式安裝SQL Server,稍後會變更為 SQL Server 和 Windows 驗證模式時,會一開始停用sa登入。 這將造成狀態 7 錯誤:「使用者 'sa' 登入失敗。」若要啟用 sa 登入,請參閱變更伺服器驗證模式。
0420 一致的驗證問題原因