Die Anforderung besteht darin, einen Webdienst über SSIS aufzurufen und das SSIS von einer SQL Server Service Broker-gespeicherten Prozedur aufzurufen.
Hier ist, was ich gerade mache:
Warteschlange
%Vor%Meine gespeicherte Prozedur:
%Vor%Nun sieht die gespeicherte RunSSIS-Prozedur wie folgt aus:
%Vor%Jetzt wird die folgende Ausnahme in der Ereignisanzeige ausgelöst, da der Sicherheitskontext für die Sql-Service-Broker-Aktivierung in der SSISDB-Umgebung nicht erkannt wird.
Der aktivierte Proc '[schema]. [usp_ProccessingQueueActivation]' läuft weiter Warteschlange '' Ausgabe der folgend: 'Der aktuelle Sicherheitskontext kann nicht zurückgesetzt werden. Bitte Wechseln Sie zur ursprünglichen Datenbank, in der "Execute As" aufgerufen wurde, und versuchen Sie es es wieder. "
Um das Problem zu lösen, habe ich die folgenden Ansätze ausprobiert
Also folge ich diesem Link Ссылка und einen Benutzer mit einem selbstsignierten Zertifikat erstellt (denke, dass es ist ein Benutzer, der keine Berechtigung hat). Aber es gibt denselben Fehler zurück, tiefer graben fand ich das [intern]. [prepare_execution] in SSISDB hat die Anweisung "REVERT" in Zeile 36, die den Fehler als verursacht es mag keine Impersonation überhaupt.
Meine Frage ist
Ich verwende Windows-Authentifizierung und meine Berechtigung hat sys_Admin Zugriff.
Ich denke, Sie können den "WITH EXECUTE AS CALLER" herausnehmen und alles (das proc und dann das Paket, das letztendlich aufgerufen wird) wird unter dem Sicherheitskontext des Service Brokers ausgeführt. Solange dieser Kontext die Berechtigung hat, das zu tun, was Sie tun möchten, sollten Sie in Ordnung sein.
Ich habe keinen Service Broker auf diese Weise verwendet, aber ich mache dasselbe mit Jobs, die vom SQL Agent abgefeuert werden. Solange der Sicherheitskontext des Agenten die Berechtigungen hat, die in den Procs / Paketen benötigt werden, läuft alles gut. Wir verwenden Netzwerkkonten für unsere Dienste, so dass alles zwischen den Servern funktioniert.
Dies hat einen Code-Geruch nach enger Kopplung und mein erster Instinkt besteht darin, die Warteschlange, die DB, in der sich der Proc befindet, und die SSIS-Ausführung in ein PowerShell-Skript zu entkoppeln. Lassen Sie das Skript die Nachrichten vom Service Broker abrufen und rufen Sie dann SSISDB auf einer anderen Verbindung auf, ohne [catalog].[create_execution]
und [catalog].[set_execution_parameter_value]
in einem gespeicherten Prozess zu verpacken. Sie können dieses Skript weiterhin direkt vom Agenten ausführen.
Dieser Ansatz bietet Ihnen die größte Flexibilität in Bezug auf Sicherheitskontexte, wenn eine der Komponenten auf einen anderen Server wechselt, wenn etwas in dev / QA anders benannt wird oder sich Technologien ändern (Azure ServiceBus anstelle von Broker für Beispiel). Sie können auch mit der Protokollierung / Überwachung kreativ werden.
Tags und Links sql-server ssis service-broker