应用T-SQL举办运动目录查询

新近在某些项目中,需求针对TFS的用户依据所属的AD组来展开多少解析,但意识TFS中并从未存储用户所属的组音信,故考虑直接从AD中领取这一个消息并存放在SQL
Server的多少库表里面去。

二〇一八年10月二十二日,我想记录这一个生活。

透过一番GOOGLE后,找到了之类相关的资料:
https://community.spiceworks.com/how_to/27494-create-a-sql-linked-server-to-adsi
https://www.mssqltips.com/sqlservertip/2580/querying-active-directory-data-from-sql-server/
http://stackoverflow.com/questions/1766061/tsql-how-to-get-a-list-of-groups-that-a-user-belongs-to-in-active-diretory

二零一七年岁末,我先是次认真的给本人做布署时涉嫌:二零一八年本人想要修炼的第壹项硬本领是阅读100本书。途径得以是买书,借书,阅读电子书,可能去书吗。即便自个儿喜爱读书纸质书,可是100本全是购置的话,一则太贵,二则占地点。因而,小编给协调每一个月的买书数量是5本,预算是100元左右。剩下的3-4本可以通过看电子书或周周去三遍书呢阅读。

以下就是本身的测试进度。

前几天是二〇一八年的第3个礼拜一。降雨。

先是运行以下查询在SQL SE路虎极光VE奥迪Q3中创制 链接服务器

切合睡觉。

-- create a linked server
 EXEC sp_addlinkedserver @server = 'ADSI', @srvproduct = 'Active Directory Services 2.5', @provider = 'ADSDSOObject', @datasrc = 'adsdatasource'
 -- add AD accessiable account
 EXEC sp_addlinkedsrvlogin @rmtsrvname = 'ADSI', @useself = 'False', @locallogin = 'sa', @rmtuser = '{domain}\{user}', @rmtpassword = '{passowrd}'

自个儿坚守了心里的声响,去了书啊。

留神上述命令中的用户名和密码需求转移为对AD有访问权限的用户。运维已毕后得以在 服务器对象
| 链接服务器
中找到所创制的ADSI节点:

备感本人深夜的挑选,让本人走过了不均等的周二。

图片 1

10:30
AM到书呢,很庆幸有五个空位。挑了2本书,都想要。往常自己真的越发纠结,最后一定两本都拿,最终的末尾必将两本都看不完,而且两本都迈出。后天自个儿告诉要好,无论怎么样,作者不得不选用一本,并且做完选取之后自然不或者再纠结。然后,小编困难的拿起了咪蒙的《作者爱好那几个功力的世界》。

查看属性

请见谅本人的无知。对于咪蒙,作者只闻其名,不知其人,也没有读过其创作。当自己浏览了那本书的目录并初始看率先章节时,小编就被掀起了,好有趣,有时发自肺腑地笑,有时带笑中带泪。静静的看了三个多钟头。咪蒙是自媒体圈内有趣且有争辨的靶子。关于他的著述,作者无法登时评判。哪个人让本人如故阅读小白呢,想法相比较零散,也不周密。可是小编会先记下自身的开卷经验,待日后深远驾驭之后再评价。

图片 2

书啊周末相像会举行有个别观望分享会之类的位移。本没有打算参预,名字和作者都并未耳闻过,没有啥样概念。不过吃完午餐发现并未别的空余的交椅了,只能够屁颠屁颠的坐到沙龙分享会的岗位。本来是坐在最终三个任务,听进行者说只要人少会撤掉前面的一排椅子。赶紧跑到一穷二白的率先排去,挑了靠窗的岗位。第陆回主动坐在第二排,笔者听的非凡认真,因为本身被毫不起眼的,穿着老大耐劳的1个人四姨吸引了,她不怕明日本场分享会的中流砥柱,长篇散文《光禄坊三号》的撰稿人陈永和女孩子。

图片 3

她的声响很温柔。

明天大家就足以本着那个 链接服务器 举行询问了,比如如下查询

他讲的故事越发感人。

-- Query AD user properties
 SELECT * FROM OpenQuery(ADSI, 'SELECT displayName, sAMAccountName, givenName, sn, userAccountControl
 FROM ''LDAP://devopshub.local/DC=devopshub,DC=local'' where objectClass = ''User''')
 WHERE (sn is not null) and (givenName is not null)

他看起来尤其真诚。

此处是结果

他的同桌评价她:通透,有聪明。

图片 4

Wow,真的很棒。很享受她讲的典故,越发吸引人。从传说过渡到温馨的视角,又不出示突兀。因为本场分享会,小编喜爱上了那位阿姨,还有新书的签署和合照。不言而喻,机缘巧合,作者赚到了。作者会好好拜读那篇散文的。

诸如此类大家就可以把AD中的数据存放到SQL
SE兰德酷路泽VEMurano的数额表中,并依据displayName恐怕别的字段与TFS的DataWarehouse中的用户新闻举办join,得出那多少个唯有在AD中才能找到的新闻。

合照

唯独使用T-SQL查询用户所属的组信息并不便于,小编掌握的最好的消除办法是利用以下查询建立2个囤积进程,并透过它来获取有些用户的组音讯。那关键是因为userMembership在AD中是2个多值数据类型,直接用T-SQL来拍卖只怕相比辛勤的。

签名

CREATE PROCEDURE dbo.Get_ADGroups_ForUser
 (
 @Username NVARCHAR(256)
 )
 AS
 BEGIN
 DECLARE @Query NVARCHAR(1024), @Path NVARCHAR(1024)

 -- Find the fully qualified CN e.g: CN=Beau Holland,OU=Users,OU=Australia,OU=NSO, OU=Company,DC=Domain,DC=local
 -- replace "LDAP://DC=Domain,DC=local" with your own domain
 SET @Query = '
 SELECT @Path = distinguishedName
 FROM OPENQUERY(ADSI, ''
 SELECT distinguishedName
 FROM ''''LDAP://DC=devopshub,DC=local''''
 WHERE
 objectClass = ''''user'''' AND
 sAMAccountName = ''''' + @Username + '''''
 '')
 '
 EXEC SP_EXECUTESQL @Query, N'@Path NVARCHAR(1024) OUTPUT', @Path = @Path OUTPUT

 -- get all groups for a user
 -- replace "LDAP://DC=Domain,DC=local" with your own domain

SET @Query = '
 SELECT cn,AdsPath
 FROM OPENQUERY (ADSI, ''<LDAP://DC=devopshub,DC=local>;(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=' + @Path +'));cn, adspath;subtree'')'

 EXEC SP_EXECUTESQL @Query

 END
 GO

  -- Example of usage
 Get_ADGroups_ForUser 'leixu' --AccountName

一致,你要求替换你自个儿的AD 消息。运维那一个蕴藏进程的结果如下:

图片 5

迄今,大家所必要的信息就全部了。后边就是简单的T-SQL把这个数量放到表里面就OK了。

比方您必要AD中持有的属性名称,请参见以下链接:
http://www.kouti.com/tables/userattributes.htm


 

请关切微信公众号 devopshub,获取更多关于DevOps研发运转一体化的消息

图片 6

发表评论

电子邮件地址不会被公开。 必填项已用*标注