如何在SQL Server权限上刷新AD安全组


12

我在Small Business Server 2003上使用Sql Server 2008。客户端正在使用WinXP。

我将用户添加到了Active Directory安全组;为什么该用户不能立即访问数据库?似乎在Sql Server中识别用户之前存在延迟。

我将AD安全组明确用于权限,因此不需要在Sql Server中添加单个用户。因此,实际上,我无需执行任何操作,只需将用户添加到AD安全组即可授予访问权限。

但是由于某种原因,Sql Server无法立即识别出该添加项。我已经看过很多次了。我将该用户添加到了组中,但是该用户直到第二天才能访问数据。似乎它不能实时查询Active Directory。你能确认是吗?

我需要做什么,以便Sql Server从Active Directory“刷新”用户列表?


在SQL Server 2008 Management Studio中,我使用安全组添加了服务器登录名,并在数据库上创建了映射到该登录名的用户。效果很好!
D_Bester

但是,在将新用户添加到安全组后,它无法访问指定的数据库。该用户可以使用另一个组访问服务器,因此只需测试与Sql Server的连接即可。我正在为用户(在她的计算机上)向Sql Server添加连接。当我指定数据库时,我希望它说数据库不可用。
D_Bester

抽查各种域控制器我发现复制确实在15分钟后完成,但是SQL忽略了AD组的新用户。重新启动SQL Server可以解决此问题,因此等待24小时也可以解决。一定是更好的方法。
亚伦·奥塞斯

Answers:


12

用户需要注销其工作站并重新登录。这就是为什么更改似乎在第二天生效的原因。这样做的原因是,当用户第二天登录时,他们从域控制器获取新令牌,并且该令牌包含他们所属的域组的列表。仅当用户登录其计算机时,才会更新具有域组列表的令牌,因此,如果用户从未注销,则令牌将永远不会更新。

如果您的域控制器位于不同的物理位置,则还需要考虑多站点域复制延迟。


1
是否可以在工作站上运行一个命令或脚本来“刷新”其AD令牌,以便它可以“知道”用户现在是新域组的成员,从而避免延迟?-更新:似乎有人建议klist purgedba.stackexchange.com/a/44922/29371上使用,但要注意的是,它可能会破坏用户必须重新建立/重新连接的其他缓存的资源访问器。
NateJ

@mrdenny关于如何处理服务帐户的任何建议?我们在服务帐户下运行所有​​SQL实例,并将这些服务帐户用于SQL Server之间的连接以及SSRS等。在任何给定时间,计算机之间都有许多连接。我们无法真正断开所有连接并在某处重新登录以获取新的AD组信息。
SomeGuy

对于服务帐户,您所能做的就是在需要新权限的计算机上重新启动服务。
mrdenny

5

当用户登录时,将为他们分配一个安全令牌,其中包括有关其组成员身份的所有信息。

即使您同时更改了AD中的组成员身份,此令牌也会一直保留到用户注销为止(此时将其丢弃)。您所做的更改仅在用户下次登录并收到新的安全令牌时才生效。

例如,在文件系统上分配权限时,可以重现相同的场景;这是AD行为,而不是SQL Server行为。


1

因此,您立即得到的结果是,每次运行cmd / script都将获得新的凭据,例如:

runas /netonly /user:domain\username "sqlcmd -S serverName -d dbname -q \"insert into testpermissions values (65)\""

使用cmd.exe(不是powershell,我无法得到正确的引用)。

这样,您每次都会获得一个新令牌(但必须输入密码)。如果事情太繁琐,您也可以使用保存的密码文本来做某事。

无论如何,为我工作,我希望它能对其他人有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.