SSIS für nicht sysadmins

Für die Verwendung von SSIS-Paketen sind entsprechende Vorkehrungen zu treffen, damit auch Anwender, die nicht über die Serverrolle sysadmin verfügen, Pakete bereitstellen und in Aufträgen ausführen können.

Mit SQL Server 2005 sind hier einige neue Möglichkeiten geschaffen worden, um diese Berechtigungen gezielt steuern zu können. Hiermit wurden die Beschränkungen, die man vom SQL Server 2000 kannte beseitigt.

Rollen in der Datenbank msdb

Für die Verwendung von SSIS (vormals DTS) sind neue Rollen in der Datenbank msdb geschaffen worden. Die Rolle db_dtsltduser sollte man wenigstens haben, wenn man selber Pakete bereitstellen will. Die Rolle db_dtsadmin versetzt einen in die Lage alle Pakete zu administrieren:

  • db_dtsadmin
  • db_dtsltduser
  • db_dtsoperator

Weitere Details dazu finden sich in der Online-Doku.

Für die Ausführung von Paketen werden weiterhin Rechte benötigt, die mit der Job-Steuerung zu tun haben. Hierzu findet man ebenfalls wieder in der msdb drei neue Rollen. Für weitere Details schaut man direkt weiter in der Online-Doku nach den festen Datenbankrollen des SQL Server-Agents. Die Rolle SQLAgentUserRole versetzt einen Anwender in die Lage eigene Aufträge zu erstellen und zu ändern. Erst nachdem eine dieser Rollen zugewiesen wurde, erscheint auch der SQLServerAgent im Objekt-Explorer des Management Studios:

  • SQLAgentOperatorRole
  • SQLAgentReaderRole
  • SQLAgentUserRole

Mit diesen Rollen ausgestattet kann jetzt ein User SSIS-Pakete auf den Server bringen und Jobs verwalten. Versucht er aber ein SSIS-Paket in seinem Job zu verwenden, schlägt der Job fehl und es kommt folgende Fehlermeldung:

Non-SysAdmins have been denied permission to run DTS Execution job steps without a proxy account. 
The step failed.

Die Ausführung von SSIS-Paketen über einen SQL Server-Agent-Job, wird weiterhin erst mal nur für Anwender der Rolle sysadmin gelingen. Für alle anderen Anwender müssen wie in der Fehlermeldung gesagt, zuerst weitere Einstellungen vorgenommen werden.

Im folgenden werden die Schritte beschrieben, die hierzu notwendig sind. Zur Einrichtung dieser Berechtigungen verwendet man ein Konto, welches in der Serverrolle sysadmin enthalten ist.

Credential anlegen

Im Management Studio wählt man den Menüpunkt Sicherheit/Anmeldeinformationen. Die rechte Maustaste bringt uns den Menüpunkt "Neue Anmeldeinformationen...".

Hier wird eine neue Anmeldeinformation (Credential) hinterlegt, welche aus einem Windows-Konto und Kennwort besteht. Dieses Windows-Konto wird verwendet, um in seinem Berechtigungskontext das SSIS-Paket auszuführen. Hinterlegt man dort einen Domänen-Admin, kann man auch im SSIS-Paket alle Aktionen in der Domäne ausführen. Für die verschiedenen Anwendungsfälle, kann es also unter Umständen notwendig sein auch mehrere Anmeldeinformationen (Credentials) mit unterschiedlichen Berechtigungen anzulegen.

Falls ein Domänen-Konto verwendet werden soll, welches nicht in der Serverrolle sysadmin enthalten ist, so sind folgende Berechtigungen in der msdb für dieses Konto notwendig:

  • db_dtsadmin
  • SQLAgentUserRole

SSIS-Rolle in der msdb

Damit für die Verknüpfung von Logins und Proxy-Konto später nicht immer das Proxy-Konto angepasst werden muss, wird eine Rolle in der msdb angelegt. Diese kann z. B. den Namen "SSIS_Anwender" erhalten. Dieser Rolle werden alle User hinzugefügt, die SSIS-Pakete in einem Job ausführen sollen. Falls man mehrere Anmeldeinformationen (Credentials) definiert hat, wird man auch mehrere Rollen benötigen. Diese Rolle ist nur eine Hülle und bekommt keine Rechte in der msdb ausser public.

Proxyaccount anlegen

Im Management Studio wählt man den Menüpunkt SQLServer-Agent/Proxys. Das Kontextmenü bietet uns die Möglichkeit "Neuer Proxy...".

Hier wählt man einen sprechenden Proxynamen und als Anmeldeinformationsname das eben angelegte Credential. Das Subsystem, für das dieser Proxy verwendet werden soll, ist "SQL Server Integration Services-Paket".

Prinzipale definieren

Auf der zweiten Seite (Prinzipale) werden die Logins, Serverrollen oder msdb-Rollen angegeben, die den Proxy verwenden sollen. Hier verwendet man am besten die eben in der msdb angelegte Rolle, da dann später die Einstellungen des Proxy nicht für jeden User überarbeitet werden müssen, zumal die Berechtigungen in der msdb für jeden neuen SSIS-User (Stichworte db_dtsltduser, SQLAgentUserRole) sowieso angepasst werden müssen.

Auftrag anpassen

Damit nun das SSIS-Paket auch wirklich unter dem Proxy-Konto ausgeführt wird, muss der Schritt im Auftrag angepasst werden.

Die List-Box "Ausführen als" zeigt uns das eben definierte Proxy-Konto, welches wir auswählen, um das Paket in dessen Berechtigungskontext laufen zu lassen.

Zusammenfassung

Der Artikel zeigt die notwendigen Schritte um Logins, die nicht zur Rolle sysadmin gehören, die Bereitstellung und Ausführung von SSIS-Paketen in Aufträgen zu ermöglichen.

Anhänge:

  • 5 stars
    Marc Brüning
    Kommentar von: Marc Brüning
    11.12.12 @ 07:55:05

    Hallo Herr Muthmann,

    vielen Dank für diesen hilfreichen Blogeintrag!
    Bei der Benutzung eines SQL Servers 2012 muss in dem Skript lediglich der "db_dtsltduser" durch den "db_ssisltduser" ersetzt werden.
    Das Skript funktioniert einwandfrei.

    Viele Grüße!

Einen Kommentar hinterlassen

You must be logged in to leave a comment. Log in now!

If you have no account yet, you can register now...
(It only takes a few seconds!)