如何解决将 Active Directory 导入 SQL Server
我正在从事 Microsoft BI 项目。
我目前正在将我的系统连接到 SQL Server。我想将我的 Active Directory 连接到 SQL Server 中的一个表,并且我想每小时同步到一个表。这意味着 Active Directory 的详细信息每小时都会更新一次。
我意识到有必要使用 SSIS 来执行此操作,我很乐意在 SSIS 的帮助下将我的 AD 连接到 SQL Server。
解决方法
您可以通过两条路线将 AC 用户类别同步到表。您可以在 SSIS 数据流任务中使用 ADO 源,也可以编写自定义 .NET 代码作为脚本源的一部分。正确答案取决于您的团队维护和排除特定解决方案的能力以及 AD 树/林的大小。如果你是一家小商店(一千以下),任何事情都会奏效。如果您是一家较大的商店,那么您需要担心查询机制和返回的总行数,因为在单个查询中可以返回多少结果是有上限的。在这种情况下,脚本任务可能更有意义,因为您可以更轻松地编写查询以提取所有以 A、B 等开头的帐户。我从未使用过希伯来语,所以我认为可以做类似的过滤 aleph、下注等。
一般步骤
识别您的域控制器,因为您需要知道从哪个服务器询问信息。我不知道如何处理 Azure Active Directory 请求,因为我认为它在那里的工作方式有点不同,但没有需要它的客户端工作。
为 ADO.NET 创建一个连接管理器。使用“.Net Providers for OleDb\OLE DB Provider for Microsoft Directory Services”并将其指向您的 DC。
编写查询以拉回您需要的数据。根据评论,您似乎想要这样的东西
SELECT
distinguishedName,mail,samaccountname,mobile,telephoneNumber,objectSid,userAccountControl,title,sn
FROM
'LDAP://DC=domain,DC=net'
WHERE
sAMAccountType = 805306368
ORDER BY
sAMAccountName ASC
使用该查询,我们将添加一个数据流任务,并在其中添加一个 ADO.NET 源。将其配置为使用我们的 ADO.NET 连接管理器并使用上述查询(针对 LDAP 行和您需要/不需要的任何其他字段进行调整)
将 OLE DB 连接管理器添加到您的包中,并将其指向将记录数据的数据库。
将 OLE DB 目标添加到数据流并将 ADO.NET 源的输出行连接到此目标。在下拉列表和列选项卡中选择表格,确保您已连接所有列。您可能会遇到数据类型不匹配的问题,因此您需要弄清楚如何处理 - 要么更改表定义以匹配源,要么需要将数据转换/派生列组件添加到数据流将数据处理成正确的形状。
您可能想加入群组成员资格。不要。将此作为一项单独的任务,因为一个人可能是许多组的成员(在一个客户中,我在 94 个组中)。此外,MemberOf 数据类型是 SSIS 无法处理的 DistinguishedName、DN。因此,请先检查您的类型,然后再将它们添加到 AD 查询中。
参考资料
ldap query to get disabled user records with whenchanged within 30 days
http://billfellows.blogspot.com/2011/04/active-directory-ssis-data-source.html http://billfellows.blogspot.com/2013/11/biml-active-directory-ssis-data-source.html
,是否有您想要的 AD 特定部分?除了最小的公司,AD 往往巨大。每小时对整个森林制作 SQL 副本是一件非常奇怪的事情,可能会对您的 AD、网络、安全和域范围的性能产生许多不利影响。
如果您只是想备份您的 AD,我相信还有其他选项可用,特定于 Windows AD(甚至可能是内置的,我不是 AD 专家)。
如果您真的非常想这样做,这里有一个链接可以帮助您入门:https://social.technet.microsoft.com/Forums/ie/en-US/79bb4879-4d82-4a41-81a4-c62afc6c4b1e/copy-all-ad-objects-to-sql-database?forum=winserverDS。你可以通过谷歌搜索“Copy AD to Sql”找到更多关于此的文章。
但是,请注意警告:AD 实际上是一个多域范围的分布式数据库,尝试每小时将其复制到 SQL Server 等集中式数据库是禁忌的。你真的在反对它的设计。
根据评论更新:
基本上,您在这里的一个问题中涉及的太多了。 Sql Server、SSIS 和 Active Directory (AD) 本身都是巨大的主题,当您第一次尝试将所有这些一起使用时,您会遇到许多单独的问题,具体取决于您的环境、经验和特定的项目目标。我们无法在本网站的一个答案中预测所有这些问题。
您需要开始使用从以下链接获得的信息来开始自己实施,然后在遇到问题时提出具体问题。
这里是您可以开始的链接,
-
您在评论中提供的链接,解释了如何将 ADSI 设置为链接服务器以及如何在其上使用 T-SQL:https://yiengly.wordpress.com/2018/04/08/query-active-directory-in-sql-server-with-linked-server/
-
本文解释了如何在 SSIS DataFlow 任务中使用 AD(但限于 1000 行):https://dataqueen.unlimitedviz.com/2012/05/importing-data-from-active-directory-using-ssis/
-
这个相关的解释了如何在 SSIS 脚本任务中使用 AD 来绕过 DataFlow 任务限制:https://dataqueen.unlimitedviz.com/2012/09/get-around-active-directory-paging-on-ssis-import/
在您解决此问题的过程中,您可能会遇到特定问题,您可以在 https://dba.stackexchange.com 咨询这些问题,该网站对 Sql Server 和 SSIS 具有更具体的专业知识。
根据您的目标,我认为您会想要使用临时表方法。也就是说,使用 AD/Sql 查询将所有 AD 用户记录导入到与生产表具有相同列定义的新/空临时表中,然后使用 Merge 查询查找和更新更改的用户记录并插入新用户记录(这称为差异或类型 II 更新)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。