2017-08-27 67 views
0

我在我的SSIS包中创建了几个数据流,它们作为ETL过程的一部分执行截断表。我通过配置为使用服务帐户的SQL作业运行程序包。SSIS中截断表的最小权限

我最初为该服务帐户提供了该表的ALTER授权,但DBA已经复出说Alter无法使用,并且需要将最小权限分配给服务帐户以进行截断。

例如,

use CoreReferenceStaging 
GRANT CONNECT,EXECUTE,SELECT,DELETE, INSERT, UPDATE,ALTER ON database::CoreReferenceStaging TO "INT\svc-w-corerefdata-qa"; 
ALTER AUTHORIZATION ON [PartiesIssuerCreditRating] TO "INT\svc-w-corerefdata-qa"; 

目前我有16个存储数据流,单独执行截断表。 我最初以为创建了16个包含执行权限的存储过程,但我觉得它只是一个维护问题,只是每个调用一个截断表。有没有更好的方式来做到这一点,或通过分配角色等

你能告诉我最好的办法来处理这种情况?

+0

如果db仅仅是一个用于移动数据的临时数据库,我不明白为什么对这个数据库的权限应该是你的dba的任何问题。如果权限被锁定到临时数据库那有什么问题? – Tanner

+0

该名称正在升级,但最终甚至会被某个Web应用程序使用主数据库。 – Tom

回答

1

要提供最小权限,请在存储过程中封装TRUNCATE语句。可以为需要ALTER TABLE权限的数据库用户帐户指定EXECUTE AS子句,或者使用基于具有权限的用户的证书对proc进行签名。有关证书,用户和TRUNCATE TABLE proc的示例脚本,请参见Erland Sommarskog's article。本文还包含EXECUTE AS与模块签名的详细讨论,以通过存储过程授予权限。

+0

我不喜欢采用存储过程的方法,因为我需要创建16个存储过程并为每个存储过程提供权限,或者我必须使存储过程动态化 – Tom

+0

为什么单个存储过程无法截断全部16个表动态? –