SQL Server安装后 SSMS 无法连接:身份验证模式错误

发布于:2025-04-06 ⋅ 阅读:(16) ⋅ 点赞:(0)

问题现象
使用 SQL Server Management Studio (SSMS) 连接时提示 “Login failed for user 'sa'”,错误代码 18456,无法通过 SQL Server 身份验证登录。


快速诊断
  1. 检查身份验证模式

    • 默认安装可能仅启用 Windows 身份验证

    • 通过命令行验证:

      Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\" -Name LoginMode
      • 返回值

        • 1:仅 Windows 身份验证

        • 2:混合模式(Windows + SQL Server 身份验证)

  2. 确认 sa 账户状态

    SELECT name, is_disabled FROM sys.sql_logins WHERE name = 'sa';
    • is_disabled = 0 表示账户已启用。


解决方案
步骤 1:启用混合身份验证模式
  1. 使用 SQL Server 配置管理器

    • 打开 SQL Server 配置管理器 > SQL Server 服务,右键实例选择 重新启动

    • 右键实例选择 属性 > 安全性,设置 服务器身份验证 为 SQL Server 和 Windows 身份验证模式

  2. 通过 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 账户
  1. 启用 sa 账户

    ALTER LOGIN sa ENABLE;
  2. 设置强密码

    ALTER LOGIN sa WITH PASSWORD = 'YourStrong!P@ssw0rd';
  3. 解除账户锁定(若存在):

    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

验证与日志分析
  1. 测试 sa 连接

    • 在 SSMS 中使用以下参数连接:

      • 服务器类型:数据库引擎

      • 身份验证:SQL Server 身份验证

      • 登录名:sa

      • 密码YourStrong!P@ssw0rd

  2. 检查错误日志

    • 日志路径:

      复制

      C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\ERRORLOG
    • 搜索 Login succeeded for user 'sa' 确认登录成功。


扩展场景:网络协议与防火墙配置
  • 若连接超时

    1. 启用 TCP/IP 协议

      • 在 SQL Server 配置管理器 > SQL Server 网络配置 中启用 TCP/IP。

    2. 配置防火墙规则

      New-NetFirewallRule -DisplayName "SQL Server 51433" -Direction Inbound -Protocol TCP -LocalPort 51433 -Action Allow
  • 若仍提示 18456 错误

    1. 查看详细错误状态

      SELECT * FROM sys.dm_exec_connections WHERE client_net_address = '<客户端IP>';
    2. 重置 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等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我