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 授予角色对该操作信息的权限。
然后,让我们按照以下步骤设置执行报告查看权限:
创建触发器将作为执行的用户。此用户应该能够在 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)创建角色 [package_execution_viewer]。这个角色会用到我们上面提到的存储过程中。
USE [SSISDB]
GO
CREATE ROLE [package_execution_viewer]
GO
Run Code Online (Sandbox Code Playgroud)将用户添加到 [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)获取package_execution_viewer 角色的principal_id。这个 id 也将用于上面的 SP。
SELECT * from sys.database_principals
GO
Run Code Online (Sandbox Code Playgroud)创建触发器以授予 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。尝试一下,并与这篇文章分享任何想法!
需要注意的是,我不是安全人员......
除了ssis_adminSSISDB 的特殊角色之外,没有其他预定义的数据库角色。这允许一个人做所有 SSIS 的事情,但这显然比支持人员应该拥有的权力更大。
有两种模式,internal和catalog. 目录适用于我们,最终用户与 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)
庆幸的是,对于那些关注 SQL Server 2016 的人。有一个新的 SSIS 角色即将到来,它将允许非特权用户使用本机报告工具的能力。该角色称为ssis_logreader授予该角色的成员资格将允许用户访问所有报告,而无需授予他们管理 SSIS 实例或整个服务器的能力。
| 归档时间: |
|
| 查看次数: |
20396 次 |
| 最近记录: |