【问题标题】:Grant database access for IIS APPPOOL\DefaultAppPool授予 IIS APPPOOL\DefaultAppPool 的数据库访问权限
【发布时间】:2016-06-15 07:37:35
【问题描述】:

我有一个使用在 IIS 7.5 上运行的实体框架的 ASP.NET 应用程序,它需要访问(首先创建)数据库,但我总是收到异常 Login failed for user 'IIS APPPOOL\DefaultAppPool'

我已经尝试在 SQL Server Management Studio 中为该用户创建登录名,正如许多帖子所推荐的那样,但它根本没有帮助...我已将带有 Windows 身份验证的 IIS APPPOOL\DefaultAppPool 登录添加到服务器安全>登录部分,但我在加载网站时仍然看到异常。

我也尝试过创建一个不同的应用程序池,将我的应用程序移动到其中并将其名称添加到数据库服务器的登录部分,但它也没有帮助。

当然,如果我将 DefaultAppPool 的标识设置为 LocalSystemNetworkService,它会成功创建并访问数据库,但我不想将这些标识用于我的应用程序池,因为它们具有高级权限并将服务器置于安全风险中......

请给我一些建议。我想知道如何授予我的应用程序池访问数据库的权限...

【问题讨论】:

    标签: asp.net sql-server entity-framework iis-7.5 application-pool


    【解决方案1】:

    我不知道究竟是什么导致了我的问题,但我自己找到了解决方案。

    不知何故,IIS APPPOOL\DefaultAppPool 甚至不需要数据库服务器的任何额外权限,即使其名称未包含在数据库的 Logins 部分中,它也可以连接到它。简单地说,它创建的数据库在某种程度上与IIS APPPOOL\DefaultAppPool 实体(无论它实际上是什么)紧密耦合,并且,如果您删除属于IIS APPPOOL\DefaultAppPool 或任何其他池的数据库,然后尝试使用相同的应用程序池,它的行为就好像数据库之前实际上没有被删除一样,但是就好像您试图使用一个没有创建它的帐户来访问它剩余的内容一样。也许这不是很容易理解我在说什么,但我认为删除属于应用程序池实例的数据库不仅会删除它,还会将它与该池“取消链接”,当您尝试在它不允许的同一个应用程序池中创建一个新数据库,因为您与它“取消链接”,即使它甚至不再存在。也许数据库服务器中仍然存在一些“链接”,但它们不再有效,因此应用程序池被视为试图覆盖数据库其余部分但无权执行此操作的东西。

    终于解决了!!!

    要解决此问题,只需创建一个名称与之前创建数据库的名称不同的新应用程序池,然后将您的应用程序移到那里即可。我不确定您是否可以创建具有相同名称的应用程序池,然后创建数据库,但我想可以。当然,在创建新池后重新启动 IIS(我通过 Internet Information Services (IIS) Manager 重新启动它)。

    更新!!!

    是的,我刚刚测试过,现在可以确认您可以创建一个同名的应用程序池,但在此之前,您不仅要从 IIS 管理器的应用程序池窗口中删除它,还要从 Users 目录中删除它您的计算机(存储用户文件的位置,即 C:\Users),然后您可以创建一个具有相同名称的新池。

    我花了很长时间才发现这种奇怪的行为。我经历了很多错误和试验,所以我很乐意分享它,这样也许有一天有人会比我更快地解决类似的问题。

    祝大家好运!

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2011-11-18
      • 2012-07-23
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多