问题现象:
使用 SQL Server Management Studio (SSMS) 连接时提示 “Login failed for user 'sa'”,错误代码 18456
,无法通过 SQL Server 身份验证登录。
快速诊断
检查身份验证模式:
默认安装可能仅启用 Windows 身份验证。
通过命令行验证:
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\" -Name LoginMode
返回值:
1
:仅 Windows 身份验证2
:混合模式(Windows + SQL Server 身份验证)
确认 sa 账户状态:
SELECT name, is_disabled FROM sys.sql_logins WHERE name = 'sa';
is_disabled = 0
表示账户已启用。
解决方案
步骤 1:启用混合身份验证模式
使用 SQL Server 配置管理器:
打开 SQL Server 配置管理器 > SQL Server 服务,右键实例选择 重新启动。
右键实例选择 属性 > 安全性,设置 服务器身份验证 为 SQL Server 和 Windows 身份验证模式。
通过 T-SQL 修改(需 Windows 身份验证登录):
EXEC sys.sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sys.sp_configure 'user instance timeout', 0; -- 防止超时 EXEC sys.sp_configure 'user instances enabled', 0; EXEC sys.sp_configure 'xp_cmdshell', 1; -- 可选:启用必要功能 RECONFIGURE;
步骤 2:启用并重置 sa 账户
启用 sa 账户:
ALTER LOGIN sa ENABLE;
设置强密码:
ALTER LOGIN sa WITH PASSWORD = 'YourStrong!P@ssw0rd';
解除账户锁定(若存在):
ALTER LOGIN sa WITH CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF; ALTER LOGIN sa WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
步骤 3:重启 SQL Server 服务
Restart-Service -Name "MSSQLSERVER" -Force
验证与日志分析
测试 sa 连接:
在 SSMS 中使用以下参数连接:
服务器类型:数据库引擎
身份验证:SQL Server 身份验证
登录名:sa
密码:
YourStrong!P@ssw0rd
检查错误日志:
日志路径:
复制
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\ERRORLOG
搜索
Login succeeded for user 'sa'
确认登录成功。
扩展场景:网络协议与防火墙配置
若连接超时:
启用 TCP/IP 协议:
在 SQL Server 配置管理器 > SQL Server 网络配置 中启用 TCP/IP。
配置防火墙规则:
New-NetFirewallRule -DisplayName "SQL Server 51433" -Direction Inbound -Protocol TCP -LocalPort 51433 -Action Allow
若仍提示
18456
错误:查看详细错误状态:
SELECT * FROM sys.dm_exec_connections WHERE client_net_address = '<客户端IP>';
重置 SA 密码策略:
ALTER LOGIN sa WITH PASSWORD = 'NewP@ss!2023' UNLOCK, CHECK_POLICY = ON;
安全建议
禁用默认 SA 账户(生产环境):
ALTER LOGIN sa DISABLE;
创建独立管理账户替代:
CREATE LOGIN AdminUser WITH PASSWORD = 'Secure!AdminPwd123'; ALTER SERVER ROLE sysadmin ADD MEMBER AdminUser;
关于作者:
15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我