Enthaltene Datenbank

Eine eigenständige Datenbank ist eine Datenbank, die von anderen Datenbanken und der Instanz von SQL Server, der die Datenbank hostet, isoliert ist. SQL Server 2012 hilft Benutzer dabei, ihre Datenbank von der Instanz auf vier Arten zu isolieren.

  • Eine Menge der Metadaten, die eine Datenbank beschreiben, wird in der Datenbank verwaltet. (Zusätzlich zum Verwalten von Metadaten in der master-Datenbank oder demgegenüber.)

  • Alle Metadaten werden definiert über die gleiche Sortierung.

  • Die Benutzerauthentifizierung kann von der Datenbank ausgeführt werden, wodurch die Abhängigkeit der Datenbanken beim Anmelden der Instanz auf SQL Server reduziert wird.

  • Die SQL Server-Umgebung (DMVs, XEvents usw.) berichtet und kann auf Kapselungsinformationen reagieren.

Einige Funktionen von teilweise eigenständigen Datenbanken, beispielsweise das Speichern von Metadaten in der Datenbank, gelten für alle SQL Server 2012-Datenbanken. Einige Vorteile der teilweise eigenständigen Datenbanken, beispielsweise Authentifizierung auf Datenbankebene und Katalogsortierung, müssen erst aktiviert werden, damit sie verfügbar sind. Die Teilkapselung wird mithilfe der CREATE DATABASE- und ALTER DATABASE-Anweisungen oder mithilfe von SQL Server Management Studio aktiviert. Weitere Informationen zum Aktivieren der Sortierung teilweiser Datenbanken finden Sie unter Migrieren zu einer partiell eigenständigen Datenbank.

Dieses Thema enthält folgende Abschnitte:

  • Konzepte zur teilweise eigenständigen Datenbank

  • Komponenten der teilweise enthaltenen Datenbank

  • Kapselung

  • Vorteile des Verwendens von teilweise enthaltenen Datenbanken

  • Einschränkungen

  • Identifizieren der Datenbankkapselung

Konzepte zur teilweise eigenständigen Datenbank

Eine vollständig eigenständige Datenbank schließt alle erforderlichen Datenbankeinstellungen und Metadaten zum Definieren der Datenbank ein, und ihre Konfiguration ist nicht von der SQL Server Database Engine (Datenbankmodul)-Instanz abhängig, in der die Datenbank installiert ist. In früheren Versionen von SQL Server konnte das Trennen einer Datenbank von der Instanz von SQL Server eine zeitraubende Angelegenheit sein, und es erforderte ein fundiertes Wissen der Beziehung zwischen den Datenbanken und der Instanz von SQL Server. Die teilweise eigenständigen Datenbanken in SQL Server 2012 erleichtern das Trennen einer Datenbank von der Instanz von SQL Server und anderen Datenbanken.

In der eigenständigen Datenbank werden Funktionen entsprechend der Kapselung erkannt. Jede benutzerdefinierte Entität, die sich ausschließlich auf Funktionen stützt, die in der Datenbank enthalten sind, wird als vollständig enthalten angesehen. Jede benutzerdefinierte Entität, die sich ausschließlich auf Funktionen stützt, die sich außerhalb der Datenbank befinden, wird als nicht enthalten angesehen. (Weitere Informationen finden Sie unten im Abschnitt Kapselung dieses Themas.)

Die folgenden Begriffe beziehen sich auf das enthaltene Datenbankmodell.

  • Datenbankbegrenzung
    Die Grenze zwischen einer Datenbank und der Instanz von SQL Server. Die Grenze zwischen einer Datenbank und anderen Datenbanken.

  • Enthalten
    Ein Element, das vollständig innerhalb der Datenbankbegrenzung vorhanden ist.

  • Nicht enthalten
    Ein Element, das die Datenbankbegrenzung überschreitet.

  • Nicht enthaltene Datenbank
    Eine Datenbank, deren Kapselung auf NONE festgelegt ist. Alle Datenbanken in Versionen vor SQL Server 2012 sind nicht enthalten. Die Kapselung aller SQL Server 2012-Datenbanken ist standardmäßig auf NONE festgelegt.

  • Teilweise enthaltene Datenbank
    Eine teilweise eigenständige Datenbank ist eine eigenständige Datenbank, die einige Funktionen zulassen kann, die die Datenbankbegrenzung überschreiten. SQL Server enthält die Fähigkeit ein zu bestimmen, wann die Kapselungsbegrenzung überschritten wird.

  • Enthaltener Benutzer
    Es gibt zwei Typen von Benutzern für enthaltene Datenbanken.

    • Benutzer einer enthaltenen Datenbank mit Kennwort

      Benutzer von enthaltenen Datenbanken mit Kennwort werden von der Datenbank authentifiziert.

    • Windows-Prinzipale

      Autorisierte Windows-Benutzer und Mitglieder autorisierter Windows-Gruppen können direkt eine Verbindung mit der Datenbank herstellen, wobei keine Anmeldung in der master-Datenbank benötigt wird. Die Datenbank vertraut der Authentifizierung von Windows.

    Benutzern kann auf Basis der Anmeldungen in der master-Datenbank Zugriff auf eine eigenständige Datenbank gewährt werden. Dies würde jedoch eine Abhängigkeit auf der SQL Server-Instanz zur Folge haben. Daher sollten Sie beim Erstellen von Benutzern auf Basis von Anmeldungen den Kommentar für teilweise eigenständige Datenbanken durchlesen.

    SicherheitshinweisSicherheitshinweis

    Das Aktivieren von teilweise eigenständigen Datenbanken delegiert die Steuerung über den Zugriff auf die Instanz der SQL Server an die Besitzer der Datenbank. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit eigenständiger Datenbanken.

  • Datenbankbegrenzung
    Da teilweise eigenständige Datenbanken Datenbankfunktionen von den Funktionen der Instanz trennen, besteht eine eindeutig definierte Trennlinie zwischen diesen beiden Elementen. Diese wird als Datenbankbegrenzung bezeichnet.

    Innerhalb der Datenbankbegrenzung befindet sich das Datenbankmodell, in dem die Datenbanken entwickelt und verwaltet werden. Beispiele für Entitäten, die sich innerhalb des Datenbankmodells befinden, sind Systemtabellen (z. B. sys.tables), Benutzer enthaltener Datenbanken mit Kennwörtern sowie Benutzertabellen in der aktuellen Datenbank, auf die mit einem zweiteiligen Namen verwiesen wird.

    Außerhalb der Datenbankbegrenzung befindet sich das Verwaltungsmodell, das sich auf Funktionen auf der Instanzebene und auf die Verwaltung bezieht. Beispiele für Entitäten, die sich außerhalb der Datenbankbegrenzung befinden, sind Systemtabellen wie sys.endpoints, Anmeldungen zugeordnete Benutzer und Benutzertabellen in einer anderen Datenbank, auf die mit einem dreiteiligen Namen verwiesen wird.

Kapselung

Benutzerentitäten, die sich vollständig innerhalb der Datenbank befinden, werden als enthalten angesehen. Alle Benutzerentitäten, die sich außerhalb der Datenbank befinden oder sich auf die Interaktion mit Funktionen außerhalb der Datenbank stützen, werden als nicht enthalten angesehen.

Im Allgemeinen sind Benutzerentitäten folgenden Kapselungskategorien zuzuordnen:

  • Vollständig enthaltene Benutzerentitäten (Entitäten, die nie die Datenbankbegrenzung überschreiten), z. B. sys.indexes. Jeglicher Code, in dem diese Funktionen oder Objekte verwendet werden, die nur auf diese Entitäten verweisen, ist ebenfalls vollständig enthalten.

  • Nicht enthaltene Benutzerentitäten (Entitäten, die die Datenbankbegrenzung überschreiten), z. B. sys.server_principals oder ein Serverprinzipal (eine Anmeldung) selbst. Jeglicher Code, in dem diese Entitäten oder Funktionen verwendet werden, die auf diese Entitäten verweisen, ist nicht enthalten.

Teilweise enthaltene Datenbank

In SQL Server 2012 ist die Funktion der eigenständigen Datenbank derzeit nur in einem teilweise enthaltenen Status verfügbar. Eine teilweise enthaltene Datenbank ist eine enthaltene Datenbank, die die Verwendung nicht enthaltener Funktionen zulässt.

Geben Sie Informationen zu nicht enthaltenen Objekten und Funktionen mithilfe von sys.dm_db_uncontained_entities und sys.sql_modules (Transact-SQL) zurück. Durch Bestimmen des Kapselungsstatus der Elemente von Datenbanken können Sie ermitteln, welche Objekte und Funktionen ersetzt oder geändert werden müssen, um eine Kapselung zu erzielen.

Wichtiger HinweisWichtig

Da für bestimmte Objekte die Standardkapselungseinstellung NONE festgelegt ist, werden von dieser Sicht möglicherweise falsch positive Ergebnisse zurückgegeben.

Das Verhalten teilweise eigenständiger Datenbanken unterscheidet sich von dem abhängiger Datenbanken am deutlichsten hinsichtlich der Sortierung. Weitere Informationen zu Sortierungsaspekten finden Sie unter Enthaltene Datenbanksortierungen.

Vorteile des Verwendens von teilweise enthaltenen Datenbanken

Im Zusammenhang mit abhängigen Datenbanken treten Probleme und Schwierigkeiten auf, die mithilfe einer teilweise eigenständigen Datenbank behoben werden können.

Verschiebung von Datenbanken

Eines der Probleme, das beim Verschieben von Datenbanken auftritt, besteht darin, dass einige wichtige Informationen beim Verschieben der Datenbank von einer Instanz zu einer anderen möglicherweise nicht verfügbar ist. Beispielsweise werden Anmeldeinformationen innerhalb der Instanz gespeichert und nicht in der Datenbank. Wenn Sie eine abhängige Datenbank von einer Instanz in eine andere SQL Server-Instanz verschieben, bleiben diese Daten zurück. Sie müssen die fehlenden Daten bestimmen und zusammen mit der Datenbank in die neue SQL Server-Instanz verschieben. Dieser Vorgang kann schwierig und zeitaufwendig sein.

Die teilweise eigenständige Datenbank kann wichtige Daten in der Datenbank speichern. Demnach verfügt die Datenbank auch nach dem Verschieben weiterhin über die Daten.

HinweisHinweis

Eine teilweise eigenständige Datenbank ermöglicht die Dokumentation, womit jene Funktionen beschrieben werden, die von der Datenbank verwendet und nicht von der Instanz getrennt werden können. Hierzu zählen eine Liste anderer Datenbanken, von denen die Datenbank abhängt, Systemeinstellungen, die für die Datenbank erforderlich sind, jedoch nicht enthalten sein können usw.

Vorteil von enthaltenen Datenbankbenutzern mit AlwaysOn

Durch die Reduzierung der Verknüpfungen in Bezug auf die Instanz von SQL Server können teilweise eigenständige Datenbanken bei einem Failover nützlich sein, wenn Sie AlwaysOn-Verfügbarkeitsgruppen verwenden.

Durch die Erstellung von enthaltenen Benutzern kann der Benutzer direkt eine Verbindung mit der enthaltenen Datenbank herstellen. Dies ist eine sehr bedeutende Funktion in Szenarien mit hoher Verfügbarkeit und Wiederherstellung im Notfall, z. B. in einer AlwaysOn-Lösung. Wenn die Benutzer enthaltene Benutzer sind, können bei einem Failover Verbindungen zur sekundären Komponente hergestellt werden, ohne dass Anmeldungen bei der Instanz erforderlich sind, die die sekundäre Komponente hostet. Dies bietet einen unmittelbaren Vorteil. Weitere Informationen finden Sie unter Übersicht über AlwaysOn-Verfügbarkeitsgruppen (SQL Server) und Voraussetzungen, Einschränkungen und Empfehlungen für AlwaysOn-Verfügbarkeitsgruppen (SQL Server).

Anfängliche Datenbankentwicklung

Da einem Entwickler möglicherweise nicht bekannt ist, wo eine neue Datenbank bereitgestellt wird, verringern sich durch das Beschränken der Auswirkungen der Bereitstellungsumgebung der Arbeitsaufwand und die Probleme für den Entwickler. Im nicht enthaltenen Modell muss der Entwickler beim Programmieren mögliche Umgebungsauswirkungen auf die neue Datenbank berücksichtigen. Mit teilweise eigenständigen Datenbanken können Entwickler jedoch Auswirkungen auf Instanzebene auf die Datenbank und Aspekte auf Instanzebene für den Entwickler erkennen.

Datenbankverwaltung

Durch das Beibehalten der Datenbankeinstellungen in der Datenbank (im Gegensatz zur master-Datenbank) erhält jeder Datenbankbesitzer mehr Kontrolle über seine Datenbank, und zwar ohne die Datenbankbesitzer-Berechtigung sysadmin zu erteilen.

Einschränkungen

Für teilweise eigenständige Datenbanken sind die folgenden Funktionen nicht zulässig.

  • Teilweise Enthaltene Datenbanken unterstützen weder die Replikation, noch das Aufzeichnen oder das Nachverfolgen von Änderungsdaten.

  • Nummerierte Prozeduren

  • Schemagebundene Objekte, die von integrierten Funktionen mit Sortierungsänderungen abhängen.

  • Bindungsänderungen, die sich aus Sortierungsänderungen ergeben, einschließlich von Verweisen auf Objekte, Spalten, Symbole oder Typen.

  • Replikation, Change Data Capture und Änderungsnachverfolgung

VorsichtshinweisVorsicht

Temporär gespeicherte Prozeduren sind derzeit zulässig. Da temporär gespeicherte Prozeduren die Kapselung verletzen, ist nicht davon auszugehen, dass sie in künftigen Versionen der eigenständigen Datenbank unterstützt werden.

Identifizieren der Datenbankkapselung

Es sind zwei Tools verfügbar, mit denen der Einschlussstatus der Datenbank bestimmt werden kann. Bei sys.dm_db_uncontained_entities (Transact-SQL) handelt es sich um eine Sicht, in der alle möglicherweise nicht enthaltenen Entitäten in der Datenbank angezeigt werden. Das database_uncontained_usage-Ereignis wird ausgelöst, wenn eine tatsächliche nicht enthaltene Entität zur Laufzeit bestimmt wird.

sys.dm_db_uncontained_entities

In dieser Sicht werden alle Entitäten in der Datenbank angezeigt, bei denen es sich um nicht enthaltene Entitäten handeln könnte, weil sie beispielsweise die Datenbankbegrenzung überschreiten. Hierzu zählen die Benutzerentitäten, die Objekte außerhalb des Datenbankmodells verwenden können. Da die Kapselung einiger Entitäten (z. B. der Entitäten mit dynamischem SQL) jedoch erst zur Laufzeit bestimmt werden kann, werden in der Sicht möglicherweise einige Entitäten angezeigt, die eigentlich keine nicht enthaltenen Entitäten sind. Weitere Informationen finden Sie unter sys.dm_db_uncontained_entities (Transact-SQL).

database_uncontained_usage-Ereignis

Dieses XEvent wird ausgelöst, wenn nicht enthaltene Entität zur Laufzeit bestimmt wird. Dies schließt in Clientcode ausgelöste Entitäten ein. Dieses Xevent wird nur für tatsächliche nicht enthaltene Entitäten ausgelöst. Das Ereignis wird jedoch nur zur Laufzeit ausgelöst. Daher werden alle nicht enthaltenen Benutzerentitäten, die nicht ausgeführt wurden, von diesem XEvent nicht identifiziert.

Verwandte Inhalte

Geänderte Funktionen (Enthaltene Datenbank)

Enthaltene Datenbanksortierungen

Bewährte Methoden für die Sicherheit eigenständiger Datenbanken

Migrieren zu einer partiell eigenständigen Datenbank