Eigenständige Datenbanken

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Eine enthaltene Datenbank ist eine Datenbank , die von anderen Datenbanken und von der Instanz von SQL Server isoliert ist, die die Datenbank hosten soll. SQL Server hilft Benutzern, ihre Datenbank auf 4 Arten von der Instanz 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 Datenbankabhängigkeit von den Anmeldeinformationen der Instanz von SQL Server reduziert wird.

  • Die BERICHTE der SQL Server-Umgebung (DMV, XEvents usw.) und können auf Eindämmungsinformationen reagieren.

Einige Features von teilweise enthaltenen Datenbanken, z. B. 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 Eindämmung 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 Migrate to a Partially Contained Database.

Konzepte zur teilweise eigenständigen Datenbank

Eine vollständig enthaltene Datenbank enthält alle Einstellungen und Metadaten, die zum Definieren der Datenbank erforderlich sind, und verfügt über keine Konfigurationsabhängigkeiten von der Instanz des SQL Server-Datenbankmoduls, in dem die Datenbank installiert ist. In früheren Versionen von SQL Server könnte das Trennen einer Datenbank von der Sql Server-Instanz zeitaufwändig und erforderte detaillierte Kenntnisse der Beziehung zwischen der Datenbank und der Instanz von SQL Server. Teilweise enthaltene 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. Standardmäßig sind alle SQL Server 2012 (11.x) und höhere Datenbanken 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 Möglichkeit, zu bestimmen, wann die Eindämmungsgrenze ü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, die auf Anmeldungen in der Masterdatenbank basieren, kann Der Zugriff auf eine enthaltene Datenbank gewährt werden, das würde jedoch eine Abhängigkeit von der SQL Server-Instanz erstellen. Daher erfordert die Erstellung von Benutzern basierend auf Anmeldungen eine teilweise eigenständige Datenbank.

Wichtig

Durch aktivieren von teilweise enthaltenen Datenbanken wird die Kontrolle über den Zugriff auf die Instanz von SQL Server an die Besitzer der Datenbank delegiert. 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.

Containment

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.

Verwenden Sie die Ansicht sys.dm_db_uncontained_entities und sys.sql_modules (Transact-SQL), um Informationen zu nicht nachhaltigen Objekten oder Features zurückzugeben. 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 nicht enthaltene Datenbank von einer Instanz in eine andere Instanz von SQL Server verschieben, bleiben diese Informationen zurück. Sie müssen die fehlenden Informationen identifizieren und mit Ihrer Datenbank in die neue Instanz von SQL Server 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 Verringerung der Bindungen an die Instanz von SQL Server können teilweise enthaltene Datenbanken während des Failovers 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 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. Die sys.dm_db_uncontained_entities (Transact-SQL) ist eine Ansicht, in der alle potenziell nicht verwalteten 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