登录到Microsoft SQL Server错误:18456

346

在尝试连接SQL Server时,我遇到了以下错误。

Microsoft SQL Server 错误: 18456

有人能告诉我这个错误代码的含义吗?


8
初步搜索似乎表明该错误代码是登录失败,并且通常会附带更详细的信息。 - David
2
而更详细的信息应该在SQL Server错误日志中。这个数字本身故意不告诉你太多,这样黑客就不能利用它来找出他们的尝试出错的地方。 - Tony Hopkinson
在此处找到有用的信息:https://sqlblog.org/2011/01/14/troubleshooting-error-18456 - sairfan
1
我刚刚需要以管理员身份运行。 - Jacksonkr
只需检查此解决方案: https://stackoverflow.com/questions/41386538/microsoft-sql-server-error-18456# - Akash Singh Sengar
25个回答

840
如果您正在尝试使用“SQL Server身份验证”进行连接,那么您可能需要修改服务器身份验证方式:
在Microsoft SQL Server Management Studio中的对象资源管理器窗口中:
1. 右键单击服务器,然后点击“属性” 2. 转到“安全性”页面 3. 在“服务器身份验证”下,选择“SQL Server和Windows身份验证模式”单选按钮 4. 点击“确定” 5. 重新启动SQL服务

39
谢谢。很遗憾在尝试添加用户时没有警告信息。 - JohnnyBizzle
13
你的意思是“右键单击服务器并点击属性”,这在哪里可以找到? - emcor
10
他的意思是你对象资源管理器中的顶级节点 - 那个带有播放按钮的黄色圆柱体。 - JGilmartin
23
这是一个非常常见的问题,人们经常遇到。你可以尽情创建SQL Server登录帐户,而不意识到这个简单的设置已关闭,这真的很令人困惑。在我看来,我建议这个回答是正确的。 - user2043
10
当你遇到错误代码18456,意味着你无法连接时,你将如何能够在“对象资源管理器”中连接到服务器? - Shai Alon
显示剩余6条评论

78
请查看数据平台团队的这篇MSDN博客文章。
您需要查看错误消息中的状态部分,以找到问题的根本原因。
2, 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, 12 = Valid login but server access failure
13 = SQL Server service paused
18 = Change password required

46
不是自吹自擂,但我在这里编写了更多的信息:https://sqlblog.org/blogs/aaron_bertrand/archive/2011/01/14/sql-server-v-next-denali-additional-states-for-error-18456.aspx - Aaron Bertrand
1
我很想点赞,但我犹豫了,因为回答那些可以通过谷歌得到答案的问题只会鼓励人们继续在这里提问而不是搜索... - Aaron Bertrand
15
这里的99%问题可能都可以通过谷歌回答,但是一个简单直接的问答可以节省大量搜索时间和阅读常常冗长的文章/博客,所以我会给你点赞! - Chris Nevill
15
当我使用谷歌搜索时,这是我找到答案的地方(谷歌比搜索站点的搜索引擎更好...)。 - Cos Callis
2
感谢@AaronBertrand提供的信息。该页面已经移动至:https://sqlblog.org/2020/07/28/troubleshooting-error-18456 - wilson
显示剩余8条评论

37

在打开之前,请右键单击并选择“以管理员身份运行”。这对我解决了问题。


3
这对我来说是解决方法。在错误信息中,我有State: 1 - GraehamF
@Gsic 你真是个救星。我已经苦苦挣扎了一天多,而你的解决方案解决了我的问题。谢谢。 - Karthik
4
在开始之前打开什么? - Mike
我猜他们指的是SQL Server Management Studio (SSMS)。 - undefined

19

我遇到了这个问题。

请查看附加的图片,

步骤1:进入服务器属性

步骤2:进入安全选项

步骤3:将服务器身份验证更改为SQL服务器和Windows身份验证模式,并重新启动Sql服务器。

输入图像描述


11

首先查看错误的详细信息, 如果“state”为“1”, 请确保在SQL Server / 属性/ 安全性下,数据库设置为使用SQL和Windows身份验证。

对于其他状态,请参考上面的答案....


1
哇,谢谢!我的所有登录都无法使用,然后我偶然发现了这个答案,并发现我的 SQL Express 实例从“SQL 和 Windows 身份验证”更改为“Windows 身份验证”。将其改回来,一切正常了。 - Ian Kemp
1
另外,仅仅关闭 SSMS 是不够的,需要重启 SqlServer 服务才能使更改生效。 - Ravid Goldenberg

10

更新一下,如果其他人的登录设置已经正确配置,但仍遇到此错误,则可以使用以下解决方案:

如果您正在尝试使用“SQL Server身份验证”连接,则可能需要修改服务器身份验证方式:

在Microsoft SQL Server Management Studio的对象资源管理器中:

右键单击服务器并单击“属性”

转到“安全性”页面

在服务器身份验证下选择“SQL Server和Windows身份验证模式”单选按钮

单击“确定”

重新启动SQL Services


1
这是我的修复,谢谢!这是一个新的SQLExpress服务器。 - Charlie

9
  1. 检查您的服务器->属性中是否启用了混合模式身份验证
  2. 然后在服务器->安全性中创建一个登录名
  3. 为该登录名在您的数据库中创建一个用户
  4. 然后右键单击实例并选择重新启动以重启您的服务器

9
如果您更改了登录用户凭据或添加了新的登录用户,则需要重新启动SQL Server服务才能登录。操作如下:

前往--> 服务 灰色行

然后进入SQL Server(MSSQLSERVER)并停止并重新启动服务。

现在尝试登录,希望您可以成功。

谢谢


6

我刚遇到了这个问题,结果和所有其他列出的情况都不一样。

我恰好有两个虚拟服务器托管在同一个集群中,每个服务器都有自己的IP地址。主机将其中一个服务器配置为SQL Server,另一个服务器配置为Web服务器。然而,SQL Server已经安装并在两台服务器上运行。主机忘记说明哪个服务器是SQL,哪个是Web,所以我假设第一个是Web,第二个是SQL。

当我连接到(我认为是)SQL Server并尝试通过SSMS连接,选择Windows身份验证时,我得到了这个问题中提到的错误。在抓狂了很长时间后,我检查了所有设置,包括SQL Server网络配置、MSSQLSERVER协议:

screenshot of TCP/IP configuration

双击TCP/IP后,我得到了这个:

TCP/IP properties, showing wrong IP address

IP地址是另一个虚拟服务器的!这最终让我意识到我只是混淆了服务器,所有的工作都在第二个服务器上正常运行。


5

您也可以使用Windows身份验证直接登录,并运行以下查询以启用它:

ALTER LOGIN sa ENABLE ;  
GO  
ALTER LOGIN sa WITH PASSWORD = '<enterStrongPasswordHere>' ;  
GO

来源:https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/change-server-authentication-mode

在 SQL Server 中,服务器身份验证模式决定谁可以登录到 SQL Server。Windows 身份验证模式和 SQL Server 身份验证模式是可供选择的身份验证模式。

默认情况下,SQL Server 安装为仅允许 Windows 身份验证模式。要启用 SQL Server 身份验证模式,请使用以下过程:

  1. 使用 SQL Server Management Studio 或 Transact-SQL 更改服务器身份验证属性。
  2. 重新启动 SQL Server 实例。

重要提示:更改服务器身份验证模式可能会影响现有应用程序。请确保在更改之前已经测试了应用程序。


我很高兴它能帮到你。 - Jose Ortega
你是正确的Jose... - toha

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