Permissions

在 SSIS 目錄中查看執行報告的權限

  • February 21, 2020

我們目前正在使用 SSIS 2012。使用者有什麼方法可以在沒有 ssis_admin 或 sysadmin 的情況下查看 SSIS 目錄下的執行報告?

這是用於生產環境的,我們不希望人們操縱 SSIS 目錄項目。

謝謝!

這是我們的解決方案(相信我它會完美執行!)

在調查了執行報告的儲存過程後,我們發現每次作業執行時,SSISDB 中的 internal.executions 表都會更新。為了查看本次執行的執行報告,我們需要執行如下程式碼:

EXEC SSISDB.catalog.grant_permission 
   @object_type = 4, 
   @object_id = @execution_id, 
   @principal_ID =  13, 
   @permission_type = 1;

此儲存過程將授予角色/使用者對數據庫中對象的特定訪問權限。@object_type 表示您需要對哪種類型的對象授予權限(4 表示操作);@object_id 表示我們要訪問的具體對象;@principal_ID 表示誰想要訪問;permission_type 表示我們想要什麼樣的訪問權限(1 表示只讀)。更多資訊請參考catalog.grant_permission(SSISDB 數據庫)

我們的目標是創建一個觸發器,每次作業執行時——意味著插入 internal.executions 表——使用上述 SP 授予角色對該操作資訊的權限。

然後,讓我們按照以下步驟設置執行報告查看權限:

  1. 創建一個使用者,觸發器將被執行為。此使用者應該能夠在 SSISDB 中執行觸發器並有權訪問 SSIS 目錄。在我們的例子中,我們在 SSISDB 下給它 db_owner 角色和 ssis_admin。
USE [master]
GO
CREATE LOGIN [ssis_job_viewer] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
USE [SSISDB]
GO
CREATE USER [ssis_job_viewer] FOR LOGIN [ssis_job_viewer]
GO
USE [SSISDB]
GO
ALTER ROLE [db_owner] ADD MEMBER [ssis_job_viewer]
GO
USE [SSISDB]
GO
ALTER ROLE [ssis_admin] ADD MEMBER [ssis_job_viewer]
GO
  1. 創建角色

$$ package_execution_viewer $$. 這個角色將在我們上面提到的儲存過程中使用。

USE [SSISDB]
GO
CREATE ROLE [package_execution_viewer]
GO
  1. 將使用者添加到

$$ package_execution_viewer $$

USE [SSISDB]
GO
ALTER ROLE [package_execution_viewer] ADD MEMBER [user1]
GO
USE [SSISDB]
GO
ALTER ROLE [package_execution_viewer] ADD MEMBER [user2]
GO
  1. 獲取 package_execution_viewer 角色的 principal_id。此 id 也將用於上述 SP。
SELECT * from sys.database_principals
GO
  1. 創建觸發器以授予 package_execution_viewer 的權限
USE [SSISDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [internal].[update_viewer_perms]
ON [internal].[executions]
WITH EXECUTE AS 'ssis_job_viewer'
AFTER INSERT
AS
declare @execution_id bigint
BEGIN
select @execution_id = execution_id from inserted
EXEC SSISDB.catalog.grant_permission 
   @object_type = 4, 
   @object_id = @execution_id, 
   @principal_ID =  13, 
   @permission_type = 1   **--Note the principal_id needs to be changed**
END
GO

搞定。這樣我們就可以讓人們訪問執行報告,而無需將他們設為 ssis_admin。嘗試一下並分享對這篇文章的任何想法!

引用自:https://dba.stackexchange.com/questions/78341