我的老板发来请求我说:我想要一个 SQL 查询,列出特定组的所有域用户。我开始搜索查询。我找到了几个使用链接服务器的解决方案。
EXEC master.dbo.sp_addlinkedserver
@server = N'ADSI',
@srvproduct=N'Active Directory Service Interfaces',
@provider=N'ADSDSOObject',
@datasrc=N'adsdatasource'
然后
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'ADSI',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'DOMAIN\USER',
@rmtpassword='*********'
我用域管理员用户的信息替换了username
和password
,但我收到了这个错误
无法为链接服务器“ADSI”创建 OLE DB 提供程序“ADsDSOObject”的实例。
我们的域名是akilus.local
,但我没有替换数据源。
问题可能是什么?
为什么需要 SQL Server 来执行此任务?这不是 RDBMS 的目标。您必须费尽周折才能让 SQL Server 找到这些数据。
最快/最简单/最自然的方式来做到这一点?Active Directory PowerShell 模块。这是一个单行:
简而言之,让这样的逻辑远离 SQL Server,并将其放在它所属的操作系统中。
我建议
xp_logininfo
在尝试其他更激烈的方法之前使用。你可以从 BOL找到更多关于它的信息。只要有 SQL Server 服务(域中的成员服务器)的权限,您就应该能够执行以下命令:
如果这不起作用,我会简单地选择在 PowerShell 中执行此操作,因为有更多的控制权,并且需要配置更少的东西来设置它。