C# - System.Data.SqlClient.SqlException:'无法生成SSPI上下文。'

时间:2018-02-28 13:47:18

标签: c# asp.net-core-2.0

尝试从IIS Express运行我的.NET Core 2.0应用程序时,出现以下错误:

System.Data.SqlClient.SqlException: 'Failed to generate SSPI context.'

尝试使用以下连接字符串(用户名和密码编辑)访问SQL 2012数据库服务器上的数据库时会发生这种情况:

"Server=10.10.127.170;Database=NGProd;user 
id=*;password=*;Trusted_Connection=True;MultipleActiveResultSets=true;"

我使用专门为此应用创建的SQL Server登录名和密码。我可以使用它登录SSMS并拥有对数据库的所有访问权限。我可以测试其他计算机上的连接,它工作正常。我还检查了SQL错误日志,当我尝试通过应用程序或通过SSMS登录时,没有报告任何错误。

我经历了几个博客,网站和论坛,看着"无法生成SSPI背景"错误,但这些决议都没有产生任何影响。

有人有什么想法吗?我很难过!

6 个答案:

答案 0 :(得分:8)

在连接字符串中设置参数Trusted_Connection=False

答案 1 :(得分:3)

我最近遇到了同样的问题。我将连接字符串更改为

"Server=10.10.127.170;Database=NGProd;user id=*;pwd=*;"

它对我有用。

希望这有帮助!

答案 2 :(得分:1)

您正在混合凭证类型。您应该或者使用集成安全性(aka Windows身份验证)用户名和密码,而不要同时使用两者。使用Trusted_Connection=true并在远程服务器上授予您的个人用户授权(我想现在不是这种情况),或者设置Trusted_Connection=false并使用以下用户名和密码授权。

此外,作为旁注,已经在另一个答案中指出了这一点,但是,在IIS Express runs under your user account上,部署到远程IIS服务器后不一定是 情况。如果您在IIS服务器和远程SQL Server实例之间使用集成安全性,则需要向IIS服务器本身授予登录权限才能进行此工作(或使其在非应用程序池用户的情况下运行)只是一个虚拟帐户,在Active Directory中没有实际用户。

如果您使用用户名和密码,则上一段不是问题,但是显然您需要安全地存储连接字符串。

答案 3 :(得分:0)

如前所述,它可能是由一系列问题引起的。其中之一是IIS中的 AppPool帐户。确认它有permissions,或者您可以将其从默认的内置帐户更新为您要访问服务器的帐户。在与您的应用绑定的应用池下,转到Advanced Settings > Process Model > Identity。然后选择自定义帐户并输入您的服务器帐户。请参阅下面的屏幕截图。https://gist.github.com/oneohthree/f528c7ae1e701ad990e6

答案 4 :(得分:0)

经过多次敲打我的脑袋和几个小时尝试每篇博文和我能找到的建议之后,我有一个疯狂的想法。我只是使用我创建的SQL Server凭据将远程SQL服务器链接到本地​​SQL实例。 BAM!现在就像魅力一样,即使我不得不在我的查询中多写一点。

答案 5 :(得分:0)

Trusted_Connection应该为false ... Trusted_Connection = False