我在ASP.NET MVC网站中对Active Directory使用Windows身份验证。我现在正在尝试部署网站进行测试,但问题是我在登录时遇到以下异常:
无法打开登录请求的数据库“PrincipalServerDB”。登录失败。 用户'IIS APPPOOL \ WebExploit'登录失败。
我使用如下所述的身份验证: 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中的应用程序池:
“Démarré”意思是用法语开始的。答案 0 :(得分:2)
如果您执行了已发布的代码,则在master
数据库中创建了用户,而不是在用户数据库中。因此,您应该在用户数据库中创建它并从master
中删除它。
所以你需要执行以下代码:
use PrincipalServerDB;
create user [IIS APPPOOL\WebExploit] from login [IIS APPPOOL\WebExploit];
EXEC sp_addrolemember 'db_owner', 'IIS APPPOOL\WebExploit';