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

时间:2016-03-02 12:35:16

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

最后固定!!!

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

<强> UPDATE !!!

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

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

祝你好运!