运行SQL Server 2016.目前有一个托管在一个域中的解决方案,当然我们的访问点在另一个域中。我们需要以自动方式提取数据。
我们在凭据管理器中添加了一个Windows凭据,用于收集端点信息和一组凭据。
e.g。
此解决方案适用于许多工具,Excel,SSMS直接查询,Visual Studio。用户输入端点(服务器URL或IP /端口)并使用Windows集成安全性。建立连接,凭证存储完成技巧,用户通过身份验证。
SSMS示例
我的挑战是SSIS和SQL Agent。 SSIS包在VS2015中运行。将包部署到Integration Services目录 - 突出显示包并执行并运行。
创建一个SQL Server代理作业并执行该作业,我收到了这份礼物.....
登录失败:登录来自不受信任的域,不能与Windows身份验证一起使用
我创建了一个SQL凭证,创建了一个代理(SSIS包执行),创建了一个使用Credential运行方式的作业,但结果却相同。凭证必须在我的本地域或作业不会运行....当然localdomain \ username不会对远程数据连接进行身份验证。因此代理无助于这种情况。
我所期待的是,Windows凭据管理器会像手动运行作业时那样交换凭据,或者通过excel或其他任何方式交换凭证......
答案 0 :(得分:1)
我向微软开了一张票,并与他们的一个高级资源合作。
这似乎是SQL Agent中的一个错误。没有任何已知的原因或问题阻止SQL代理从Windows凭据存储中获取远程凭据,但事实并非如此。
一种可行的替代方法是使用命令行实用程序DTEXEC。对SSIS项目稍作修改,以确保所有连接管理器都处于程序包级别而不是项目(创建引用问题)。
这个解决方案并不理想,但它起作用,DTEXEC允许SSIS在商店中提取所需的凭证并执行而不会出现问题。
一旦微软完成他们的研究并回到我身边,我会跟进,机票仍然是开放的。
答案 1 :(得分:0)
您的窗口凭据帐户应该是AD用户帐户,该帐户位于具有全局或通用范围的组中。在拥有多个域的情况下,通用组很有用。
该进程将在其调用的任何上下文中执行(即由您,SQL代理或代理帐户执行)。它不会改变可执行上下文,因为它调用不同的进程,除非你务实地创建它,这无论如何都是坏主意......
有类似的问题,解决这个噩梦!在此过程中学到了很多有趣的AD配置技巧。
Understanding User and Group Accounts声明如下:
组可以有不同的范围 - 域本地,内置本地,全局和通用。也就是说,这些组具有不同的有效区域。
全球小组:
用于向域树或林中的任何域中的对象授予权限的组。全局组的成员只能包含定义它们的域中的帐户和组。
通用群组:
用于在整个域树或林中广泛授予权限的组。全局组的成员包括域树或林中任何域的帐户和组。
修改强>
如果只是从一个域到另一个域的数据拉取,可以先将数据导出到不受信任的域中的csv,然后将SFTP导入到ETL的TL(转换和加载)环境中(提取 - 转换 - 加载)过程可以发生吗?
SSIS将是一个很好的工具,但也可以使用C#和Powershell。
答案 2 :(得分:0)
很抱歉,将本地AD帐户的群组更改为Global或Universal不会产生任何影响。我对在使用SQL Agent的本地帐户上进行更改会有什么不同感到有点迷茫。该解决方案适用于所有工具,通过本地帐户替换以及Credential Manager中的远程帐户设置。如果我错过了,并且要进行此更改,请尽可能提供设置示例。
同样,SQL Server Agent似乎没有执行/遵循此过程,因为它可以在其他地方工作,但不能在代理执行的作业中工作。
所以我希望有人之前已经看过这样的事情并且有解决方案。
我的最终目标是自动从没有信任的远程SQL服务器中提取数据。我希望代理解决方案能够正常工作,但是当您将凭据设置为远程域\用户名时,该作业甚至不会执行。
有没有办法在SSIS包中设置我的连接,以明确地将凭据设置为远程域\ username \ pwd。我对此进行了一次刺杀,但也无法让它飞起来。如果是这样,一个例子对我来说是无价的。
我不在乎我如何到达球门线,只需要...感谢所有人的帮助