Permissions
在 SSIS 目錄中查看執行報告的權限
我們目前正在使用 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 授予角色對該操作資訊的權限。
然後,讓我們按照以下步驟設置執行報告查看權限:
- 創建一個使用者,觸發器將被執行為。此使用者應該能夠在 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
- 創建角色
$$ package_execution_viewer $$. 這個角色將在我們上面提到的儲存過程中使用。
USE [SSISDB] GO CREATE ROLE [package_execution_viewer] GO
- 將使用者添加到
$$ 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
- 獲取 package_execution_viewer 角色的 principal_id。此 id 也將用於上述 SP。
SELECT * from sys.database_principals GO
- 創建觸發器以授予 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。嘗試一下並分享對這篇文章的任何想法!