ASP.NET Core MVC使用Windows认证连接SQL Server登录失败(Error:18456)
解决ASP.NET Core MVC Windows身份验证连接SQL Server出现Error 18456 State 58的问题
针对你遇到的「尝试使用SQL身份验证登录失败,服务器仅配置为集成身份验证模式」(Error 18456, Severity: 14, State: 58)错误,即使修改过身份验证模式、启用TCP/IP等仍未解决的情况,可按以下步骤逐一排查:
彻底检查连接字符串
确保连接字符串完全使用Windows身份验证,绝对不能包含User ID或Password字段(哪怕是空值也会触发SQL身份验证尝试)。正确示例:"ConnectionStrings": { "DefaultConnection": "Server=YOUR_SERVER_NAME;Database=YOUR_DB_NAME;Trusted_Connection=True;TrustServerCertificate=True;" }注:
Trusted_Connection=True与Integrated Security=True功能等价,二选一即可。重新确认SQL Server身份验证模式并重启服务
- 打开SQL Server Management Studio(SSMS),右键目标服务器→属性→安全性;
- 确认已选中SQL Server和Windows身份验证模式;
- 通过Win+R输入
services.msc打开服务列表,找到对应SQL Server实例服务(如SQL Server (MSSQLSERVER)),右键选择重启; - 若存在SQL Server Agent服务,建议一并重启,避免配置缓存残留。
检查应用程序运行身份(部署/开发环境)
- 若部署在IIS:打开IIS管理器→找到目标应用程序池→高级设置→进程模型→标识,确保使用内置账户(如
ApplicationPoolIdentity)或有权访问SQL Server的Windows账户; - 若使用IIS Express开发:打开项目根目录的
launchSettings.json,确认windowsAuthentication设为true,anonymousAuthentication设为false。
- 若部署在IIS:打开IIS管理器→找到目标应用程序池→高级设置→进程模型→标识,确保使用内置账户(如
验证Windows账户的SQL Server权限
- 在SSMS中展开服务器→安全性→登录名;
- 找到对应Windows账户(域账户格式为
DOMAIN\用户名,本地账户为机器名\用户名,IIS应用池身份为IIS APPPOOL\应用池名称); - 右键该登录名→属性→用户映射,勾选目标数据库,确保已创建对应数据库用户并分配必要权限(如
db_datareader、db_datawriter)。
清除数据库连接池(调试场景)
连接池可能缓存旧配置,可在代码初始化阶段添加以下代码清除(仅开发调试使用,生产环境不建议):using System.Data.SqlClient; // 在Program.cs的初始化逻辑中添加 SqlConnection.ClearAllPools();或直接重启整个应用程序(IIS/IIS Express)。
内容的提问来源于stack exchange,提问作者Vikas Singh
相关产品推荐
相关产品推荐

