为 IIS 授予数据库访问权限 APPPOOL\DefaultAppPool

Grant database access for IIS APPPOOL\DefaultAppPool

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

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

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

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

请多多指教。我想知道如何授予我的应用程序池访问数据库的权限...

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

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

终于修复了!!!

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

更新!!!

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

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

祝大家好运!