Eigenständige Datenbanken

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

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 hilft Benutzern 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 zur oder anstelle der Verwaltung von Metadaten in der master-Datenbank.)

  • 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 von 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-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 partielle Eigenständigkeit wird mithilfe der Anweisungen CREATE DATABASE und ALTER DATABASE oder mithilfe von SQL Server Management Studio aktiviert. Weitere Informationen zum Aktivieren der Sortierung teilweiser Datenbanken finden Sie unter Migrate to a Partially Contained Database.

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-Datenbank-Engine-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 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 im Abschnitt Eigenständigkeit in diesem Thema.)

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 Eigenständigkeit auf NONE festgelegt ist. Alle Datenbanken in Versionen vor SQL Server 2012 (11.x) sind nicht enthalten. Die Kapselung aller Datenbanken von SQL Server 2012 (11.x) und höher 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. Weitere Informationen finden Sie unter Eigenständige Datenbankbenutzer – machen Sie Ihre Datenbank portabel.

  • 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 erfordert die Erstellung von Benutzern basierend auf Anmeldungen eine teilweise eigenständige Datenbank.

Wichtig

Das Aktivieren von teilweise eigenständigen Datenbanken delegiert die Steuerung über den Zugriff auf die SQL Server-Instanz an die Besitzer der Datenbank. Weitere Informationen finden Sie unter Security Best Practices with Contained Databases.

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 Datenbankbegrenzungbezeichnet.

Innerhalb der Datenbankbegrenzung befindet sich das Datenbankmodell, in dem die Datenbanken entwickelt und verwaltet werden. Beispiele für Entitäten, die sich innerhalb der Datenbank befinden, sind Systemtabellen (z.B. sys.tables), eigenständige Datenbankbenutzer 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 Instanzebene und auf die Verwaltung bezieht. Beispiele für Entitäten, die sich außerhalb der Datenbankbegrenzung befinden, sind Systemtabellen wie sys.endpoints, zu Anmeldungen zugeordnete Benutzer und Benutzertabellen in einer anderen Datenbank, auf die mit einem dreiteiligen Namen verwiesen wird.

Eindämmung

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 eigenständige 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 eigenständige 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

Die Funktion der enthaltenen Datenbank ist 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 eigenständigen 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.

Wichtig

Da bestimmte Objekte bei der Eigenständigkeit die Standardeinstellung NONE aufweisen, 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 Contained Database Collations.

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.

Hinweis

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 Benutzern von eigenständigen Datenbanken mit Always On

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 Always On-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 Hochverfügbarkeit und Notfallwiederherstellung, z.B. in einer Always On-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 Always On-Verfügbarkeitsgruppen (SQL Server) und Voraussetzungen, Einschränkungen und Empfehlungen für Always On-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.

Begrenzungen

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

  • Replikation, Change Data Capture oder Änderungsnachverfolgung

  • 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.

Warnung

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. sys.dm_db_uncontained_entities (Transact-SQL) ist eine Sicht, in der alle möglicherweise nicht eigenständigen 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.

Weitere Informationen

Geänderte Funktionen (Enthaltene Datenbank)
Contained Database Collations
Bewährte Methoden für die Sicherheit eigenständiger Datenbanken
Migrieren zu einer partiell eigenständigen Datenbank
Eigenständige Datenbankbenutzer – Generieren einer portablen Datenbank