无法使用' IIS APPPOOL'打开数据库使用Windows身份验证时

时间:2018-03-04 16:46:11

标签: asp.net-mvc iis windows-authentication

我有一个使用Windows身份验证的ASP.net MVC Web应用程序,该部分运行良好。我向这个Web应用程序引入了一个SQL Server数据库,但是我在访问这个数据库时遇到了问题。

我执行了以下操作:

  1. 创建名为" MyDatabase"的数据库在SQL Server Express中。
  2. 注册我的网站以使用IIS而不是IIS Express。
  3. 在IIS中使用集成安全性创建了一个AppPool,并将其命名为#34; WebAppAppPool"
  4. Associated" WebAppAppPool"到我的网站。
  5. 添加" WebAppAppPool" SQL Server使用" IIS APPPOOL \ WebAppAppPool"
  6. 在SSMS中设置用户映射以授予对WebAppAppPool" WebAppAppPool"并选择db_datareader和db_datawriter到" MyDatabase"数据库中。
  7. 但我仍然收到此错误:

    Cannot open database "MyDatabase" requested by the login. The login failed.
    Login failed for user 'IIS APPPOOL\WebAppWinAuthenticationAppPool'.
    
    Description: An unhandled exception occurred during the execution of the
    current web request. Please review the stack trace for more information
    about the error and where it originated in the code. 
    
    Exception Details: System.Data.SqlClient.SqlException: Cannot open
    database "MyDatabase" requested by the login. The login failed.
    Login failed for user 'IIS APPPOOL\WebAppAppPool'.
    

    我尝试的事情:

    1. 我试图制作" IIS APPPOOL \ WebAppAppPool"用户是"所有者"数据库但没有区别,但仍然失败并出现相同的错误。

    2. 我已删除AppPool用户并重新创建但错误相同。

    3. 我创建了另一个asp.net MVC网络应用程序,但这次使用"用户身份验证"而不是" Windows身份验证",将相同的应用程序池关联到网站,创建了一个新的数据库(即MyDatabase0),分配了" IIS APPPOOL \ WebAppAppPool"到它并授予db_datareader和db_datawriter,这立即起作用。所有成员资格表都已成功创建。

    4. 我已经检查了'identity.Name'并且它被设置为我已登录的用户名,如网站,即MyMachine \ Me和Identity.AuthenticationType设置为协商。 impersonationLevel设置为'模拟'

    5. 我尝试过更改“身份”标识。在'过程模型'在IIS'到LocalSystem,LocalNetwork和NetworkService而不是使用ApplicationPoolIdentity,它没有任何区别。所有这些都产生了上述相同的错误,除了凭证名称匹配任何身份设置。

    6. 你能想到可能导致这个问题的其他任何事情吗?我是否遗漏了需要设置/完成的内容以使其正常工作?

      使用Windows身份验证时,您甚至可以使用AppPool吗?

      由于

1 个答案:

答案 0 :(得分:0)

由于您的连接字符串使用" Integrated Security = true",它正在选择应用程序池的标识(在本例中为IIS APPPOOL \ WebAppAppPool)以连接到数据库。有两种方法可以解决它。

  1. 在具有数据库访问权限的应用程序池上使用不同的标识,并且连接字符串中不需要进行任何更改。
  2. 使用以下格式的连接字符串,并且不需要更改应用程序池的标识。

    Server = myServerAddress; Database = myDataBase; User Id = myUsername; 密码= MYPASSWORD;

  3. 根据您的要求,您可以选择以上选项之一。