1

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

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

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

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

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

回答

0

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

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

SO最后的修正!

要解决这个问题,只需创建一个与先前创建数据库的名称不同的新应用程序池,然后将应用程序移到该应用程序池中,并且它将工作。我不确定是否可以使用相同的名称创建应用程序池,然后创建数据库,但我想是的。当然,在创建新池之后,重新启动IIS(通过Internet Information Services (IIS) Manager重新启动它)。

UPDATE !!!

是的,我刚刚测试,现在可以证实,你可以创建一个同名的应用程序池,但你必须不仅从IIS管理器中的应用程序池的窗口,但也从Users目录中删除此之前,你的计算机(存储用户文件的地方,例如C:\ Users),然后你可以创建一个同名的新池。

我花了很长时间才发现这种奇怪的行为。我通过很多错误和尝试做到了这一点,所以我很乐意分享它,以便某天有人能够比我更快地解决类似的问题。

祝你好运!