从IIS连接到SQL Server(ASP.NET Core)

vfhzx4xs  于 7个月前  发布在  SQL Server
关注(0)|答案(3)|浏览(124)

我花了几个小时尝试多种组合,只使用SQL用户名和密码将托管在IIS服务器上的asp.net核心站点连接到远程SQL服务器,而没有退出。这是我在appsettings.json中的连接字符串:

"ConnectionStrings": {
    "Booking": "Server=SQLServerName;Database=Booking;User Id=XXX;Password=XXX;"
  }

字符串

  • 我尝试设置集成安全性= false和可信连接= false
  • 我将应用程序池中的属性Identity更改为LocalSystem,尽管我已经尝试了所有选项。
  • 我可以连接到数据库从我的计算机到SQLManager没有任何问题。
  • 在事件查看器中,我看到下一个错误:Microsoft.Data.SqlClient.SqlException(0x 80131904):用户'DOMAIN\NAMEOFTHESERVER $'登录失败。
  • 数据库服务器中的SQL Server 2016,Web服务器中的Windows Server 2016。
  • 我使用windows身份验证进行用户身份验证,但我需要使用简单的用户和密码来连接到数据库。

知道我哪里做错了吗

r3i60tvu

r3i60tvu1#

SqlException(0x80131904):无法打开登录所请求的数据库。
这意味着您显示的连接字符串没有被使用,因为此用户名属于NT AUTHORITY\NETWORK SERVICE。因此,使用了另一个配置文件,例如appsettings.development.json,它使用Integrated Security=True,使用应用程序池的标识。
将web.config中的环境更改为生产环境,因此不使用appsettings.development.json

<system.webServer>
    <aspNetCore ...>
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />

字符串

laawzig2

laawzig22#

如果您为特定用户设置了sql db的权限,则可能会错过IIS中的设置权限。


的数据

8cdiaqws

8cdiaqws3#

如果将连接字符串用于SQL Server身份验证,(连接字符串中存在的用户ID和密码),并且您正在获取此线程中引用的错误(Login failed for user 'DOMAIN\MACHINENAME$'),确保删除OnConfiguring方法,该方法包含用于从数据库上下文类生成模型类的原始连接字符串在我的例子中,我使用了集成安全性来构建(https://www.entityframeworktutorial.net/efcore/code-model-for-existing-database-in-ef-core.aspx#google_vignette)数据库模型POCO,但后来我更改了appsettings.json中的连接字符串以使用SQL Server身份验证。
看起来appsettings.json连接字符串条目被忽略了,这是因为我的dbContext.cs类仍然有OnConfiguring方法,使用的是我用来生成模型的连接字符串(集成安全值)。
基本上,无论您如何连接到数据库,都要确保数据库上下文类没有使用连接字符串的OnConfiguring方法,该连接字符串将覆盖appsettings.jsonweb.config文件中的内容!

相关问题