无法登录到SQL Server + SQL Server身份验证 + 错误:18456

143

我在本地主机\sql2008服务器上创建了登录帐户(例如User123)

映射到默认数据库

SQL Server身份验证模式设置为Windows和SQL的两者

但是使用以下消息无法登录到SQL Server(对于User123)

注意:已多次检查用户名/密码是否正确输入

错误详细信息:

用户'User123'的登录失败(Net.SqlClient数据提供程序)

服务器名称: localhost\sql2008 错误编号: 18456 严重性: 14 状态: 1 行号: 65536

请提供任何帮助。


1
测试用户的SQL和Windows身份验证访问SqlServer Management Console,看看是否可以使用上述帐户访问。您正在使用哪个数据提供程序和连接字符串? - Joe Pitz
1
我正在尝试登录SSMS,但它抛出了上面的错误。 - Sreedhar
1
您可以使用管理员账户登录吗? - Joe Pitz
以管理员身份登录并检查事件日志。错误原因应在其中列出。请查看管理文件夹下的内容。 - Joe Pitz
另一种适合我的方法是访问http://stackoverflow.com/questions/28090747/local-sql-server-installed-by-other-user-account-how-to-access-from-new-user-ac。 - Mark Schultheiss
9个回答

376

您需要启用SQL Server身份验证:

  1. 在对象资源管理器中,右键单击服务器并点击“属性”。

DBMS Properties dialog

  1. 在“服务器属性”窗口中,点击左侧页面列表中的“安全性”。在“服务器身份验证”下选择“SQL Server和Windows身份验证模式”单选按钮。

SQL Server Authentication dialog

  1. 重新启动SQLEXPRESS服务。

3
如果 OP 明确表示“SQL Server 上的身份验证模式设置为 Windows 和 SQL”,那么这为什么能起作用呢? - Tim Schmelter
4
这个回答对问题来说是多余且没有用的。提问者已经说明了“SQL Server上的身份验证模式设置为Windows和SQL两者都可以”。 - Manachi
1
重要提示:在 SQL Management Studio 的对象资源管理器中右键单击重新启动...而不是 SQL 配置管理器。 - Dexter
所以我想问题是,我们如何设置用户和密码?我可以选择一个现有的 Windows 用户,并查看此用户已连接,并验证密码是否适用于“Windows”- 但是当我尝试使用其用户名/密码组合连接到数据库时,我收到“用户登录失败....” 的消息。 SQL Server 是否有单独需要配置的密码?如果有,应该在哪里配置? - JosephK
一个快速的提示...我关闭了SSMS并重新打开,但无法使其工作...花了我一分钟才意识到我实际上需要右键单击实例并重新启动它。以防其他人认为他们已经重新启动但实际上没有... - pauliec
但是为什么呢?你一开始就明确选择了它。 - undefined

54

默认情况下,登录失败的错误消息意味着客户端用户由于登录凭据不匹配而被服务器拒绝连接。您可能要检查的第一个任务是查看该用户是否在该SQL Server实例和相关数据库上具有相关特权,这很好。显然,如果没有设置必要的特权,则需要授予该用户登录相关特权以解决该问题。

尽管如果该用户对数据库和服务器具有相关授权,但如果服务器遇到该登录的凭据问题,则会阻止向SQL Server授予身份验证,客户端将收到以下错误消息:

Msg 18456, Level 14, State 1, Server <ServerName>, Line 1
Login failed for user '<Name>'

现在怎么办?通过查看错误信息,您可能觉得这个错误描述难以理解级别和状态。默认情况下,操作系统错误将显示“状态”为1,无论验证登录中存在的问题的性质如何。因此,为了进一步调查,您需要查看相关的SQL Server实例错误日志,以获取有关此错误严重性和状态的更多信息。您可以查看日志中相应的条目:

2007-05-17 00:12:00.34 Logon     Error: 18456, Severity: 14, State: 8.
or

2007-05-17 00:12:00.34 Logon     Login failed for user '<user name>'.

如上所述,错误的严重性和状态列对于查找问题源头的准确反映至关重要。在上述错误编号8中,状态为authentication failure due to password mismatch 表示密码不匹配导致身份验证失败。文档中提到:默认情况下,严重性低于19的用户定义消息在发生时不会发送到 Microsoft Windows 应用程序日志中。因此,严重性低于19的用户定义消息不会触发 SQL Server Agent 警报。

SQL Server协议(开发团队)的程序经理Sung Lee详细阐述了错误状态描述的更多信息:常见的错误状态及其说明如下表所示:

ERROR STATE       ERROR DESCRIPTION
------------------------------------------------------------------------------
2 and 5           Invalid userid
6                 Attempt to use a Windows login name with SQL Authentication
7                 Login disabled and password mismatch
8                 Password mismatch
9                 Invalid password
11 and 12         Valid login but server access failure
13                SQL Server service paused
18                Change password required


Well I'm not finished yet, what would you do in case of error:

2007-05-17 00:12:00.34 Logon     Login failed for user '<user name>'.

从该 SQL Server 实例的错误日志中可以看到没有定义严重性或状态级别。因此,下一个故障排除选项是查看事件查看器的安全日志[编辑因为缺少屏幕截图,但你可以想象一下,在事件日志中查找有趣的事件]。


1
谢谢,我会看看它的表现。 - Sreedhar
1
失效的链接,请考虑修订。 - Chris Hayes
11
应该选择下面更优秀的答案,而不是这个。 - void.pointer
6
@void.pointer,楼主已经确定了“SQL Server上的身份验证模式设置为Windows和SQL两者皆可”。因此下面的帖子与此问题无关。 - Manachi
错误状态=1缺失在上面。根据https://msdn.microsoft.com/en-us/library/cc645917.aspx,这意味着错误详细信息不可用;或者,您甚至没有权限接收错误状态。 - Kurt Johnson
显示剩余2条评论

52

我曾经遇到过同样的问题,但是我的问题是因为我没有将服务器身份验证设置为"SQL Server和Windows身份验证模式"(您已经设置了这个),在这里提及一下,以防有人在您的问题中漏掉此项。

您可以通过以下方式访问:

  • 右键单击实例(例如SQLServer2008)
  • 选择“属性”
  • 选择“安全性”选项
  • 将“服务器身份验证”更改为“SQL Server和Windows身份验证模式”
  • 重新启动SQLServer服务
    • 右键单击实例
    • 点击“重启”

7
我花了大约两个小时,因为我没有意识到需要重新启动整个服务器。这真是太荒谬了,居然需要重启服务器来解决这种问题。微软公司无法限制他们所推出的垃圾软件。 - Registered User
1
这也是为什么无法连接到安装有SQL Server的Amazon EC2实例的重要答案。 - Teoman shipahi

23

您可以通过以下方式访问此内容:

Right click on instance (IE SQLServer2008)
Select "Properties"
Select "Security" option
Change "Server authentication" to "SQL Server and Windows Authentication mode"
Restart the SQLServer service
    Right click on instance
    Click "Restart"

只是为了其他阅读此文的人:这个方法在我使用的2012 SQL Server上也行得通。谢谢。


1
谢谢,这很完美,直戳要害。被采纳的答案充满了好信息,但这才是对我有用的。 - Tony
4
由于OP提到“SQL Server的身份验证模式设置为Windows和SQL Server双重认证”,因此这种方法对他不起作用。 - Tim Schmelter

3

在启用“SQL Server和Windows身份验证模式”(请参阅上面的答案)后,导航到以下位置。

  1. 计算机管理(在开始菜单中)
  2. 服务和应用程序
  3. SQL Server配置管理器
  4. SQL Server网络配置
  5. MSSQLSERVER的协议
  6. 右键单击TCP / IP并启用它。

最后重新启动SQL Server。


2

尝试使用这个连接字符串

Server=ServerName;Database=DbName;Trusted_Connection=SSPI;MultipleActiveResultSets=true;TrustServerCertificate=true

2

如果您不重新启动SQL Server,则这些解决方案都无法为您工作。

找到SQLServerManager13.msc

然后在SQL Server Services部分选择SQL Server并重新启动它。

或者

MS SQL Server Management StudioObject Explorer菜单中选择您的服务器。

右键单击它并重新启动


2

在花费了很长时间并尝试了每个页面上的每个建议后,这解决了我的问题:

[服务器名称] > 安全性 > 登录 > [登录名] > 右键单击 > 属性 > 状态 > SQL Server身份验证

有一个复选框登录已锁定。它被选中并阻止我登录。我取消了复选框的选中状态,问题得到了解决。


1

解决这个问题的正确方法是确保你的SQL Server开启了SQL服务器身份验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接