Quyền xem báo cáo thực hiện trong Danh mục SSIS


8

Chúng tôi hiện đang sử dụng SSIS 2012. Có cách nào để người dùng xem báo cáo thực hiện trong Danh mục SSIS mà không phải là ssis_admin hoặc sysadmin không?

Đây là cho môi trường sản xuất và chúng tôi không muốn mọi người thao túng các dự án Danh mục SSIS.

Cảm ơn!

Câu trả lời:


11

Đây là giải pháp của chúng tôi (tin tôi đi, nó sẽ hoạt động hoàn hảo!)

Sau khi điều tra quy trình về cách các báo cáo thực thi được lưu trữ, chúng tôi thấy rằng mỗi khi một công việc chạy, bảng Internal.executions trong SSISDB sẽ được cập nhật. Và để xem báo cáo thực hiện của lần chạy này, chúng ta cần chạy một cái gì đó như dưới đây:

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

Quy trình được lưu trữ này sẽ cấp cho một vai trò / người dùng quyền truy cập nhất định vào một đối tượng trong cơ sở dữ liệu. @object_type có nghĩa là loại đối tượng bạn cần quyền trên (4 có nghĩa là hoạt động); @object_id có nghĩa là đối tượng cụ thể mà chúng tôi muốn truy cập; @principal_ID có nghĩa là những người muốn có quyền truy cập; allow_type có nghĩa là loại quyền truy cập mà chúng tôi muốn có (1 nghĩa là chỉ đọc). Để biết thêm thông tin, vui lòng tham khảo catalog.grant_ allow (Cơ sở dữ liệu SSISDB)

Mục tiêu của chúng tôi là tạo ra một trình kích hoạt mà mỗi khi một công việc chạy - nghĩa là bảng Internal.executions được chèn - sử dụng SP ở trên để cấp cho vai trò quyền đối với thông tin hoạt động đó.

Sau đó, hãy làm theo các bước dưới đây để thiết lập quyền xem báo cáo thực hiện:

  1. Tạo một người dùng kích hoạt sẽ được thực hiện như. Người dùng này sẽ có thể thực thi một kích hoạt trong SSISDB và có quyền truy cập vào Danh mục SSIS. Trong trường hợp của chúng tôi, chúng tôi cung cấp cho nó vai trò db_owner và ssis_admin trong SSISDB.

    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
  2. Tạo một vai trò [gói_execut_viewer]. Vai trò này sẽ được sử dụng trong thủ tục lưu trữ mà chúng tôi đã đề cập ở trên.

    USE [SSISDB]
    GO
    CREATE ROLE [package_execution_viewer]
    GO
  3. Thêm người dùng vào [pack_execut_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
  4. Lấy nguyên tắc_id của vai trò gói_execut_viewer. Id này cũng sẽ được sử dụng trong SP trên.

    SELECT * from sys.database_principals
    GO
  5. Tạo trình kích hoạt để cấp quyền cho gói_execut_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

Tất cả các thiết lập. Bằng cách này, chúng tôi có thể cho phép mọi người truy cập vào báo cáo thực hiện mà không cần đặt chúng dưới dạng ssis_admin. Hãy thử nó và chia sẻ bất kỳ suy nghĩ cho bài viết này!


9

Với lời cảnh báo rằng tôi không phải là người bảo mật ...

Không có vai trò cơ sở dữ liệu nào được xác định trước ngoài vai trò ssis_adminđặc biệt đối với SSISDB. Điều đó cho phép một người làm tất cả những điều SSIS nhưng rõ ràng đó là sức mạnh lớn hơn một người hỗ trợ nên có.

Có hai lược đồ, internalcatalog. Danh mục có ý nghĩa đối với chúng tôi, người dùng cuối tương tác với SSISDB trong khi nội bộ là để trích dẫn một hướng dẫn tuyệt vời

IST NICHT FÜR DER GEFingerPOKEN UND MITTENGRABEN!

Tôi đã kích hoạt hồ sơ và xem khi tôi nhấp qua các báo cáo thực hiện và các báo cáo con. Tất cả các truy vấn là các truy vấn nội dòng đối với cataloglược đồ. Các procs và hàm trong cataloglược đồ đều có vẻ liên quan đến việc bảo trì và quản trị các gói vì vậy nếu bạn chọn một vai trò

Bạn có thể chạy với câu trả lời của Martin để cấp quyền truy cập vào tất cả các chế độ xem dựa trên danh mục nhưng vì tôi lười biếng,

Tôi sẽ thử một cái gì đó như thế này. Tôi Tạo một vai trò được gọi LookIt, thêm (các) thành viên của mình vào đó và sau đó cấp cho họ quyền CHỌN cho toàn bộ lược đồ danh mục

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

Chỉnh sửa 2015-10-08

Hãy vui mừng, đối với những bạn đang xem SQL Server 2016. Có một vai trò SSIS mới sắp tới sẽ cho phép người dùng không có đặc quyền sử dụng các công cụ báo cáo gốc. Vai trò đó được gọi là ssis_logreaderCấp quyền thành viên cho vai trò đó sẽ cho phép người dùng truy cập tất cả các báo cáo mà không cấp cho họ khả năng quản trị đối tượng SSIS hoặc toàn bộ máy chủ.


3

Rất đơn giản ... Nhận xét WHEREmệnh đề trong hai quan điểm sau:

SSISDB.catalog.executions
SSISDB.catalog.event_messages

Làm xong.

Thay đổi quan điểm catalog.event_messagesbằng cách bình luận ra WHEREmệnh đề:

--WHERE opmsg.[operation_id] in (SELECT [id] FROM [internal]. 
--[current_user_readable_operations]) OR (IS_MEMBER('ssis_admin') = 1) OR 
--(IS_SRVROLEMEMBER('sysadmin') = 1)

Làm tương tự để xem Catalog.executions.

Tôi chưa gặp phải bất kỳ tác dụng phụ nào và đã sử dụng nó được 3 tháng trong cả hai môi trường SẢN XUẤT và QA.


3

Nhận xét về WHEREđiều khoản trong các quan điểm này từ SSISDB:

  • SSISDB.catalog.executions
  • SSISDB.catalog.event_messages
  • SSISDB.Catalog.folders

và cung cấp DB_READERquyền truy cập cho người dùng / nhóm trong SSISDB. Đã xác thực / Đã xác minh trong SQL 2012/2014


1

Vì vậy, đây là một vấn đề mà tôi đã gặp phải trong vài ngày qua, và tôi phải nói rằng bài đăng này chắc chắn có ích, mặc dù không có câu trả lời nào chính xác là những gì đã giúp.

Vì vậy, giống như bài đăng này, tôi muốn cấp quyền truy cập để xem các báo cáo Danh mục dịch vụ tích hợp đóng hộp, mà không phải cấp vai trò SSIS_admin trong một môi trường không cần thiết. Và cảm ơn billinkc đã giúp tôi tìm ra câu trả lời. Giống như ông nói, họ đã khắc phục vấn đề này trong SQL 2016 bằng cách thêm vai trò cơ sở dữ liệu cho phép bạn thực hiện những gì chúng tôi muốn. Điều đó đã cho tôi ý tưởng chỉ sao chép những gì SQL 2016 đã làm trên các phiên bản trước. Vì vậy, đây là những gì bạn phải làm:

  • Tạo một vai trò cơ sở dữ liệu trong SSISDB. Tôi đặt tên cho tôi là ssis_logreader cho sự nhất quán.
  • Thay đổi logic của các Chế độ xem SSISDB sau để chứa OR (IS_MEMBER('ssis_logreader') = 1)trong mệnh đề where.
  • [danh mục]. [hoạt động]

    [danh mục]. [oper_messages]

    [danh mục]. [event_message_context]

    [danh mục]. [event_messages]

    [danh mục]. [execable_statistic]

    [danh mục]. [thực thi]

    [danh mục]. [exec_component_phase]

    [danh mục]. [exec_data_statistic]

    [danh mục]. [exec_data_taps]

    [danh mục]. [exec_parameter_values]

    [danh mục]. [exec_property_override_values]

    [danh mục]. [thực hiện]

    [danh mục]. [Extended_operation_info]

    [danh mục]. [oper_messages]

    [danh mục]. [hoạt động]

    [danh mục]. [gói]

    [danh mục]. [dự án]

    [danh mục]. [xác nhận]

  • Sau đó thêm người dùng và / hoặc nhóm người dùng vào vai trò cơ sở dữ liệu đó.

Một khi bạn đã làm điều đó, nó sẽ chăm sóc các vấn đề của bạn.

Tôi cũng đã đính kèm một kịch bản sẽ làm tất cả trừ bước cuối cùng. Mặc dù được cảnh báo, nó dài gần 700 dòng

Cảm ơn.

USE SSISDB
GO


CREATE ROLE [ssis_logreader]
GO


----------------------------------------------------------------------------------------------
USE [SSISDB]
GO

/****** Object:  View [catalog].[operations]    Script Date: 10/5/2016 8:38:56 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER VIEW [catalog].[operations]
AS
SELECT     [operation_id], 
           [operation_type], 
           [created_time],
           [object_type],
           [object_id],
           [object_name],
           [status], 
           [start_time], 
           [end_time], 
           [caller_sid], 
           [caller_name], 
           [process_id],
           [stopped_by_sid],
           [stopped_by_name],
           [server_name],
           [machine_name]
FROM       internal.[operations]
WHERE      [operation_id] in (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)


GO

-----------------------------------------------------------------------------------------------------------
USE [SSISDB]
GO

/****** Object:  View [catalog].[operation_messages]    Script Date: 10/5/2016 8:38:32 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER VIEW [catalog].[operation_messages]
AS
SELECT     [operation_message_id], 
           [operation_id], 
           [message_time],
           [message_type],  
           [message_source_type], 
           [message], 
           [extended_info_id]
FROM       [internal].[operation_messages] 
WHERE      [operation_id] in (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)


GO
-----------------------------------------------------------------------------------------------------------------------


USE [SSISDB]
GO

/****** Object:  View [catalog].[event_message_context]    Script Date: 10/5/2016 8:12:27 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[event_message_context]
AS
SELECT     [context_id],
           [event_message_id],
           [context_depth],
           [package_path],
           [context_type],
           [context_source_name],
           [context_source_id],
           [property_name],
           [property_value]
FROM       [internal].[event_message_context]
WHERE      [operation_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)


GO


-----------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[event_messages]    Script Date: 10/5/2016 8:13:44 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[event_messages]
AS
SELECT     opmsg.[operation_message_id] AS [event_message_id],
           opmsg.[operation_id], 
           opmsg.[message_time],
           opmsg.[message_type],
           opmsg.[message_source_type],  
           opmsg.[message], 
           opmsg.[extended_info_id],
           eventmsg.[package_name],
           eventmsg.[event_name],

           message_source_name = 
                      CASE 
                        WHEN (opmsg.message_source_type = 10) THEN 'ISServerExec' 
                        WHEN (opmsg.message_source_type = 20) THEN 'Transact-SQL stored procedure'
                        ELSE eventmsg.message_source_name
                    END,
           eventmsg.[message_source_id],
           eventmsg.[subcomponent_name],
           eventmsg.[package_path],
           eventmsg.[execution_path],
           eventmsg.[threadID],
           eventmsg.[message_code]
FROM       [internal].[operation_messages] opmsg LEFT JOIN [internal].[event_messages] eventmsg
           ON opmsg.[operation_message_id] = eventmsg.[event_message_id]
WHERE      opmsg.[operation_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)


GO


----------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[executable_statistics]    Script Date: 10/5/2016 8:14:02 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[executable_statistics]
AS
SELECT     [statistics_id], 
           [execution_id],
           [executable_id], 
           [execution_path], 
           [start_time],
           [end_time],
           [execution_duration], 
           [execution_result],
           [execution_value]
FROM       [internal].[executable_statistics]
WHERE      [execution_id] IN (SELECT id FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)



GO


----------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[executables]    Script Date: 10/5/2016 8:14:22 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[executables]
AS
SELECT DISTINCT    
           execl.[executable_id], 
           execs.[execution_id], 
           execl.[executable_name], 
           execl.[executable_guid],
           execl.[package_name],
           execl.[package_path]
FROM       ([internal].[executions] execs INNER JOIN [internal].[executable_statistics] stat 
           ON execs.[execution_id] = stat.[execution_id]) INNER JOIN [internal].[executables] execl
           ON stat.[executable_id] = execl.[executable_id] 
WHERE      execs.[execution_id] IN (SELECT id FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)


GO

-------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[execution_component_phases]    Script Date: 10/5/2016 8:24:40 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER VIEW [catalog].[execution_component_phases]
AS
SELECT   startPhase.[phase_stats_id] AS [phase_stats_id],
         startPhase.[execution_id] AS [execution_id],
         startPhase.[package_name] AS [package_name],
         startPhase.[task_name] AS [task_name],
         startPhase.[subcomponent_name] AS [subcomponent_name],
         startPhase.[phase] AS [phase],
         startPhase.[phase_time] AS [start_time],
         endPhase.[phase_time] AS [end_time],
         startPhase.[execution_path] AS [execution_path]
FROM     [internal].[execution_component_phases] startPhase LEFT JOIN [internal].[execution_component_phases] endPhase
         ON startPhase.[phase_stats_id] != endPhase.[phase_stats_id]
         AND startPhase.[execution_id] = endPhase.[execution_id]
         AND startPhase.[sequence_id] = endPhase.[sequence_id]
WHERE    startPhase.[is_start] = 'True' AND (endPhase.[is_start] = 'False' OR endPhase.[is_start] IS NULL)
         AND (startPhase.[execution_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
         OR (IS_MEMBER('ssis_admin') = 1)
         OR (IS_SRVROLEMEMBER('sysadmin') = 1))
         OR (IS_MEMBER('ssis_logreader') = 1)

GO

--------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[execution_data_statistics]    Script Date: 10/5/2016 8:25:01 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER VIEW [catalog].[execution_data_statistics]
AS
SELECT    [data_stats_id],
          [execution_id],
          [package_name],
          [task_name],
          [dataflow_path_id_string],
          [dataflow_path_name],
          [source_component_name],
          [destination_component_name],
          [rows_sent],
          [created_time],
          [execution_path]
FROM      [internal].[execution_data_statistics]
WHERE     [execution_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
          OR (IS_MEMBER('ssis_admin') = 1)
          OR (IS_SRVROLEMEMBER('sysadmin') = 1)
          OR (IS_MEMBER('ssis_logreader') = 1)

GO

----------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[execution_data_taps]    Script Date: 10/5/2016 8:25:36 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


ALTER VIEW [catalog].[execution_data_taps]
AS
SELECT    [data_tap_id],
          [execution_id],
          [package_path],
          [dataflow_path_id_string],
          [dataflow_task_guid],
          [max_rows],
          [filename]
FROM      [internal].[execution_data_taps]
WHERE     [execution_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
          OR (IS_MEMBER('ssis_admin') = 1)
          OR (IS_SRVROLEMEMBER('sysadmin') = 1)
          OR (IS_MEMBER('ssis_logreader') = 1)

GO

--------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[execution_parameter_values]    Script Date: 10/5/2016 8:26:01 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[execution_parameter_values]
AS
SELECT     [execution_parameter_id], 
           [execution_id],
           [object_type], 
           [parameter_data_type], 
           [parameter_name], 
           [parameter_value], 
           [sensitive],
           [required],
           [value_set], 
           [runtime_override]
FROM       [internal].[execution_parameter_values]
WHERE      [execution_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[execution_property_override_values]    Script Date: 10/5/2016 8:26:24 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[execution_property_override_values]
AS
SELECT     [property_id], 
           [execution_id],
           [property_path], 
           [property_value], 
           [sensitive]
FROM       [internal].[execution_property_override_values]
WHERE      [execution_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

--------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[executions]    Script Date: 10/5/2016 8:26:52 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




ALTER VIEW [catalog].[executions]
AS
SELECT     execs.[execution_id], 
           execs.[folder_name], 
           execs.[project_name], 
           execs.[package_name],
           execs.[reference_id],
           execs.[reference_type], 
           execs.[environment_folder_name], 
           execs.[environment_name], 
           execs.[project_lsn], 
           execs.[executed_as_sid], 
           execs.[executed_as_name], 
           execs.[use32bitruntime],  
           opers.[operation_type], 
           opers.[created_time],  
           opers.[object_type], 
           opers.[object_id],
           opers.[status], 
           opers.[start_time], 
           opers.[end_time],  
           opers.[caller_sid], 
           opers.[caller_name], 
           opers.[process_id], 
           opers.[stopped_by_sid], 
           opers.[stopped_by_name],
           opers.[operation_guid] AS [dump_id],
           opers.[server_name],
           opers.[machine_name],
           ossysinfos.[total_physical_memory_kb],
           ossysinfos.[available_physical_memory_kb],
           ossysinfos.[total_page_file_kb],
           ossysinfos.[available_page_file_kb],
           ossysinfos.[cpu_count]
FROM       [internal].[executions] execs INNER JOIN [internal].[operations] opers 
           ON execs.[execution_id]= opers.[operation_id]
           LEFT JOIN [internal].[operation_os_sys_info] ossysinfos
           ON ossysinfos.[operation_id]= execs.[execution_id]
WHERE      opers.[operation_id] IN (SELECT id FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

--------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[extended_operation_info]    Script Date: 10/5/2016 8:27:45 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[extended_operation_info]
AS
SELECT     [info_id], 
           [operation_id], 
           [object_name], 
           [object_type],
           [reference_id],
           [status], 
           [start_time], 
           [end_time]
FROM       [internal].[extended_operation_info]
WHERE      [operation_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)


GO

--------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[operation_messages]    Script Date: 10/5/2016 8:29:30 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[operation_messages]
AS
SELECT     [operation_message_id], 
           [operation_id], 
           [message_time],
           [message_type],  
           [message_source_type], 
           [message], 
           [extended_info_id]
FROM       [internal].[operation_messages] 
WHERE      [operation_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

-------------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[operations]    Script Date: 10/5/2016 8:29:55 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[operations]
AS
SELECT     [operation_id], 
           [operation_type], 
           [created_time],
           [object_type],
           [object_id],
           [object_name],
           [status], 
           [start_time], 
           [end_time], 
           [caller_sid], 
           [caller_name], 
           [process_id],
           [stopped_by_sid],
           [stopped_by_name],
           [server_name],
           [machine_name]
FROM       internal.[operations]
WHERE      [operation_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

----------------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[packages]    Script Date: 10/5/2016 8:31:07 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[packages]
AS
SELECT     pkgs.[package_id], 
           pkgs.[name], 
           pkgs.[package_guid], 
           pkgs.[description],
           pkgs.[package_format_version], 
           pkgs.[version_major],  
           pkgs.[version_minor], 
           pkgs.[version_build], 
           pkgs.[version_comments], 
           pkgs.[version_guid], 
           pkgs.[project_id],
           pkgs.[entry_point],
           pkgs.[validation_status],
           pkgs.[last_validation_time]
FROM       [internal].[packages] pkgs INNER JOIN [internal].[projects] proj ON 
           (pkgs.[project_version_lsn] = proj.[object_version_lsn] 
           AND pkgs.[project_id] = proj.[project_id]) INNER JOIN
           [internal].[object_versions] vers ON ( vers.[object_type] =20 AND
           vers.[object_id] = proj.[project_id] 
           AND vers.[object_version_lsn] = proj.[object_version_lsn])

WHERE      pkgs.[project_id] IN (SELECT [id] FROM [internal].[current_user_readable_projects])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

-------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[projects]    Script Date: 10/5/2016 8:31:31 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[projects]
AS
SELECT     proj.[project_id],
           [internal].[folders].[folder_id],
           proj.[name],
           proj.[description],
           proj.[project_format_version], 
           proj.[deployed_by_sid], 
           proj.[deployed_by_name], 
           proj.[last_deployed_time], 
           proj.[created_time],
           proj.[object_version_lsn],  
           proj.[validation_status], 
           proj.[last_validation_time]

FROM       [internal].[object_versions] ver INNER JOIN
           [internal].[projects] proj ON (ver.[object_id] = proj.[project_id]
           AND ver.[object_version_lsn] = proj.[object_version_lsn]) INNER JOIN
           [internal].[folders] ON proj.[folder_id] = [internal].[folders].[folder_id]
WHERE      (ver.[object_status] = 'C') 
           AND (ver.[object_type]= 20) 
           AND (
                  proj.[project_id] IN (SELECT [id] FROM [internal].[current_user_readable_projects])
                  OR (IS_MEMBER('ssis_admin') = 1)
                  OR (IS_SRVROLEMEMBER('sysadmin') = 1)
                  OR (IS_MEMBER('ssis_logreader') = 1)
                )


GO
-------------------------------------------------------------------------------------------------------------------

USE [SSISDB]
GO

/****** Object:  View [catalog].[validations]    Script Date: 10/5/2016 8:31:54 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



ALTER VIEW [catalog].[validations]
AS
SELECT     vals.[validation_id], 
           vals.[environment_scope], 
           vals.[validate_type],
           vals.[folder_name],
           vals.[project_name],         
           vals.[project_lsn],
           vals.[use32bitruntime],
           vals.[reference_id], 
           opers.[operation_type],
           opers.[object_name],  
           opers.[object_type], 
           opers.[object_id], 
           opers.[start_time], 
           opers.[end_time], 
           opers.[status], 
           opers.[caller_sid], 
           opers.[caller_name], 
           opers.[process_id],
           opers.[stopped_by_sid], 
           opers.[stopped_by_name],
           opers.[operation_guid] AS [dump_id],
           opers.[server_name],
           opers.[machine_name]
FROM       [internal].[validations] vals INNER JOIN [internal].[operations] opers 
           ON vals.[validation_id] = opers.[operation_id]
WHERE      opers.[operation_id] IN (SELECT [id] FROM [internal].[current_user_readable_operations])
           OR (IS_MEMBER('ssis_admin') = 1)
           OR (IS_SRVROLEMEMBER('sysadmin') = 1)
           OR (IS_MEMBER('ssis_logreader') = 1)

GO

-------------------------------------------------------------------------------------------------------------------

Điều này là rất tốt đẹp. Tôi cũng đã chọn để tạo ra vai trò cho sự nhất quán với cách tôi sẽ tiếp cận điều này khi chúng tôi chuyển sang năm 2016. Cảm ơn bạn về kịch bản.
Jason

Không có gì. Và trong thực tế, bạn có thể đặt tên cho vai trò bất cứ điều gì bạn muốn, tôi đã đi với ssis_logreader để thống nhất với các phiên bản sau
Chap Wolff

1

Tôi gặp vấn đề tương tự. Sau khi xem truy vấn gạch chân với trọng tâm là mệnh đề where ..

    WHERE      opmsg.[operation_id] in (SELECT [id] FROM [internal].   [current_user_readable_operations])
       OR (IS_MEMBER('ssis_admin') = 1)
       OR (IS_SRVROLEMEMBER('sysadmin') = 1)

Khi truy vấn kiểm tra tư cách thành viên cho vai trò ssis_admin. Tôi đã quyết định cấp vai trò report_reader của mình cho vai trò cơ sở dữ liệu ssis_admin.

Thực hiện độc lập truy vấn Tôi đã gặp một lỗi cho phép chọn. Vì vậy, tôi đã cấp quyền chọn vai trò cho danh mục và lược đồ nội bộ.

GRANT SELECT ON SCHEMA::[catalog] TO ssis_admin;
GRANT SELECT ON SCHEMA::[internal] TO ssis_admin;

Hy vọng điều này sẽ giúp được ai đó.


1

Trên máy chủ SQL 2014

Dường như có một giải pháp đơn giản hơn.

  1. Trong thư mục Bảo mật, tạo thông tin đăng nhập (Người dùng hoặc Nhóm AD).
  2. Đặt Vai trò Máy chủ thành "Công khai"
  3. Đặt Ánh xạ người dùng thành "SSISDB"
  4. Trong Danh mục dịch vụ tích hợp, điều hướng đến thư mục chứa các gói bạn muốn chạy báo cáo trên
  5. Nhấp chuột phải và chọn "Thuộc tính"
  6. Chọn "Quyền"
  7. Chọn "Duyệt"
  8. Chọn người dùng / nhóm mới được tạo ở bước 1
  9. Cấp quyền "Đọc" và "Đọc đối tượng".

Bạn đã hoàn tất.

Lưu ý: Tôi đã thử nghiệm điều này trên SQL Server 2014 và nó hoạt động. Tôi chắc chắn rằng nó sẽ hoạt động vào năm 2012 trở lên.


0

Điều này đã khắc phục vấn đề của tôi. Tôi đã sửa lỗi từ Petemill66, cảm ơn

sử dụng SSISDB

LỰA CHỌN LỚN TRÊN SCHema :: [catalog] ĐẾN ssis_admin;

LỰA CHỌN LỚN TRÊN SCHema :: [nội bộ] ĐẾN ssis_admin;

Cập nhật GRANT TRÊN SCHema :: [catalog] TO ssis_admin;

Cập nhật GRANT TRÊN SCHema :: [nội bộ] ĐẾN ssis_admin;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.