≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server 使用ADSI执行分布式查询ActiveDorectory对象

人气:691 时间:2019-05-14

这篇文章主要为大家详细介绍了SQL Server 使用ADSI执行分布式查询ActiveDorectory对象,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

Step 1:Creating a Linked Server.
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5', 'ADSDSOObject', 'adsdatasource'
Step 2:Creating a SQL Server Authenticated Login
EXEC sp_addlinkedsrvlogin @rmtsrvname = N'ADSI', @locallogin = NULL , @useself = N'False', @rmtuser = N'domain\Account', @rmtpassword = N'Password'
对于 SQL Server 授权登录,可以使用sp_addlinkedsrvlogin 系统存储过程配置用于连接到目录服务的适当的登录/密码.
参考这里: http://blogs.msdn.com/euanga/archive/2007/03/22/faq-how-do-i-query-active-directory-from-sql-server.aspx
如果SQLServer使用Windows 授权登录,只需自映射就足以通过使用 SQL Server 安全委托来访问AD。简单点说就是直接运行第三步语句即可.
Step 3:Querying the Directory Service.

代码如下:

 
-- Query for a list of User entries in an OU using the SQL query dialect 
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=Intellinet,DC=vizability,DC=intellinet,DC=com'' 
where objectClass = ''User''') 
-- Query for a list of Group entries in an OU using the SQL query dialect 
select convert(varchar(50), [Name]) as GroupName, 
convert(varchar(50), [Description]) GroupDescription 
from openquery(ADSI, 
'select Name, Description 
from ''LDAP://OU=VizAbility Groups,DC=vizability,DC=intellinet,DC=com'' 
where objectClass = ''Group''') 

引用:
http://msdn2.microsoft.com/en-us/library/aa772380.aspx
http://www.atlantamdf.com/presentations/AtlantaMDF_111201_examples.txt

说明:但是这样默认查询出来的是1000个对象.怎么办呢?
方法一,通过字母来循环.见以下:

代码如下:

 
CREATE TABLE #tmpADUsers 
( employeeId varchar(10) NULL, 
SAMAccountName varchar(255) NOT NULL, 
email varchar(255) NULL) 
GO 
/**//* AD is limited to send 1000 records in one batch. In an ADO interface you can define this batch size, not in OPENQUERY. 
Because of this limitation, we just loop through the alphabet. 
*/ 
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 
DROP TABLE #tmpADUsers 
 

以上方法源自于:http://www.sqlservercentral.com/Forums/Topic231658-54-1.aspx#bm231954

我推荐的方法:在微软搜索到的.如何通过 NTDSUtil为服务器修改限制 maxPageSize

1.

Click Start, and then click Run.

2.

In the Open text box, type ntdsutil, and then press ENTER. To view help at any time, type ? at the command prompt.

Modifying policy settings

1.

At the Ntdsutil.exe command prompt, type LDAP policies, and then press ENTER.

2.

At the LDAP policy command prompt, type Set setting to variable, and then press ENTER. For example, type Set MaxPoolThreads to 8.

This setting changes if you add another processor to your server.

3.

You can use the Show Values command to verify your changes.

To save the changes, use Commit Changes.

4.

When you finish, type q, and then press ENTER.

5.

To quit Ntdsutil.exe, at the command prompt, type q, and then press ENTER.

资料来源:

http://support.microsoft.com/kb/315071/en-us

http://support.microsoft.com/?scid=kb%3Bzh-cn%3B299410&x=16&y=10

如何使用SQL查询活动目录对象语法: http://www.microsoft.com/china/technet/community/columns/scripts/sg0505.mspx#EMBAC

本文来自:http://www.q1010.com/179/7427-0.html

注:关于SQL Server 使用ADSI执行分布式查询ActiveDorectory对象的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • SQL Server分页存储过程(三)在sqlserver中打造更加准确的分页结果
  • 分页存储过程(二)在sqlserver中返回更加准确的分页结果
  • SQLServer上查看SQL语句的执行时间的方法
  • SQL Server 2000数据库同步 同步两个SQLServer数据库的内容
  • SQLServer触发器创建、删除、修改、查看示例代码
  • MMC提示不能打开文件SQLServerEnterpriseManager.MSC的解决方法
  • SQLServer 数据导入导出的几种方法小结
  • Sqlserver 存储过程中结合事务的代码
  • SQL SERVER 错误22022 SQLServerAgent当前未运行的解决方法
  • Sqlserver2000 数据库备份实例代码
上一篇:SQL Server查找所有包含了某个文本的存储过程
下一篇:SQL Server 执行计划及Sql查询优化初探
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。