SQL 2000 和组名

SQL 2000 和组名

我有一台 SQL 2000 服务器,它有数据库,在数据库对象的用户部分下,我有一些 NT 4.0 组。这些组不久前使用具有 SID 历史记录的 ADMT 迁移到 Active Directory。原始源域组已被删除。显示的访问权限是 olddomain\groupname。我不知道为什么,如果它们是 ntfs 权限,它们会自动更新为 target\groupname。

AD 域中的用户仍有权访问数据库,因为他们是迁移组 (Target\groupname) 的成员。我想知道

1) 为什么显示旧组 (source\groupname),因为它不再存在。但仍然授予目标组访问权限? 2) 是否有简单的方法可以将组名从 source\groupname 更新为 target\groupname?

谢谢你的帮助。

答案1

1) 为什么显示旧组 (source\groupname) 时它已不存在。但仍然授予目标组访问权限?

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

2)有没有简单的方法可以将组名从 source\groupname 更新为 target\groupname?

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

  1. 添加具有所需名称的新数据库用户(例如目标\组名(英文):
  2. 为新用户分配与旧用户相同的角色和/或权限;
  3. 更改与 SQL Server 登录关联的数据库用户;以及
  4. 删除旧的数据库用户(警告: 在删除旧用户之前,我强烈建议检查所有源代码和对象依赖关系。如果有疑问,最好将其保留在原处,而不是破坏一个正常运行的应用程序。)。

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

sp_adduser
sp_addrolemember
GRANT
sp_change_users_login
sp_dropuser

答案2

SQL 将用户的记录放入数据库的系统用户授予数据库的登录访问权限时,此表将列出。此表中有一列是姓名对于 Windows 登录,它是帐户或组的域\用户或组名(取决于您如何进行数据库用户映射)。您的旧域名可能来自 sysusers 表中的该记录。访问基于 SID,这就是它仍然有效的原因。

运行此查询:

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

看看创建日期列。我猜想这会发生在您迁移域名之前。

相关内容