【问题标题】:Application cannot open SQL connection when on IIS在 IIS 上应用程序无法打开 SQL 连接
【发布时间】:2013-12-21 21:15:09
【问题描述】:

我有一个如下所示的连接字符串:

Server=.;Database=mydbname;Trusted_Connection=True;

当我使用 Visual Studio (IIS Express) 运行/调试我的应用程序时,这可以正常工作,但在通过 IIS-8 部署后,它会在打开连接时引发异常:

用户“IIS APPPOOL\mysite”登录失败。

我很困惑为什么会发生这种情况,为什么 IIS 在数据库不需要用户时将其用户添加到中间,为什么 IIS Express 没有发生这种情况?

【问题讨论】:

  • IIS express 适用于您的用户。 IIS 适用于应用程序池用户。添加到 sql express 权限以访问 IIS APPPOOL\mysite 的数据库。
  • 我正在使用SQL server 2012 Enterprise,您能否解释一下如何将此权限添加到sql?每次我对应用程序池进行一些更改时,我是否需要更改此设置?
  • 另外,请设置 Trusted_Connection=False,因为在连接字符串中设置 Trusted_Connection=true 将使用 IIS 身份用户配置文件覆盖 SQL 身份验证值。
  • @Ani 尝试了链接中的解决方案,但仍然有错误,但现在已更改,显示为 Login failed for user 'NT AUTHORITY\LOCAL SERVICE'.

标签: c# asp.net-mvc-4 iis sql-server-2012


【解决方案1】:

您正在使用 Trusted_Connection=True,因此将用户 ApplicationPoolIdentity 或 IIS APPPOOL\mysite 提供给 SQL 服务器。

选项 1。 在 SQL Server 中向 IIS APPPOOL\mysite 授予权限。

选项 2。 使用 User Id=User_Id;Password=****** 而不是 Trusted_Connection=True

【讨论】:

  • 但我的SQL Server 设置为 Windows 身份验证模式并且没有用户/通行证.. 我应该创建一个吗?
【解决方案2】:

发生这种情况是因为您要求使用受信任的连接建立连接,这意味着正在执行代码的操作系统用户将是连接到数据库的用户。

对于 IIS,操作系统用户通常在 IIS 应用程序池中定义,除非您在 web.config 中指定了要使用的模拟。

默认情况下(为了防止安全问题),用于 IIS 应用程序池的默认标识具有非常有限的功能。根据您的配置(SQL Server 与 IIS 相关(同一台机器,不同的机器),您可能需要为应用程序池指定不同的身份和/或您可能需要授予访问 SQL Server 到应用程序的权限池标识。

Microsoft article 包含有关如何配置 ASP.Net 模拟的其他信息。

我们始终将 Web 应用程序配置为模拟域用户,以便我们可以访问远程计算机上的数据库和其他资源,而无需影响 IIS 应用程序池设置。

【讨论】:

  • +1 让应用程序池在域服务帐户下运行可能是正确的方法
【解决方案3】:

在连接字符串中包含Trusted_Connection=true 将使用 IIS 身份用户配置文件覆盖 SQL 身份验证值。

设置Trusted_Connection=false

【讨论】:

    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 2017-02-24
    • 2023-04-01
    • 2023-03-23
    • 2018-03-27
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多