SQLServer 使用ADSI执行分布式查询ActiveDorectory对象
深入了解 SQL Server 通过 ADSI 执行分布式查询 Active Directory 对象的实现方法
在 SQL Server 中,通过 ADSI(Active Directory 服务接口)执行分布式查询 Active Directory 对象是一个强大的功能。以下是实现这一功能的步骤:
第一步:创建链接服务器
为了开始,我们需要创建一个链接服务器,这可以通过执行系统存储过程 sp_addlinkedserver 来完成。具体的命令如下:
```sql
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'
```
通过上述命令,我们创建了一个名为 "ADSI" 的链接服务器,它连接到 Active Directory 服务,并使用 ADSDSOObject 作为数据源。
第二步:创建 SQL Server 认证登录
接下来,我们需要为链接服务器创建一个 SQL Server 认证的登录。这可以通过执行 sp_addlinkedsrvlogin 系统存储过程来完成。具体的命令如下:
```sql
EXEC sp_addlinkedsrvlogin @rmtsrvname = N'ADSI', @locallogin = NULL, @useself = N'False', @rmtuser = N'domain\Account', @rmtpassword = N'Password'
```
这里,我们为链接服务器 "ADSI" 配置了一个登录账户和密码,该账户有权访问 Active Directory。如果选择使用 Windows 授权登录,则可以通过 SQL Server 的安全委托功能访问 AD,无需额外的配置。
通过这些步骤,SQL Server 就能够通过 ADSI 执行分布式查询 Active Directory 对象了。值得注意的是,为了成功执行这些操作,需要有足够的权限和正确的配置。如果遇到任何问题,可以参考相关的官方文档或社区论坛进行排查和解决。
当我们想要查询活动目录(Active Directory)中的用户或组信息时,我们通常会使用SQL查询来执行此操作。当我们遇到返回结果限制在1000个对象以内的问题时,我们需要采取一些策略来解决这个问题。其中一种方法是使用字母循环。
让我们看一下如何使用SQL查询活动目录中的用户和组信息。通过以下代码,我们可以查询特定组织单位(OU)中的用户条目和组条目:
```sql
-- 查询某个OU中的用户条目
SELECT convert(varchar(50), [Name]) as FullName,
convert(varchar(50), Title) as Title,
convert(varchar(50), TelephoneNumber) as PhoneNumber
FROM openquery(ADSI, 'SELECT Name, Title, TelephoneNumber FROM 'LDAP://OU=Directors,OU=Atlanta,OU=Intelli,DC=vizability,DC=intelli'')
WHERE objectClass = 'User'
-- 查询某个OU中的组条目
SELECT convert(varchar(50), [Name]) as GroupName,
convert(varchar(50), [Description]) as GroupDescription
FROM openquery(ADSI, 'SELECT Name, Description FROM 'LDAP://OU=VizAbility Groups,DC=vizability,DC=intelli'')
WHERE objectClass = 'Group'
```
```sql
-- 创建临时表
CREATE TABLE tmpADUsers (employeeId varchar(10) NULL, SAMAccountName varchar(255) NOT NULL, email varchar(255) NULL)
GO
DECLARE @cmdstr varchar(255)
DECLARE @nAsciiValue smallint
DECLARE @sChar char(1)
SELECT @nAsciiValue = 65
WHILE @nAsciiValue < 91
BEGIN
SELECT @sChar = CHAR(@nAsciiValue)
EXEC master..xp_sprintf @cmdstr OUTPUT, 'SELECT employeeId, SAMAccountName, Mail FROM OPENQUERY(ADSI, ''SELECT Mail, SAMAccountName, employeeID FROM ''LDAP://dc=central,dc=mydomain,dc=int''WHERE objectCategory = ''Person'' AND SAMAccountName = ''%s'' '')', @sChar
INSERT tmpADUsers EXEC(@cmdstr)
SELECT @nAsciiValue = @nAsciiValue + 1
END
-- 查询临时表中的数据
SELECT FROM tmpADUsers
-- 删除临时表
DROP TABLE tmpADUsers
```
除了循环遍历字母表的方法外,另一种推荐的方法是修改活动目录的策略设置。我们可以通过使用Ntdsutil工具来修改服务器上的限制。以下是使用Ntdsutil修改策略设置的步骤:
1. 点击“开始”,然后运行“Run”。
2. 在“打开”文本框中,输入“ntdsutil”,然后按Enter键。
3. 在Ntdsutil提示符下,输入“LDAP policies”并按Enter键。
4. 在LDAP政策提示符下,输入“Set setting to variable”并按Enter键。例如,输入“Set MaxPoolThreads to 8”。此设置可能会根据您添加的处理器数量而更改。
5. 使用“Show Values”命令验证您的更改。要保存更改,请使用“Commit Changes”。
6. 完成操作后,输入“q”并按Enter键退出Ntdsutil。
通过修改策略设置,您可以增加活动目录返回结果的限制,从而解决返回结果限制在1000个对象以内的问题。请注意,在进行任何更改之前,请确保您了解这些更改可能对您的影响,并在必要时咨询相关专家。
编程语言
- SQLServer 使用ADSI执行分布式查询ActiveDorectory对象
- 浅析Javascript中双等号(==)隐性转换机制
- asp.net页面生命周期详解
- thinkPHP5.1框架中Request类四种调用方式示例
- 在ASP.NET 2.0中操作数据之四十九:为GridView控件添
- 解析php时间戳与日期的转换
- php数组函数array_push()、array_pop()及array_shift()简单
- jQuery实现简单的下拉菜单导航功能示例
- FCKEditor 自定义用户目录的修改步骤 (附源码)
- php求一个网段开始与结束IP地址的方法
- PHP实现限制域名访问的实现代码(本地验证)
- 10个实用的PHP正则表达式汇总
- Jquery中巧用Ajax的beforeSend方法
- ASP错误捕获的几种常规处理方式
- PHP聊天室简单实现方法详解
- jQuery ui实现动感的圆角渐变网站导航菜单效果代