SQL Server 2008:用户“Domain\User”登录失败。无法打开明确指定的数据库

SQL Server 2008:用户“Domain\User”登录失败。无法打开明确指定的数据库

这与“SQL Server 2008 使用 ASP.NET 应用程序登录问题:无法打开明确指定的数据库“不幸的是,这个问题似乎尚未得到解决。

我的问题是巧妙的不同。首先,登录失败的帐户不是“NT AUTHORITY\NETWORK SERVICE”——它是一个实际的域帐户。其次,涉及两台机器——我从第一个问题中得知,这是一台运行 IIS 和 SQL 实例的单台机器。

尝试连接数据库的应用程序是运行在另一台服务器上的 ASP.NET 应用程序(如果有任何不同,我不确定它是否有。)该应用程序的 web.config 中使用的 ConnectionString 是:

数据源=MySQLServer;初始目录=MyDatabase;集成安全性=sspi;

并且将应用程序池设置为 Identity 的 NetworkService。

因此 - 在网络应用程序中,我收到以下错误:

无法打开登录请求的数据库“MyDatabase”。登录失败。用户“MyDomain\WebServerMachineName$”登录失败

在 SQL Server 日志中我看到:

用户“MyDomain\WebServerMachineName$”登录失败。原因:无法打开明确指定的数据库。[客户端:Web.Server.IP.Address]

对相关数据库运行以下 SQL:

USE [MyDatabase]
GO
SELECT 
 SDP.name AS [User Name],
 SDP.type_desc AS [User Type],
 UPPER(SDPS.name) AS [Database Role]
FROM sys.database_principals SDP 
INNER JOIN sys.database_role_members SDRM
ON SDP.principal_id=SDRM.member_principal_id 
INNER JOIN sys.database_principals SDPS 
ON SDRM.role_principal_id = SDPS.principal_id

得到这个结果:

MyDomain\WebServerMachineName$  WINDOWS_USER    DB_DDLADMIN
MyDomain\WebServerMachineName$  WINDOWS_USER    DB_DATAREADER
MyDomain\WebServerMachineName$  WINDOWS_USER    DB_DATAWRITER

在我看来这表明我已获得正确的权限。

有人知道为什么它不起作用,或者我如何才能进一步缩小问题范围吗?

答案1

仅仅因为你有 DDLADMIN、DATAREADER 和 DATAWRITER 访问权限数据库不是意味着用户实际上有权登录服务器

您能否验证您正在运行的帐户(在您的情况下为 WebServerMachineName)是否列在安全登录下(如下图所示)。

在此处输入图片描述

另外,我建议创建一个服务帐户,然后在 ASP.NET 应用程序中模拟该帐户。然后,您可以向该服务帐户授予数据库访问权限。

答案2

您检查过用户映射吗?右键单击上一篇文章中显示的安全/登录部分中的用户名,然后选择属性以检查用户映射部分,以确保特定数据库实例中的用户已映射到安全部分中的用户。

答案3

我现在基本放弃了,转而使用 SQL Server 登录。虽然我一般不太喜欢用它们代替 Windows ID,但这样更简单。

相关内容