侧边栏壁纸
  • 累计撰写 10 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SQLSERVER通过LINKSERVER获取企业内部AD信息

Chan Sheen
2024-11-27 / 0 评论 / 0 点赞 / 4 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

原文地址(本人CSDN):

https://blog.csdn.net/henvey1988/article/details/107981138?spm=1001.2014.3001.5501

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什么的,不知道个什么原因了。

0

评论区