Berechtigung zum Anzeigen des Ausführungsberichts im SSIS-Katalog

8

Wir verwenden derzeit SSIS 2012. Gibt es eine Möglichkeit für einen Benutzer, Ausführungsberichte unter SSIS-Katalog anzuzeigen, ohne ssis_admin oder sysadmin zu sein?

Dies ist für die Produktionsumgebung vorgesehen und wir möchten nicht, dass Benutzer SSIS-Katalogprojekte bearbeiten.

Vielen Dank!

Joann.B
quelle

Antworten:

11

Hier ist unsere Lösung (glauben Sie mir, es wird perfekt funktionieren!)

Nachdem wir die Prozedur zum Speichern der Ausführungsberichte untersucht hatten, stellten wir fest, dass bei jeder Ausführung eines Jobs die Tabelle internal.executions in SSISDB aktualisiert wird. Und um den Ausführungsbericht dieses Laufs anzuzeigen, müssen wir Folgendes ausführen:

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

Diese gespeicherte Prozedur gewährt einer Rolle / einem Benutzer einen bestimmten Zugriff auf ein Objekt in der Datenbank. @object_type bedeutet, für welchen Objekttyp Sie Berechtigungen benötigen (4 bedeutet Operation); @object_id bedeutet das spezifische Objekt, auf das wir zugreifen möchten; @principal_ID bedeutet, wer den Zugriff erhalten möchte; Erlaubnis_Typ bedeutet, welche Art von Zugriff wir haben möchten (1 bedeutet schreibgeschützt). Weitere Informationen finden Sie unter catalog.grant_permission (SSISDB-Datenbank).

Unser Ziel ist es, einen Trigger zu erstellen , der jedes Mal, wenn ein Job ausgeführt wird - dh die Tabelle internal.executions wird eingefügt -, mithilfe des obigen SP einer Rolle die Berechtigung für diese Operationsinformationen erteilt.

Führen Sie dann die folgenden Schritte aus, um die Anzeigeberechtigungen für Ausführungsberichte einzurichten:

  1. Erstellen Sie einen Benutzer, als der der Trigger ausgeführt wird. Dieser Benutzer sollte in der Lage sein, einen Trigger in SSISDB auszuführen und Zugriff auf den SSIS-Katalog zu haben. In unserem Fall geben wir ihm die Rolle db_owner und ssis_admin unter 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. Erstellen Sie eine Rolle [package_execution_viewer]. Diese Rolle wird in der oben erwähnten gespeicherten Prozedur verwendet.

    USE [SSISDB]
    GO
    CREATE ROLE [package_execution_viewer]
    GO
  3. Benutzer zu [package_execution_viewer] hinzufügen

    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. Rufen Sie die Prinzip-ID der Rolle package_execution_viewer ab. Diese ID wird auch in SP oben verwendet.

    SELECT * from sys.database_principals
    GO
  5. Erstellen Sie einen Trigger, um die Berechtigung für package_execution_viewer zu erteilen

    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

Alles bereit. Auf diese Weise können Benutzer auf die Ausführungsberichte zugreifen, ohne sie als ssis_admin festzulegen. Probieren Sie es aus und teilen Sie Ihre Gedanken zu diesem Beitrag!

Joann.B
quelle
9

Mit der Einschränkung, dass ich keine Sicherheitsperson bin ...

Es gibt keine andere vordefinierte Datenbankrolle als ssis_admindie für die SSISDB spezielle. Das erlaubt es einem, alle SSIS-Dinge zu erledigen, aber das ist eindeutig mehr Macht, als eine Support-Person haben sollte.

Es gibt zwei Schemata internalund catalog. Der Katalog ist für uns Endbenutzer gedacht, um mit der SSISDB zu interagieren, während er intern ist, um ein großartiges Handbuch zu zitieren

IST NICHT FÜR DER GEFINGERPOKEN UND MITTENGRABEN!

Ich habe den Profiler gestartet und beobachtet, wie ich durch die Ausführungsberichte und die Unterberichte geklickt habe. Alle Abfragen sind Inline-Abfragen für das catalogSchema. Die Prozesse und Funktionen, die sich im catalogSchema befinden, scheinen alle mit der Wartung und Verwaltung der Pakete in Zusammenhang zu stehen, wenn Sie also eine Rolle erstellt haben

Sie können mit Martins Antwort arbeiten, um Zugriff auf alle katalogbasierten Ansichten zu gewähren, aber da ich faul bin,

Ich würde so etwas versuchen. Ich erstelle eine Rolle mit dem Namen LookIt, füge meine Mitglieder hinzu und erteile ihnen dann die SELECT-Berechtigung für das gesamte Katalogschema

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

Bearbeiten 08.10.2015

Freuen Sie sich auf diejenigen unter Ihnen, die sich mit SQL Server 2016 befassen. Es gibt eine neue SSIS-Rolle, mit der nicht privilegierte Benutzer die nativen Berichterstellungstools verwenden können. Diese Rolle wird als ssis_logreaderGewähren der Mitgliedschaft für diese Rolle bezeichnet. Dadurch können Benutzer auf alle Berichte zugreifen, ohne ihnen die Möglichkeit zu geben, die SSIS-Instanz oder den gesamten Server zu verwalten.

billinkc
quelle
3

Ganz einfach ... Kommentieren Sie die WHEREKlausel in diesen beiden Ansichten aus:

SSISDB.catalog.executions
SSISDB.catalog.event_messages

Erledigt.

Ändern Sie die Ansicht, catalog.event_messagesindem Sie die WHEREKlausel auskommentieren:

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

Machen Sie dasselbe mit der Ansicht Catalog.executions.

Ich habe noch keine Nebenwirkungen festgestellt und habe sie 3 Monate lang sowohl in PROD- als auch in QS-Umgebungen eingesetzt.

Doug
quelle
3

Auskommentieren der WHEREKlausel in diesen Ansichten von SSISDB:

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

und stellen Sie den DB_READERZugriff auf den Benutzer / die Gruppe in SSISDB bereit. Validiert / verifiziert in SQL 2012/2014

Balaji Rajaram
quelle
1

Dies ist also ein Problem, auf das ich in den letzten Tagen gestoßen bin, und ich muss sagen, dass dieser Beitrag definitiv geholfen hat, obwohl keine der Antworten genau das war, was geholfen hat.

Wie in diesem Beitrag angegeben, wollte ich den Zugriff zum Anzeigen der vordefinierten Integration Services-Katalogberichte gewähren, ohne die Rolle SSIS_admin in einer Umgebung zu gewähren, in der sie nicht benötigt wird. Und danke an billinkc, der mir geholfen hat, die Antwort zu finden. Wie er sagte, haben sie dieses Problem in SQL 2016 behoben, indem sie eine Datenbankrolle hinzugefügt haben, mit der Sie das tun können, was wir wollen. Das brachte mich auf die Idee, nur das zu kopieren, was SQL 2016 in früheren Versionen getan hat. Hier ist also, was Sie tun müssen:

  • Erstellen Sie eine Datenbankrolle in SSISDB. Ich habe meinen ssis_logreader aus Gründen der Konsistenz benannt.
  • Ändern Sie die Logik der folgenden SSISDB-Ansichten so, dass sie OR (IS_MEMBER('ssis_logreader') = 1)in der where-Klausel enthalten sind.
  • [Katalog]. [Operationen]

    [Katalog]. [operation_messages]

    [Katalog]. [event_message_context]

    [Katalog]. [event_messages]

    [Katalog]. [ausführbare_Statistik]

    [Katalog]. [ausführbare Dateien]

    [Katalog]. [Ausführungskomponentenphasen]

    [Katalog]. [Ausführungsdaten_Statistik]

    [Katalog]. [Ausführungsdaten_Taps]

    [Katalog]. [Ausführungsparameter_Werte]

    [Katalog]. [Ausführungseigenschaftsüberschreibungswerte]

    [Katalog]. [Hinrichtungen]

    [Katalog]. [erweiterte_operation_info]

    [Katalog]. [operation_messages]

    [Katalog]. [Operationen]

    [Katalog]. [Pakete]

    [Katalog]. [Projekte]

    [Katalog]. [Validierungen]

  • Fügen Sie dann den Benutzer und / oder die Benutzergruppen zu dieser Datenbankrolle hinzu.

Sobald Sie das getan haben, sollte es sich um Ihre Probleme kümmern.

Ich habe auch ein Skript angehängt, das alle bis auf den letzten Schritt erledigt. Seien Sie jedoch gewarnt, es ist fast 700 Zeilen lang

Vielen Dank.

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

-------------------------------------------------------------------------------------------------------------------
Chap Wolff
quelle
Das ist sehr nett. Auch ich habe mich dafür entschieden, die Rolle zu erstellen, um die Übereinstimmung mit meiner Vorgehensweise bei 2016 zu gewährleisten. Vielen Dank für das Skript.
Jason
Bitte schön. Und in Wirklichkeit können Sie die Rolle benennen, was immer Sie wollen. Ich habe mich für ssis_logreader entschieden, um die Konsistenz mit späteren Versionen zu gewährleisten
Chap Wolff,
1

Ich hatte das gleiche Problem. Nachdem Sie sich die unterstrichene Abfrage mit dem Fokus auf die where-Klausel angesehen haben.

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

Während die Abfrage nach der Mitgliedschaft in der Rolle ssis_admin sucht. Ich habe beschlossen, meine Report_reader-Rolle der Datenbankrolle ssis_admin zuzuweisen.

Beim Ausführen der eigenständigen Abfrage wurde mir ein Auswahlberechtigungsfehler gegeben. Daher habe ich dem Katalog und den internen Schemas die Berechtigungen zur Rollenauswahl erteilt.

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

Hoffe das hilft jemandem.

petemill66
quelle
1

Auf SQL Server 2014

Es scheint eine einfachere Lösung zu geben.

  1. Erstellen Sie im Ordner "Sicherheit" eine Anmeldung (entweder Benutzer oder AD-Gruppe).
  2. Setzen Sie die Serverrollen auf "Öffentlich".
  3. Setzen Sie die Benutzerzuordnung auf "SSISDB".
  4. Navigieren Sie in Integration Services-Katalogen zu dem Ordner, der die Pakete enthält, für die Sie Berichte ausführen möchten
  5. Klicken Sie mit der rechten Maustaste und wählen Sie "Eigenschaften".
  6. Wählen Sie "Berechtigungen"
  7. Wählen Sie "Durchsuchen"
  8. Wählen Sie den neuen Benutzer / die neue Gruppe aus, die in Schritt 1 erstellt wurde
  9. Gewähren Sie die Berechtigungen "Lesen" und "Objekte lesen".

Du bist fertig.

Hinweis: Ich habe dies auf SQL Server 2014 getestet und es funktioniert. Ich bin sicher, dass es ab 2012 funktionieren wird.

J Weezy
quelle
0

Dies hat mein Problem behoben. Ich habe das Update von Petemill66 erhalten, also danke

Verwenden Sie SSISDB

GRANT SELECT ON SCHEMA :: [Katalog] TO ssis_admin;

GRANT SELECT ON SCHEMA :: [intern] TO ssis_admin;

GRANT Update ON SCHEMA :: [Katalog] TO ssis_admin;

GRANT Update ON SCHEMA :: [intern] TO ssis_admin;

Duane Lawrence
quelle