SSL Provider错误0:目标主体名称不正确,SQL数据库登录失败
解决SQL Server连接时的SSL Provider目标主体名称错误
针对你遇到的(provider: SSL Provider, error: 0 - The target principal name is incorrect.)错误,结合EF Core Update-Database命令的使用场景,给出几个直接可行的解决方案:
修正SQL Server的SPN配置
这个错误大多和Kerberos认证所需的SPN(服务主体名称)不匹配有关,即使禁用加密也可能触发。- 打开管理员权限的命令提示符,用以下命令查看SQL服务账户的现有SPN:
比如默认实例用本地系统账户的话,命令是setspn -L <SQL服务账户名>setspn -L NT SERVICE\MSSQLSERVER - 如果找不到
MSSQLSvc/<服务器FQDN>:<端口>或MSSQLSvc/<服务器FQDN>:<实例名>格式的SPN,手动添加:
(把setspn -S MSSQLSvc/你的服务器全名:1433 NT SERVICE\MSSQLSERVER你的服务器全名换成实际的FQDN,比如server01.domain.com,1433是默认端口,命名实例换成对应端口或实例名)
- 打开管理员权限的命令提示符,用以下命令查看SQL服务账户的现有SPN:
修改连接字符串的数据源为服务器FQDN
把连接字符串里的Data Source=(LocalServer)换成服务器的完全限定域名,比如Data Source=server01.domain.com。因为SPN是绑定服务器FQDN的,用别名或简写可能导致主体名称匹配失败。强制使用NTLM认证绕过Kerberos
在连接字符串里替换Integrated Security=True为Integrated Security=SSPI;Auth=NTLM,直接跳过Kerberos的SPN验证逻辑。修改后的完整连接字符串示例:"DefaultConnectionStrings": "Data Source=server01.domain.com;Initial Catalog=你的数据库名;Integrated Security=SSPI;Auth=NTLM;Pooling=False;Encrypt=False;TrustServerCertificate=True;User Instance=False"检查SQL服务账户的SPN权限
如果SQL Server用的是域账户,需要在AD中给该账户添加「读取服务主体名称」和「写入服务主体名称」的权限,否则它无法自动注册正确的SPN。
内容的提问来源于stack exchange,提问作者incognito not sure
相关产品推荐
相关产品推荐

