通过“xp_logininfo”,我们可以提取 AD 安全组的成员
/* all groups user is member and group granting access */
EXEC xp_logininfo 'Domain\WindowsUser', 'all';
/* all user is in group */
EXEC xp_logininfo 'Domain\WindowsGroup', 'members';
问题: 我继承了许多安全组并发现重复的: 组要么具有相同的成员但具有不同的访问权限,要么 同一组内不同成员的访问权限 有些团体根本不再有成员
想法: 我想找到所有 Windows 组并将它们放入表中 然后(这就是我需要聪明的 DBA 的地方) 使用“xp_logininfo”创建一个新表,对第一个表中的每个名称执行操作
select
[name]
from [sys].[database_principals]
where [type] in ('G')
Insert Into #temptable1 ([name])
(theory)
EXEC xp_logininfo '#temptable1', 'members';
CREATE TABLE #temptable2 ( [account name] nvarchar(128), [type] varchar(8), [privilege] varchar(8), [mapped login name] nvarchar(128), [permission path] nvarchar(128) )
INSERT INTO #temptable2 ([account name], [type], [privilege], [mapped login name], [permission path])
到目前为止,我能够一次提取 AD 安全组的成员 1 个,但有超过 800 个组,仅收集数据并将其转移到 Excel 中进行比较是一项耗时的任务。
如果有人做过此操作或知道如何加快速度,我会很乐意提供帮助。
我想补充一点,我有阅读障碍,所以如果我需要重新解释其中任何内容,请告诉我。
更新:我发现了这个: 枚举 Windows 组成员 洛厄尔·伊萨吉雷,2017-02-24(首次发布:2016-03-17)
信息 - https://www.sqlservercentral.com/articles/enumerate-windows-group-members 代码 - https://www.sqlservercentral.com/wp-content/uploads/2019/05/EnumerateWindowsGroupMembers.sql
我用它将结果写入表格并比较数据