【问题标题】:SQL won't connect after deploying部署后 SQL 无法连接
【发布时间】:2016-07-18 16:36:37
【问题描述】:

我最近在 IIS (LocalDB) 上部署了我的网站。但是每当我尝试运行该网站时,SQL 都无法连接。我现在已经浏览了数百篇帖子/文章,但我无法解决它。

错误

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:50 - 发生本地数据库运行时错误。 无法创建自动实例。查看 Windows 应用程序事件 记录错误详情。 )

Windows 应用程序事件日志

Windows API 调用 SHGetKnownFolderPath 返回错误代码:5. Windows 系统错误信息是:访问被拒绝。在第 422 行报告。

第二个日志-

无法获取本地应用程序数据路径。很可能是用户个人资料 未加载。如果 LocalDB 在 IIS 下执行,请确保 已为当前用户启用配置文件加载。

我的连接字符串(都试过了)-

<appSettings>
    <add key="ConnectionString" value="Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=test;Integrated Security=True" />
    <!--<add key="ConnectionString" value="data source=(LocalDB)\MSSQLLocalDB;UID=SOME_USERNAME;PWD=SOME_PASSWORD;initial catalog=test;connection timeout=30"/>-->
  </appSettings>

我尝试编辑applicationHost.config
Load User Profile 对我来说已经是 True

我的 ApplicationHost.config 文件

 <applicationPools>

            <add name="Classic .NET AppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
            <add name=".NET v2.0 Classic" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" />
            <add name=".NET v2.0" managedRuntimeVersion="v2.0" />
            <add name=".NET v4.5 Classic" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" />
            <add name=".NET v4.5" managedRuntimeVersion="v4.0" />
            <add name="ASP.NET v4.0" managedRuntimeVersion="v4.0">

            <add name="DefaultAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated">
           <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="true" />
            </add>
        </applicationPools>

我的 IIS 管理器 -

DefaultApplicationPool -

我的网络应用配置 -

应用程序池权限

编辑-

添加了 IIS Apppool 使用

icacls c:\inetpub\wwwroot /grant "IIS APPPOOL\DefaultAppPool":(OI)(CI)(RX)

仍然无法连接。

感谢任何帮助。

我在 Windows 10 上使用 Visual Studio 2015 和 SQL Server 2016。

【问题讨论】:

  • 您是否为运行应用程序池的帐户启用了加载用户配置文件?
  • @Tim Load User Profile 对我来说已经是 True。
  • 是的,但是当您说它对您来说是真的时,您是指您的帐户,还是运行应用程序的应用程序池的帐户?
  • DefaultAppPool 为真。我的网络应用程序使用它。
  • 应用池账号是否对DB所在路径有读/写权限?

标签: asp.net sql-server iis sql-server-2016


【解决方案1】:

遇到了同样的问题。不过,我并没有尝试您所做的所有事情。我做了以下事情:

  1. IIS 管理器
  2. 应用程序池
  3. 找到您的应用所属的池(对我来说是.NET v4.5
  4. 右键->高级设置
  5. 向下滚动至Identity
  6. 从任何东西(对我来说是ApplicationPoolIdentity,和你一样)更改为LocalSystem

【讨论】:

  • 我遇到了完全相同的问题,这也对我有用!
  • 也在我的本地 IIS 中工作,但我使用的是本地数据库,而不是来自 sql server 我在提供程序服务器上遇到了同样的问题。但我不明白,因为使用他们给我的凭据,我从本地 iis 更改了 web.config 并且它起作用了。但是在他们的服务器上我也有同样的问题。你能告诉我发生了什么,以便我向他们的团队解释吗?
【解决方案2】:

虽然您可以尝试一些变通方法(在您的帐户下运行 SQL Server 或共享 LocalDB 实例并使用新创建的共享地址连接到它),但我认为这里最好的解决方案是升级到 SQL Server Express 2012这就是我最终所做的。

此博客条目中概述了详细说明: https://blogs.msdn.microsoft.com/sqlexpress/2011/12/08/using-localdb-with-full-iis-part-2-instance-ownership/

我浪费了将近一天的时间来确定原因和解决方法,并得出结论,如果我升级 SQL Server 版本,这可能是最简单和最未来的证明,因为 LocalDB 似乎不是为在 IIS 或类似环境中工作而设计的阅读博客后的环境。

【讨论】:

    【解决方案3】:

    我可以看到两个可能的错误。

    假设您的 SQL 服务器与 IIS 位于同一个框,并假设您的 ConnectionString 建议,您安装了带有命名实例“MSSQLLocalDB”的 SQL 服务器,您的连接字符串应该是:

    Data Source=localhost\MSSQLLocalDB;Initial Catalog=test;IntegratedSecurity=True"
    

    如果 LocalDB 在另一台机器上,不要使用主机名(除非你有 DNS 服务器),只需使用 IP 地址。

    现在鉴于您的应用程序正在使用 APPPOOL\DefaultAppPool,请务必授予此用户权限以执行您打算在 SQL 中执行的任何操作(例如,如果执行存储过程)。您必须将此添加为登录名,然后授予它对数据库的 EXECUTE、SELECT、INSERT、DELETE 权限。

    数据源必须始终是 /

    我建议你连接 SSMS 并确认主机名。我不希望“(”或“)”出现在那里。除非您只是指您的 (LocalDB),它可能是 192.168.0.1 等。

    【讨论】:

      【解决方案4】:

      我遇到了完全相同的问题,最后我解决了。希望它也适合你。 我的问题是我使用 Visual Studio 2017 创建了一个 Web 应用程序,默认情况下托管在 IIS Express 上。我改成 IIS 然后我得到了这个错误。

      在事件日志中,我看到了这两个错误:

      • Windows API 调用 SHGetKnownFolderPath 返回错误码:5. Windows 系统错误信息为:访问被拒绝。

      • 无法获取本地应用程序数据路径。很可能未加载用户配置文件。如果在 IIS 下执行 LocalDB,请确保为当前用户启用配置文件加载。

      对我来说,解决方案是:

      首先,我使用 SQL Server Management Studio 附加数据库,并登录到我在 web.config 连接字符串中找到的 (LocalDB)\MSSQLLocalDB。

      <connectionStrings>
       <add name="EFWeatherDBEntities" 
           connectionString="metadata=res://*/Models.EFModel.csdl|res://*/Models.EFModel.ssdl|res://*/Models.EFModel.msl;provider=System.Data.SqlClient;
           provider connection string=&quot;
           data source=(LocalDB)\MSSQLLocalDB;
           attachdbfilename=|DataDirectory|\WeatherDB.mdf;
           integrated security=True;connect timeout=30;
           MultipleActiveResultSets=True;App=EntityFramework&quot;"
           providerName="System.Data.EntityClient" />
      </connectionStrings>
      

      然后我在 IIS 中意识到,当我尝试在 Basic Settings 中单击 Test Settings 时,我收到了 Invalid Application Path 错误消息。 所以我将凭证更改为不同的用户(我的用户是管理员,但我相信没有管理员权限它也应该工作)。

      所以基本上:

      • 在 IIS 中点击网站

      • 点击右侧面板上的Basic Settings

      • 点击Connect As

      • Specific User部分输入用户

      • 然后点击Test Settings检查是否仍然出现路径错误。

      • 然后在Application Pool设置Identity to LocalSystem

      【讨论】:

        【解决方案5】:

        检查您的 SQL Server 连接字符串并在项目属性中启用 SQL Server 调试

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-16
          • 2021-10-31
          • 1970-01-01
          • 2020-02-29
          • 2021-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多