我在我的SSIS包中创建了几个数据流,它们作为ETL过程的一部分执行truncate table。我通过配置为使用服务帐户的SQL作业运行包。
我最初向服务帐户提供了该表的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个存储的数据流,分别执行Truncate表。 我最初想过创建包含执行权限的16个存储过程,但我觉得每个调用一个truncate表只是一个维护问题。有没有更好的方法来分配角色等。
你能告诉我最新的处理这种情况的方法吗?
答案 0 :(得分:1)
要提供最小权限,请将TRUNCATE
语句封装在存储过程中。为具有所需EXECUTE AS
权限的数据库用户帐户指定ALTER TABLE
子句,或者使用基于具有权限的用户的证书对proc进行签名。有关证书,用户和TRUNCATE TABLE
proc的示例脚本,请参阅Erland Sommarskog's article。本文还详细讨论了EXECUTE AS
与模块签名以通过存储过程授予权限。