当用户通过域组授予访问权限时,SQL Server 数据库访问失败

当用户通过域组授予访问权限时,SQL Server 数据库访问失败

在 SQL Server 2008 R2(在 Win2003 上运行)上,我们在通过域组登录时遇到问题 - 授予服务器实例登录访问权限,但无法访问服务器上的某些数据库。

SQL 服务器计算机是我们 AD 域的成员,但不是域控制器。我们在 SQL Server 上使用 Windows 身份验证。

我们为域组创建 SQL Server 登录名。我们将用户映射设置为该服务器上的数据库 XXX,并启用角色 datareader、datawriter 和 ddladmin。然后会发生什么 - 这些组成员的域用户可以连接到 SQL Server,但不能连接到此数据库 XXX。如果用户“user1”尝试连接,他会收到错误“无法打开登录请求的数据库‘XXX’。登录失败。用户‘domain\user1’登录失败。”

如果我手动将“domain\user1”添加到数据库XXX,并启用datareader、datawriter角色,那么user1就可以毫无问题地连接。

奇怪的是,用户 1 可以连接到同一台服务器上的其他 2 个数据库 - 此处也是通过 AD 域组,但与之前创建的不同组不同,并且用户未在这些数据库上单独设置为用户。这些数据库都是通过分离-附加从较旧的 SQL Server 2005 安装复制过来的,并且在 SQL-2005 上运行良好,现在在该 SQL-2008 R2 服务器上也运行良好。(它们在数据库属性中显示的用户帐户与有问题的数据库 XXX 的所有者相同。)

数据库XXX是在该R2服务器上创建的新数据库,AD域组也是新的。

目前,我可以手动添加用户作为解决方法,但这不会永远有效,我需要提示这里出了什么问题。附加数据 - SQL Server 服务在域管理员帐户上运行。

我找到了一篇文章,描述了 SQL Server 2005 中完全相同的问题:https://connect.microsoft.com/SQLServer/feedback/details/248615/login-fails-when-user-is-granted-access-via-a-domain-group 但这是 2006 年的问题,没有提供任何解决方案的线索,人们应该假设它已经得到了解决。

答案1

完全不考虑:以域管理员身份运行 SQL Server 不是最佳做法。您可能需要考虑以非特权域用户身份运行 SQL。

对于可以访问通过分离/附加移动的数据库的用户,SID 会随数据库一起移动。

如果我不得不猜测,根据行为,我要么说 SQL 在确定组成员身份时遇到困难,要么说数据库本身的权限缺失。

您可能需要运行SELECT * FROM sys.database_principals有关特定数据库的更多信息,并确保您的域组在那里。

答案2

如果我不得不猜测,您的用户在被添加到您用作 e SQL 登录的组后不会注销并重新登录。用户的访问令牌不会更新为新的组成员身份,直到该用户注销并重新登录到他们的工作站。这可以解释为什么旧组可以工作,而您正在测试的新组却不行。

相关内容