SQL 2000和组名称

我有一个SQL 2000服务器有数据库,在数据库对象的用户部分,我有一些NT 4.0组。 这些组前一段时间使用ADMT和SID历史迁移到Active Directory。 原来的源域组已经被删除。 显示的访问是olddomain \ groupname。 我不知道为什么,如果他们是ntfs权限,他们会自动更新目标\组名。

AD域中的用户仍然可以访问数据库,因为它们是已迁移组(Target \ groupname)的成员。 我在想

1)为什么旧的组(source \ groupname)显示为不存在了。 但是访问仍然授予目标组? 2)是否有任何简单的方法来更新组名从源\组名到目标\组名?

谢谢你的帮助。

1)为什么旧的组(source \ groupname)显示为不存在了。 但是访问仍然授予目标组?

如果您要查看分配给相关数据库用户的SQL Serverlogin名,则可能会发现login名具有新的域名。 SQL Server 2000数据库用户有两个主要用途:(1)数据库安全上下文; 和(2)数据库模式名称(在更高版本中,用户和模式是完全独立的实体)。

2)是否有任何简单的方法来更新组名从源\组名到目标\组名?

从技术上讲,虽然SQL Server 2000不提供直接重命名数据库用户的方法,但可以通过执行以下操作来解决此限制:

  1. 添加具有所需名称的新数据库用户(例如target \ groupname );
  2. 为分配给旧用户的新用户分配相同的angular色和/或权限;
  3. 更改与SQL Serverlogin关联的数据库用户; 和
  4. 删除旧的数据库用户( 警告: 在删除旧用户之前,我强烈build议检查所有的源代码和对象依赖关系,如果有疑问,宁可让它停留在一个完美工作的应用程序中 )。

上述所有内容都可以通过SQL企业pipe理器直接执行,但是如果您需要编写脚本操作,则可以使用以下存储过程和Transact-SQL命令(请参阅SQL联机丛书以获取更多使用信息):

sp_adduser sp_addrolemember GRANT sp_change_users_login sp_dropuser 

当您授予对数据库的login访问权限时,SQL将该用户的logging放入数据库的sysusers表中。 此表中的一列是Windowslogin的名称 ,该名称是帐户或组的domain \ user_or_group_name(具体取决于您执行db用户映射的方式)。 您的旧域名可能来自sysusers表中的logging。 访问是基于SID,这就是为什么它仍然工作。

运行这个查询:

 select * from [dbname].dbo.sysusers where name='olddomain\groupname' 

并看看创build的列。 我猜这是在您迁移域名之前。