在 SSIS 目录中查看执行报告的权限

Joa*_*n.B 9 permissions catalogs ssis-2012

我们目前正在使用 SSIS 2012。有没有办法让用户在没有 ssis_admin 或 sysadmin 的情况下查看 SSIS 目录下的执行报告?

这是针对生产环境的,我们不希望人们操纵 SSIS 目录项目。

谢谢!

Joa*_*n.B 12

这是我们的解决方案(相信我它会完美地工作!)

在调查了执行报告的存储过程后,我们发现每次作业运行时,都会更新 SSISDB 中的 internal.executions 表。为了查看这次运行的执行报告,我们需要运行如下:

EXEC SSISDB.catalog.grant_permission 
    @object_type = 4, 
    @object_id = @execution_id, 
    @principal_ID =  13, 
    @permission_type = 1;
Run Code Online (Sandbox Code Playgroud)

此存储过程将授予角色/用户对数据库中对象的特定访问权限。@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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建角色 [package_execution_viewer]。这个角色会用到我们上面提到的存储过程中。

    USE [SSISDB]
    GO
    CREATE ROLE [package_execution_viewer]
    GO
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将用户添加到 [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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 获取package_execution_viewer 角色的principal_id。这个 id 也将用于上面的 SP。

    SELECT * from sys.database_principals
    GO
    
    Run Code Online (Sandbox Code Playgroud)
  5. 创建触发器以授予 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
    
    Run Code Online (Sandbox Code Playgroud)

搞定。这样我们就可以让人们访问执行报告,而无需将它们设为 ssis_admin。尝试一下,并与这篇文章分享任何想法!


bil*_*nkc 9

需要注意的是,我不是安全人员......

除了ssis_adminSSISDB 的特殊角色之外,没有其他预定义的数据库角色。这允许一个人做所有 SSIS 的事情,但这显然比支持人员应该拥有的权力更大。

有两种模式,internalcatalog. 目录适用于我们,最终用户与 SSISDB 进行交互,而内部则是,引用一本很棒的手册

IST NICHT FÜR DER GEFINGERPOKEN UND MITTENGRABEN!

我启动了分析器并观看我点击执行报告和子报告。所有查询都是针对catalog架构的内联查询。模式中的过程和函数catalog似乎都与包的维护和管理相关,所以如果你创建了一个角色

您可以使用 Martin 的回答来授予对所有基于目录的视图的访问权限,但因为我很懒,

我会尝试这样的事情。我创建了一个名为 的角色LookIt,将我的成员添加到其中,然后授予他们对整个目录架构的 SELECT 权限

USE [SSISDB]
GO
CREATE ROLE [LookIt]
GO
USE [SSISDB]
GO
ALTER ROLE [LookIt] ADD MEMBER [MyPeople]
GO
use [SSISDB]
GO
GRANT SELECT ON SCHEMA::[catalog] TO [LookIt]
GO
Run Code Online (Sandbox Code Playgroud)

编辑 2015-10-08

庆幸的是,对于那些关注 SQL Server 2016 的人。有一个新的 SSIS 角色即将到来,它将允许非特权用户使用本机报告工具的能力。该角色称为ssis_logreader授予该角色的成员资格将允许用户访问所有报告,而无需授予他们管理 SSIS 实例或整个服务器的能力。