加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 从非sysadmin域用户拥有的SQL Agent功课运行SSIS

发布时间:2021-03-13 21:59:11 所属栏目:编程 来源:网络整理
导读:我有两个SSIS包,它们在一夜之间(通过SQL Server署理)运行,作为更大的SSIS陈设的一部门,没有任何题目.统统都在行使 Windows身份验证,而且打算的功课由sysadmin(我,我)拥有,并作为SQL Server署理处事帐户运行. 因此,数据本质上是源体系? transit db~进级? NDS一

我有两个SSIS包,它们在一夜之间(通过SQL Server署理)运行,作为更大的SSIS陈设的一部门,没有任何题目.统统都在行使 Windows身份验证,而且打算的功课由sysadmin(我,我)拥有,并作为SQL Server署理处事帐户运行.

因此,数据本质上是源体系?> transit db~>进级?> NDS一夜之间.

我体谅的两个SSIS包,处理赏罚传输db~>分期和分期?> NDS部门别离用于特定的一组数据.

域用户(非sysadmin)在源体系中执行某些操纵并将风趣的数据推送到传输数据库中,因此我必要一种要领在事变时刻内获取此更新的数据以更新NDS:确定最简朴的要领此人触发该ETL,是通过单击启用宏的Excel事变簿中的按钮,该按钮通过ODBC(行使Windows身份验证)毗连到SQL Server并执行存储进程.

存储进程如下所示:

create procedure dbo.UpdateMaterialInventory
as
begin
    execute msdb.dbo.UpdateMaterialInventory;
end

[msdb]中的“姐妹”存储进程如下所示:

create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
    execute msdb.dbo.sp_start_job N'NDS-ManualMaterialInventory';
end

此[SqlAgentProxy]用户是我在[msdb]中按照域用户的登录名建设的Windows用户,我向此UpdateMaterialInventory进程授予了执行权限.这停止了必需向域用户授予对msdb.dbo.sp_start_job的执行权限,这将是过多的.

SQL署理功课NDS-ManualMaterialInventory由域用户拥有,而且有两个步调,每个步调范例为[SQL Server Integration Services Package],配置为Run as SSISProxy.

SSISProxy是一个SQL Server署理署理,行使根据名称SSISProxyCredentials映射到[SQL Server Integration Services Package]子体系.域用户的登录名已添加到署理帐户主体.

SSISProxyCredentials是行使统一个域用户的标识建设的,该用户在一夜之间运行整个SSIS ETL,而且其暗码被四重搜查.

此刻,假如我运行这个:

execute as login=N'DOMAINthatperson'
exec NDS.dbo.UpdateMaterialInventory;
go

我获得这个输出:

Job 'NDS-ManualMaterialInventory' started successfully.

然而,事变经验汇报我们一个不那么令人激昂的故事:

The job failed.  The Job was invoked by User DOMAINthatperson.
The last step to run was step 1 (Extract).

第1步详情:

Executed as user: {domain user that runs SSIS ETL overnight}.
Microsoft (R) SQL Server Execute Package Utility  Version 12.0.4100.1 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.
Started:  2:18:50 PM  Failed to execute IS server package because of error 0x80131904.
Server: {server name},Package path: SSISDBFooBarfoobar.dtsx,Environment reference Id: NULL.
Description: Login failed for user '{domain user that runs SSIS ETL overnight}'.
Source: .Net SqlClient Data Provider 
Started:  2:18:50 PM  Finished: 2:18:51 PM  Elapsed:  0.094 seconds.
The package execution failed.
The step failed.

功课失败,任那里所都没有记录.

假如我将功课全部者变动为本身,并将步调“运行”变动为SQL Server署理处事帐户,则功课将运行,乐成并将1,067行记录到[元数据].[dbo].[sysssislog].

看起来有关怎样配置署理/凭据的题目.我做错了哪一部门?

办理要领

这个题目看起来比此刻伟大得多.因为您行使的是SQL 2014,因此您也许会被2012年推出的新安详成果所困扰.

独一真正重要的是:

Server: {server name},Environment reference Id: NULL.   
Description: Login failed for user '{domain user that runs SSIS ETL overnight}'.

您的署理用户的登录很也许无法会见SSISDB目次(纵然他也许有权会见SQL Server).
您必要将登录映射到SSISDB用户,并设置对Integration Services中SSISDB文件夹/项目标会见.

请查察此MSDN博客文章SSIS Catalog Access Control Tips和SQL 2012 SSIS Catalog Permissions

一旦您现实加载了包,您也许会碰着其他安详上下文题目,但您应该从集成处事自己得到更好的日记记录.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读