【发布时间】:2020-12-12 22:52:06
【问题描述】:
我有 asp.net core 3.1 web api。当我在 Visual Studio 本地运行项目时,它工作正常。但是当我将它发布到 IIS 并运行它时,我得到了错误。
500 Internal Server Error","error": "已成功与服务器建立连接,但在登录前握手期间发生错误。 (提供者:TCP Provider,错误:0 - 现有连接被远程主机强行关闭。)“} 或者用户 domain_name\machine_name 登录失败。
连接字符串如下所示
"ConnectionStrings": {
"ABCDB": "Server=xxx-test,80;Database=abc;Integrated Security=true;MultipleActiveResultSets=true;"
},
我为 .net core 3 安装了托管包。 我的应用程序在添加到数据库并具有权限的 ApplicationPoolIdentity 下运行。我的应用程序池使用 ApplicationPoolIdentity 设置为无托管代码。 未连接到数据库的 api 端点在已发布版本上工作得很好,但任何连接到数据库的东西都会出错。
我提到了几个链接,但运气不好。 https://www.loganfranken.com/blog/1345/why-your-web-application-cant-connect-to-sql-server/
IIS fails to pass windows credentials through to SQL Server for ASP.NET Core app
感谢任何帮助。
编辑:唯一适合我在自定义帐户(我的凭据)下运行 appPool 但在 IIS 上的 appPoolIdentity 下不起作用的东西
【问题讨论】:
-
为了提高安全性,返回给客户端的错误消息故意隐藏了身份验证错误的性质。但是,在SQL Server错误日志中,对应的错误中包含一个错误状态映射到一个认证失败条件,你可以根据日志中得到的错误状态来判断登录失败的原因。相关信息可以参考这个链接:docs.microsoft.com/en-us/previous-versions/sql/…
-
我检查了日志,它向我显示了相同的消息 Login failed for user domain name\machine name。找不到与提供的名称匹配的登录名。
-
您可以尝试在 IIS 中更改站点以使用应用程序池标识,然后将应用程序池标识更改为网络服务。
-
我试过了,但还是一样。
-
尝试将“TRUSTED_CONNECTION = TRUE”添加到连接字符串中。