Sicherheitsüberlegungen für Notification Services

Notification Services implementiert Sicherheit mithilfe von Datenbankrollen und eingeschränkten Datenbank-Benutzerkonten. In diesem Thema werden das Notification-Sicherheitsmodell und empfohlene Maßnahmen für das Verbessern der Sicherheit von Notification Services-Anwendungen beschrieben.

Notification Services-Sicherheitsmodell

Notification Services verfügt über ein Modul, auf dem gehostete Ereignisanbieter, Generatoren und Verteiler ausgeführt werden. Außerdem kann es über Clientanwendungen verfügen, die Ereignisse übermitteln oder Abonnements verwalten.

Die von dem Modul und von Clientanwendungen verwendeten Anmeldekonten verwenden entweder die Windows-Authentifizierung oder die SQL Server-Authentifizierung für den Zugriff auf SQL Server. Sie erlangen Datenbankzugriff über Datenbank-Benutzerkonten und erhalten anschließend die erforderlichen Berechtigungen für Instanz- und Anwendungsdatenbanken über eine Mitgliedschaft in Notification Services-Datenbankrollen.

Die folgende Abbildung zeigt die Datenbankrollen, die die erforderlichen Berechtigungen für jede Modulkomponente, für einen nicht gehosteten Ereignisanbieter und für eine Abonnementverwaltungsschnittstelle bereitstellen.

Notification Services-Sicherheitsmodell

Datenbankberechtigungen werden den Datenbankrollen zugewiesen. Die Datenbankbenutzer für einzelne Komponenten erhalten die erforderlichen Berechtigungen durch eine Mitgliedschaft in der richtigen Rolle:

  • Von Ereignisanbietern verwendete Konten erhalten Berechtigungen über eine Mitgliedschaft in der NSEventProvider-Datenbankrolle. Der Ereignisanbieterhost führt gehostete Ereignisanbieter aus. Bei nicht gehosteten Ereignisanbietern handelt es sich um unabhängige Anwendungen.
  • Von Generatoren verwendete Konten erhalten Berechtigungen über eine Mitgliedschaft in der NSGenerator-Datenbankrolle.
  • Von Verteilern verwendete Konten erhalten Berechtigungen über eine Mitgliedschaft in der NSDistributor-Datenbankrolle.
  • Von Abonnementverwaltungsschnittstellen verwendete Konten erhalten Berechtigungen über eine Mitgliedschaft in der NSSubscriberAdmin-Datenbankrolle.

Wenn gehostete Ereignisanbieter, Generatoren und Verteiler auf einem Modul ausgeführt werden, kann das Konto des Moduls alle erforderlichen Berechtigungen über die NSRunService-Datenbankrolle erhalten.

Weitere Informationen zum Implementieren von Sicherheit für Notification Services finden Sie unter Sichern von Notification Services.

Zusätzliche Konten für Bedingungsaktionen

In Microsoft SQL Server 2005 verfügt Notification Services über ein neues Abonnementregelfeature. Ereignisgesteuerte Regeln und geplante Regeln können nun Bedingungsaktionen verwenden, die Abonnenten mithilfe von benutzerdefinierten Abfrageklauseln die Definition von umfangreicheren Abonnements ermöglichen.

Da auf Bedingungsaktionen basierende Abonnements benutzerdefinierte Abfrageklauseln ermöglichen, sollten die für die Abfrage verfügbaren Daten beschränkt sein. Aus diesem Grund müssen Sie einen Datenbankbenutzer definieren, unter dem Bedingungsaktionen ausgeführt werden. Dem Datenbankbenutzer sollte nur das Abfragen von Tabellen und Sichten ermöglicht werden, die Eingabedaten enthalten.

Der Generator löst die Regeln aus, die Bedingungsaktionen enthalten. Die Bedingungsaktionsabfragen werden jedoch durch den angegebenen Datenbankbenutzer weiter eingeschränkt. Sie geben den Datenbankbenutzer beim Definieren einer Notification Services-Anwendung an.

Weitere Informationen zu Bedingungsaktionen finden Sie unter Definieren von Bedingungsaktionen.

Windows-Berechtigungen

Zusätzlich zu Datenbankberechtigungen sind für einige Komponenten außerdem zusätzliche Windows-Berechtigungen erforderlich:

  • Das zum Ausführen des Notification Services-Moduls verwendete Konto muss ein Mitglied der Windows-Gruppe SQLServer2005NotificationServicesUser$ComputerName sein. Dadurch wird der Zugriff auf die zum Ausführen des Dienstes verwendeten Notification Services-Binärdateien bereitgestellt. Falls Sie den Windows-Dienst NS$instanceName zum Ausführen des Moduls verwenden, wird von Notification Services das Dienstkonto der Gruppe SQLServer2005NotificationServicesUser$ComputerName hinzugefügt, wenn Sie die Instanz registrieren.
    Für andere Komponenten, die auf die Notification Services-Binärdateien zugreifen müssen, ist möglicherweise ebenfalls die Mitgliedschaft in der Gruppe SQLServer2005NotificationServicesUser$ComputerName erforderlich. Die Notification Services-Assemblys und -Ressourcen sind im globalen Assemblycache (GAC) gespeichert und stehen ohne Mitgliedschaft in dieser Gruppe zur Verfügung.
  • Für Ereignisanbieter sind manchmal Berechtigungen in Ordnern und anderen Datenbanken erforderlich. Beispielsweise benötigt ein FileSystemWatcher-Ereignisanbieter Lesezugriff für eine XML-Schemadefinitionsdatei (XSD, XML Schema Definition), die das Ereignisschema beschreibt, sowie Lese- und Änderungszugriff für den Ordner, in dem Ereignisdateien abgelegt werden. SQL Server-Ereignisanbieter benötigen Zugriff auf die Datenbanktabellen oder Sichten, die als Ereignisquellen verwendet werden.
  • Verteiler benötigen Berechtigungen zum Übermitteln von Benachrichtigungen an den Übermittlungsdienst, wie z. B. einen SMTP-Server (Simple Mail Transfer Protocol), Short Message Service (SMS), einen Webserver oder ein Dateisystem. Verteiler, die den XSL-Transformations-Inhaltsformatierer (XSLT) verwenden, benötigen ebenfalls Zugriff auf die XSLT-Dateien.

Empfehlungen zur Sicherheit

Die folgenden Abschnitte stellen Empfehlungen für das Sichern des Notification Services-Moduls, von Abonnementverwaltungsschnittstellen, von benutzerdefinierten Ereignisanbietern, von benutzerdefinierten Übermittlungsprotokollen und von anderen benutzerdefinierten Anwendungen bereit.

Notification Services-Modul

Beachten Sie die folgenden Empfehlungen zur Sicherheit für das Notification Services-Modul, wenn Sie eine Instanz von Notification Services bereitstellen:

  • Konfigurieren Sie das Modul so, dass es die Windows-Authentifizierung für den Datenbankzugriff verwendet.
  • Führen Sie das Modul unter einer Domäne mit geringen Privilegien oder einem lokalen Konto aus. Verwenden Sie nicht das Konto Lokales System, Lokaler Dienst oder Netzwerkdienst oder ein anderes Konto in der Gruppe Administratoren.
    Möglicherweise erfordert ein Übermittlungsprotokoll jedoch zusätzliche Privilegien für das Konto, unter dem der Dienst ausgeführt wird. Beispielsweise muss das Konto, unter dem das Modul ausgeführt wird, ein Mitglied der Gruppe der lokalen Administratoren sein, wenn Sie Benachrichtigungen mithilfe des lokalen SMTP-Dienstes von Internetinformationsdienste (IIS, Internet Information Services) senden. (Administratorprivilegien sind nicht erforderlich, wenn Benachrichtigungen über einen SMTP-Dienst auf einem Remotecomputer gesendet werden.)
  • Stellen Sie beim Bereitstellen einer Instanz von Notification Services sicher, dass jedes Modul nur über die erforderlichen Berechtigungen verfügt.
    Bei Einzelserverbereitstellungen werden auf dem Modul alle gehosteten Ereignisanbieter, Generatoren und Verteiler der Instanz ausgeführt. Das vom Modul verwendete Konto sollte die erforderlichen Datenbankberechtigungen über eine Mitgliedschaft in der NSRunService-Datenbankrolle erhalten.
    Schränken Sie bei Bereitstellungen mit dezentraler Skalierung die Berechtigungen einzelner Module ein. Wenn z. B. ein Modul nur Ereignisanbieter ausführt, schränken Sie die dem Konto des Moduls erteilten Datenbankberechtigungen ein, indem Sie für das Konto die Mitgliedschaft in der NSEventProvider-Datenbankrolle festlegen und dem Konto keine anderen Datenbank- oder Serverberechtigungen erteilen. Verwenden Sie die NSRunService-Rolle nur dann, wenn auf dem Modul alle Modulkomponenten ausgeführt werden.
    ms172604.note(de-de,SQL.90).gifHinweis:
    Sie konfigurieren, was auf den einzelnen Modulen ausgeführt wird, indem Sie beim Definieren einer Anwendung den Systemnamen für jeden gehosteten Ereignisanbieter, Generator und Verteiler angeben.
  • Wenn sich die Notification Services-Modulkomponenten und SQL Server Database Engine (Datenbankmodul) auf separaten Servern befinden, stellen Sie sicher, dass für das Datenbankmodul TCP/IP oder Named Pipes aktiviert ist. Zur Verbesserung der Sicherheit des Datenbankmoduls sind die meisten Netzwerkprotokolle standardmäßig deaktiviert.
  • Stellen Sie sicher, dass die Anmeldekonten über sichere Kennwörter verfügen. Weitere Informationen zu sicheren Kennwörtern finden Sie im Thema zum Einrichten sicherer Kennwörter in der Microsoft Windows-Dokumentation.
  • Stellen Sie sicher, dass der gesamte vom Modul ausgeführte Code, wie z. B. benutzerdefinierte Ereignisanbieter, Inhaltsformatierer und Protokolle, aus einer vertrauenswürdigen Quelle stammt. Notification Services setzt voraus, dass in der Instanzkonfiguration und der Anwendungsdefinition aufgelisteter Code, die Sie zum Erstellen und Aktualisieren der Instanz von Notification Services verwenden, aus einer vertrauenswürdigen Quelle stammt. Verwenden Sie beim Definieren von Anwendungen den vollqualifizierten Assemblynamen, um sicherzustellen, dass die richtige Assembly geladen wird.
  • Notification Services kann Protokollheaderfelder nicht überprüfen. Überprüfen Sie daher die Benutzereingabe, oder verwenden Sie anwendungsdefinierte (nicht benutzerdefinierte) Werte, wenn die Anwendung Abonnenten-, Abonnentengeräte- oder Abonnementinformationen in einem Protokollfeld verwendet. Beispiele für böswillige Benutzerdaten finden Sie unter SQL Injection.
  • Sichern Sie alle Ordner, die Konfigurationsdateien oder Anwendungsdaten enthalten. Weitere Informationen zum Sichern von Dateien und Ordnern finden Sie unter Sichern von Dateien und Ordnern.

Hosten des Notification Services-Moduls

Bei dem Notification Services-Modul handelt es sich in der Regel um den Windows-Dienst NS$instanceName, den Sie beim Registrieren einer Instanz von Notification Services erstellen. Sie können jedoch das Modul in Ihrer eigenen Anwendung hosten, statt den Windows-Dienst zu verwenden.

Das Modul meldet sich beim Datenbankmodul an und führt die Instanz von Notification Services aus. Wenn Sie das Notification Services-Modul hosten, stellen Sie sicher, die Quelldateien und Binärdateien zu sichern.

Weitere Informationen zum Hosten des Moduls finden Sie unter Hosten des Notification Services-Moduls.

Abonnementverwaltungsschnittstellen

Abonnementverwaltungsschnittstellen ermöglichen es Benutzern, eine Benachrichtigungsanwendung zu abonnieren und Abonnements zu erstellen. Abonnementverwaltungsschnittstellen erhalten Datenbankberechtigungen für Instanz- und Anwendungsdatenbanken über eine Mitgliedschaft in der NSSubscriberAdmin-Datenbankrolle.

Beachten Sie die folgenden Empfehlungen zur Sicherheit, wenn Sie eine Abonnementverwaltungsschnittstelle entwickeln:

  • Überprüfen Sie vor dem Hinzufügen, Löschen oder Ändern von Abonnenten- und Abonnementdaten die Identität des Abonnenten, und ordnen Sie diese Identität dann einer Abonnenten-ID zu.
  • Jeder Benutzer bzw. jede Anwendung, der bzw. die über ein Konto mit einer Mitgliedschaft in der NSSubscriberAdmin-Datenbankrolle (oder höheren effektiven Berechtigungen) verfügt, kann Abonnenten- und Abonnementdaten ändern. Erteilen Sie keine unnötigen Berechtigungen, und schützen Sie den Benutzernamen und das Kennwort, der bzw. das von Abonnementverwaltungsschnittstellen verwendet wird.
  • Speichern Sie vertrauliche Informationen nicht als Nur-Text, wie z. B. Benutzernamen und Kennwörter, die für die Datenbankverbindungen der Anwendung verwendet werden. Verwenden Sie die Datenschutz-Anwendungsprogrammierschnittstelle (DPAPI, Data Protection Application Programming Interface), um vertrauliche Informationen zu verschlüsseln, und speichern Sie dann die Informationen in der Registrierung.
  • Wenn die Anwendung vertrauliche Informationen, wie z. B. Sozialversicherungsnummern, zur Benutzeridentifikation verwenden muss, empfiehlt es sich, dem Benutzer eine nicht vertrauliche Benutzer-ID bereitzustellen und dann eine Suchtabelle in der Datenbank zu verwenden, um die vertraulichen Informationen zuzuordnen.

Bei Abonnementverwaltungsschnittstellen handelt es sich oft um Webanwendungen. Weitere Informationen zu Sicherheitsoptionen für ASP.NET-Anwendungen finden Sie unter Bereitstellen einer Schnittstelle der Abonnementverwaltung.

Benutzerdefinierte Ereignisanbieter

Ereignisanbieter übermitteln Ereignisdaten an Notification Services-Anwendungen. Für Ihre Anwendungen können Sie benutzerdefinierte Ereignisanbieter, entweder gehostete oder nicht gehostete, entwickeln. Beachten Sie die folgenden Empfehlungen zur Sicherheit, wenn Sie einen benutzerdefinierten Ereignisanbieter entwickeln:

  • Stellen Sie sicher, dass Ereignisanbieter die NSEventProvider-Datenbankrolle verwenden, um Ereignisse zu übermitteln.
  • Jeder Benutzer bzw. jede Anwendung kann Ereignisse übermitteln, wenn er bzw. sie über einen gültigen Ereignisanbieternamen und ein Konto mit einer Mitgliedschaft in der NSEventProvider-Datenbankrolle (oder eine mit höheren effektiven Berechtigungen) in der Anwendungsdatenbank verfügt. Erteilen Sie keine unnötigen Berechtigungen, und schützen Sie den Benutzernamen und das Kennwort, der bzw. das von nicht gehosteten Ereignisanbietern verwendet wird.
  • Speichern Sie vertrauliche Informationen, wie z. B. Benutzernamen und Kennwörter, nicht als Nur-Text. Verwenden Sie DPAPI, um vertrauliche Informationen zu verschlüsseln, und speichern Sie dann die Informationen in der Registrierung.
  • Sichern Sie alle Quelldateien und Binärdateien der benutzerdefinierten Komponenten.

Benutzerdefinierte gehostete Ereignisanbieter übermitteln Ereignisse im Kontext des Ereignisanbieterhosts. Sie müssen im Code des gehosteten Ereignisanbieters keine Anmeldeinformationen für die Sicherheit bereitstellen, um Ereignisse zu übermitteln. Die folgende Empfehlung gilt speziell für gehostete Ereignisanbieter:

  • Beim Erstellen der Anwendung stellen Sie Informationen zum benutzerdefinierten gehosteten Ereignisanbieter in der Anwendungsdefinition bereit. Notification Services vertraut allen Informationen in der Anwendungsdefinition. Verwenden Sie den vollqualifizierten Assemblynamen, um sicherzustellen, dass die richtige Assembly geladen wird.

Nicht gehostete Ereignisanbieter werden außerhalb des Kontexts der Notification Services-Anwendung ausgeführt. Die folgende Empfehlung gilt speziell für nicht gehostete Ereignisanbieter:

  • Notification Services vertraut nicht explizit nicht gehosteten Ereignisanbietern. Sie müssen im Code des nicht gehosteten Ereignisanbieters Anmeldeinformationen für die Sicherheit bereitstellen. Das angegebene Konto muss in der Lage sein, sich bei der Instanz von Datenbankmodul anzumelden, und das zugeordnete Datenbank-Benutzerkonto muss ein Mitglied der NSEventProvider-Datenbankrolle in jeder Instanz- und Anwendungsdatenbank sein.

Benutzerdefinierte Übermittlungsprotokolle

Benutzerdefinierte Übermittlungsprotokolle werden im Kontext des Notification Services-Moduls ausgeführt. Sichern Sie wie bei allen benutzerdefinierten Komponenten die Quelldateien und Binärdateien, um alle vertraulichen Informationen zu schützen.

Notification Services Management Objects

Wenn Sie Notification Services Management Objects (NMO) verwenden, um Instanzen von Notification Services zu konfigurieren, Anwendungen zu definieren oder administrative Anwendungen zu entwickeln, stellen Sie sicher, die Quell- und Binärdateien zu sichern. Dateien, die Instanz- und Anwendungsdatenbanken enthalten, können vertrauliche Informationen, wie z. B. Servernamen, Benutzernamen und Kennwörter, enthalten.

Weitere Informationen zu Instanz- und Anwendungsmetadaten und anderen Dateien finden Sie unter Sichern von Dateien und Ordnern.

Siehe auch

Konzepte

Sichern von Notification Services

Andere Ressourcen

Sicherheitsüberlegungen für SQL Server
Bereitstellen von Notification Services

Hilfe und Informationen

Informationsquellen für SQL Server 2005