在SQL Server 2008 R2(在Win2003上运行)上,我们遇到了通过域组进行login的问题 – login访问被授予服务器实例,但无法访问服务器上的某些数据库。
SQL服务器计算机是我们的AD域的成员,但不是域控制器。 我们在SQL Server上使用Windows身份validation。
我们为域组创buildSQL Serverlogin。 我们将用户映射设置为该服务器上的数据库XXX,我们启用angular色datareader,datawriter和ddladmin。 接下来会发生什么 – 属于这些组成员的域用户可以连接到SQL Server,但不能连接到这个数据库XXX。 如果用户“user1”尝试连接,他会得到错误“无法打开数据库XXX”login请求login失败login失败的用户“域\用户1”。
如果我手动将“domain \ user1”添加到数据库XXX并启用数据读取器,datawriterangular色,则user1没有任何连接问题。
奇怪的是,用户1可以连接到同一台服务器上的另外两个数据库 – 在这里也是通过一个AD域组,但是之前创build的一个不同的组,用户不是单独设置为这些数据库的用户。 这些数据库都是通过detach-attach从早期的SQL Server 2005安装中复制过来的,并且在SQL-2005上工作正常,而且现在也可以在SQL-2008 R2服务器上正常工作。 (它们在数据库属性中显示与有问题的数据库XXX相同的用户帐户)。
数据库XXX是在该R2服务器上创build的新数据库,AD域组也是新的。
我现在可以手动添加用户作为解决方法,但这不会永远工作,我需要一个提示,因为这里出了什么问题。 其他数据 – SQL Server服务在域pipe理员帐户上运行。
我发现了一篇描述SQL Server 2005完全相同的问题的文章: https : //connect.microsoft.com/SQLServer/feedback/details/248615/login-fails-when-user-is-granted-access-via-a -domain-group但是从2006年开始,对解决scheme没有任何线索,应该假定它已经被修复了。
完全放在一边:将SQL Server作为域pipe理员运行并不是最佳实践。 您可能需要考虑将SQL作为无特权的域用户运行。
对于可以访问通过detach / attach移动的数据库的用户,SID与数据库一起传输。
如果我必须猜测,根据行为,我会说SQL在确定组成员资格方面遇到困难,或者数据库本身的权限缺失。
您可能需要运行SELECT * FROM sys.database_principals以获取有关特定数据库的更多信息,并确保您的域组在那里。
如果我不得不猜测,您的用户在添加到您正在用作SQLlogin的组中后,不会退出并重新login。 用户的访问令牌不会使用新的组成员身份更新,直到该用户注销并返回到其工作站。 这可以解释为什么老年人可以工作,但是你正在testing的新事物却没有。