当由于身份验证失败而拒绝连接尝试时,会收到此错误消息。 用户登录失败的原因有很多,例如凭据无效、密码过期和启用错误的身份验证模式。 在许多情况下,错误代码包括说明。
以下示例是一些常见的登录失败。 选择你遇到的确切错误来排查问题:
用户“username>”登录失败,用户“<domain>\<username>”<登录失败
用户“NT AUTHORITY\ANONYMOUS”登录失败
用户“空”登录失败
用户“ (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 用户作为单独的登录名添加。
迁移到包含的数据库用户后,将删除登录名。
如果数据库引擎支持包含的数据库,请确认在迁移到包含数据库用户后未删除登录名。 有关详细信息,请参阅
包含的数据库身份验证:简介
。
登录名的默认数据库处于脱机状态或不可用。
请与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
。
用户对请求的数据库没有权限。
- 尝试以另一个具有 sysadmin 权限的用户身份进行连接,以查看是否可以建立连接。
- 通过创建相应的用户 (授予对数据库的登录访问权限,
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和 Web 服务器上运行
SQLCheck
。 使用故障排除指南:
0600 凭据委派问题和
0650 SQL Server链接服务器委派问题
。
如果没有涉及双跃点 (约束委派) ,则可能存在重复的 SPN,并且客户端作为获取 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 脚本 Ping 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 错误日志中,对应的错误包含映射到身份验证失败条件的错误状态。 将错误状态与以下列表进行比较以确定登录失败的原因。
登录有效,但服务器访问失败。 此错误的一个可能原因是 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。 这表示密码不正确。
如果 SQL Server 是使用 Windows 身份验证模式安装的,并随后更改为 SQL Server 和 Windows 身份验证模式,则最初会禁用 sa 登录名。 这将导致状态 7 错误:“用户‘sa’登录失败。”若要启用 sa 登录名,请参阅更改服务器身份验证模式。
0420 一致身份验证问题的原因