原文地址(本人CSDN):
SQLSERVER通过LINKSERVER获取企业内部AD信息
因公司人事系统、业务系统及AD之间没有打通,导致信息不畅通,故此希望人事系统与AD之间打通,后期所有人员及AD信息从人事系统统一出口,所以也研究了一下通过SQLSERVER同步AD的问题,自己总结了本次的一些脚本。
开启相关服务
Exec sp_configure 'show advanced option',1
Reconfigure
Go
Exec sp_configure 'Ad Hoc Distributed Queries',1
Reconfigure
Go
以上两段语句,网上查询下来都是这样写,所以也不用我为什么我也不知道。
接下来,创建名为ADSI的LINKSERVER,如下:
创建LinkServer
EXEC sp_addlinkedserver 'ADSI', 'Active Directory Services 2.5',
'ADSDSOObject', 'adsdatasource'
Go
这段语句是微软官方的,所以也别问我为什么。
至此,LINKSERVER创建完成,后面需要给这个LINKSERVER配置账号、密码等信息。
一开始我是用的网上的这段语句:
EXEC sp_addlinkedsrvlogin 'ADSI', 'false', '数据库用户名', 'ad用户名', 'ad用户名称'
GO
--演变一下变成了:users:用户名,需要写成域\用户名这种格式
EXEC sp_addlinkedsrvlogin 'ADSI', false, '账号名(ADNAME\users)',
'CN=users,OU=XXX,DC=XXX,DC=com', 'users对应的密码'我之前用的这个创建的
但是在后来进行查询的时候频繁报错没权限,我就去你个大脚趾头了。
后来经过查资料改成了这样:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,@rmtuser=N'ADNAME\users',@rmtpassword='users对应的密码'
这时,再用下面的语句查询,就没问题了。
Select *
From OpenQuery(ADSI, 'SELECT sn,givenName,initials,department,mail,sAMAccountName FROM ''LDAP://XXXXXXX.com/OU=OU,DC=XXXXXX,DC=com '' WHERE objectClass=''Person'' AND objectClass=''User''')
这样就结束了,其实我也不知道为什么,总之大家按照整个成功了就成功了,不成功就自己去查资料吧。另外,可以把整个查询语句放到一个视图里。
参考资料:
https://docs.microsoft.com/zh-cn/windows/win32/adsi/distributed-query?redirectedfrom=MSDN#querying-the-directory-service
这个微软的官网,前面的还行,后面的按照他这个来,反正就是报错权限不对,不能访问OLEDB什么的,不知道个什么原因了。
评论区