将 Active Directory 导入 SQL Server

如何解决将 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) 本身都是巨大的主题,当您第一次尝试将所有这些一起使用时,您会遇到许多单独的问题,具体取决于您的环境、经验和特定的项目目标。我们无法在本网站的一个答案中预测所有这些问题。

您需要开始使用从以下链接获得的信息来开始自己实施,然后在遇到问题时提出具体问题。

这里是您可以开始的链接,

在您解决此问题的过程中,您可能会遇到特定问题,您可以在 https://dba.stackexchange.com 咨询这些问题,该网站对 Sql Server 和 SSIS 具有更具体的专业知识。

根据您的目标,我认为您会想要使用临时表方法。也就是说,使用 AD/Sql 查询将所有 AD 用户记录导入到与生产表具有相同列定义的新/空临时表中,然后使用 Merge 查询查找和更新更改的用户记录并插入新用户记录(这称为差异或类型 II 更新)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-