2017-09-15 120 views
0

我在ASP.NET MVC网站中使用Active Directory中的Windows身份验证。我现在试图部署该网站进行测试,但问题是我在登录时会收到以下异常:用户IIS登录失败APPPOOL WebExploit

无法打开登录请求的数据库“PrincipalServerDB”。登录失败。 用户'IIS APPPOOL \ WebExploit'登录失败。

我按照这个教程部署到测试:https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-to-iis

而且我使用的身份验证如下所述: http://tech.trailmax.info/2016/03/using-owin-and-active-directory-to-authenticate-users-in-asp-net-mvc-5-application/ 使用OWIN认证。

我意识到我的问题缺乏理解,但这是因为我不明白发生了什么事情。我曾尝试在这篇文章https://stackoverflow.com/a/7698316/4714502描述下列步骤,但我已经做了Grant.sql脚本授予访问权限如下:

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool') 
BEGIN 
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
     FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
     DEFAULT_LANGUAGE=[us_english] 
    END 
    GO 
    CREATE USER [WebExploitUser] 
     FOR LOGIN [IIS APPPOOL\DefaultAppPool] 
    GO 
    EXEC sp_addrolemember 'db_owner', 'WebExploitUser' 
    GO 

在第一个教程,他们说:

当应用程序运行在开发计算机上的IIS中,应用程序使用默认应用程序池的凭据访问数据库。但是,默认情况下,应用程序池标识没有打开数据库的权限。所以你必须运行脚本来授予该权限。在本节中,您将创建稍后运行的脚本,以确保应用程序可以在IIS中运行时打开数据库。

这意味着它是具有权利的应用程序?不是真正的用户? 不知道如何解决此问题...

如果我查看SSMS,在我的PrincipalServerDB属性中,授权显示WebExploitUser的定义。

这里是我的IIS应用程序池:

enter image description here

'Démarré' 是指在法国开始。

+1

可以在IIS检查哪些用户被用来运行应用程序池?它看起来像是'IIS APPPOOL \ WebExploit'。如果是这样,那就是问题所在,因为你已经给了IIS APPPOOL \ DefaultAppPool帐户访问数据库的权限。如果没有,还有其他的东西没有正确配置。 –

+0

@Jan_V我都在我的应用程序池中。我实际上已经尝试使用“IIS APPPOOL \ DefaultAppPool”和“IIS APPPOOL \ WebExploit”运行授权脚本。我将在IIS –

回答

1

如果您执行的是您发布的代码,那么您在master数据库中创建了该用户,而不是在用户数据库中。所以你应该在用户数据库中创建它并从master中删除它。

所以,你需要执行下面的代码:

use PrincipalServerDB; 
create user [IIS APPPOOL\WebExploit] from login [IIS APPPOOL\WebExploit]; 
EXEC sp_addrolemember 'db_owner', 'IIS APPPOOL\WebExploit'; 
+0

中添加我的应用程序池的屏幕截图好的,我可以直接在SSMS中执行此操作吗? –

+0

是的,当然,你可以在SSMS中执行它 – sepupic

+1

我用你的代码更新了我的答案,使该db的用户db_owner – sepupic