Eigenständige DatenbankenContained Databases

DIESES THEMA GILT FÜR:jaSQL Server (ab 2012)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Eine eigenständige Datenbank ist eine Datenbank, die von anderen Datenbanken und der Instanz von SQL ServerSQL Server , der die Datenbank hostet, isoliert ist.A contained database is a database that is isolated from other databases and from the instance of SQL ServerSQL Server that hosts the database. SQL Server 2017SQL Server 2017 hilft Benutzern dabei, ihre Datenbank von der Instanz auf vier Arten zu isolieren. helps user to isolate their database from the instance in 4 ways.

  • Eine Menge der Metadaten, die eine Datenbank beschreiben, wird in der Datenbank verwaltet.Much of the metadata that describes a database is maintained in the database. (Zusätzlich zur oder anstelle der Verwaltung von Metadaten in der master-Datenbank.)(In addition to, or instead of, maintaining metadata in the master database.)

  • Alle Metadaten werden definiert über die gleiche Sortierung.All metadata are defined using the same collation.

  • Die Benutzerauthentifizierung kann von der Datenbank ausgeführt werden, wodurch die Abhängigkeit der Datenbanken beim Anmelden der Instanz auf SQL ServerSQL Serverreduziert wird.User authentication can be performed by the database, reducing the databases dependency on the logins of the instance of SQL ServerSQL Server.

  • Die SQL ServerSQL Server -Umgebung (DMVs, XEvents usw.) berichtet und kann auf Kapselungsinformationen reagieren.The SQL ServerSQL Server environment (DMV's, XEvents, etc.) reports and can act upon containment information.

    Einige Funktionen von teilweise eigenständigen Datenbanken, beispielsweise das Speichern von Metadaten in der Datenbank, gelten für alle SQL Server 2017SQL Server 2017 -Datenbanken.Some features of partially contained databases, such as storing metadata in the database, apply to all SQL Server 2017SQL Server 2017 databases. Einige Vorteile der teilweise eigenständigen Datenbanken, beispielsweise Authentifizierung auf Datenbankebene und Katalogsortierung, müssen erst aktiviert werden, damit sie verfügbar sind.Some benefits of partially contained databases, such as database level authentication and catalog collation, must be enabled before they are available. Die partielle Eigenständigkeit wird mithilfe der Anweisungen CREATE DATABASE und ALTER DATABASE oder mithilfe von SQL Server Management StudioSQL Server Management Studioaktiviert.Partial containment is enabled using the CREATE DATABASE and ALTER DATABASE statements or by using SQL Server Management StudioSQL Server Management Studio. Weitere Informationen zum Aktivieren der Sortierung teilweiser Datenbanken finden Sie unter Migrate to a Partially Contained Database.For more information about how to enable partial database containment, see Migrate to a Partially Contained Database.

Konzepte zur teilweise eigenständigen Datenbank Partially Contained Database Concepts

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-DatenbankmodulSQL Server Database Engine -Instanz abhängig, in der die Datenbank installiert ist.A fully contained database includes all the settings and metadata required to define the database and has no configuration dependencies on the instance of the SQL Server-DatenbankmodulSQL Server Database Engine where the database is installed. In früheren Versionen von SQL ServerSQL Serverkonnte das Trennen einer Datenbank von der Instanz von SQL ServerSQL Server eine zeitraubende Angelegenheit sein, und es erforderte ein fundiertes Wissen der Beziehung zwischen den Datenbanken und der Instanz von SQL ServerSQL Server.In previous versions of SQL ServerSQL Server, separating a database from the instance of SQL ServerSQL Server could be time consuming and required detailed knowledge of the relationship between the database and the instance of SQL ServerSQL Server. Die teilweise eigenständigen Datenbanken erleichtern das Trennen einer Datenbank von der Instanz von SQL ServerSQL Server und anderen Datenbanken.Partially contained databases make it easier to separate a database from the instance of SQL ServerSQL Server and other databases.

In der eigenständigen Datenbank werden Funktionen entsprechend der Kapselung erkannt.The contained database considers features with regard to containment. Jede benutzerdefinierte Entität, die sich ausschließlich auf Funktionen stützt, die in der Datenbank enthalten sind, wird als vollständig enthalten angesehen.Any user-defined entity that relies only on functions that reside in the database is considered fully contained. Jede benutzerdefinierte Entität, die sich ausschließlich auf Funktionen stützt, die sich außerhalb der Datenbank befinden, wird als nicht enthalten angesehen.Any user-defined entity that relies on functions that reside outside the database is considered uncontained. (Weitere Informationen finden Sie im Abschnitt Eigenständigkeit in diesem Thema.)(For more information, see the Containment section later in this topic.)

Die folgenden Begriffe beziehen sich auf das enthaltene Datenbankmodell.The following terms apply to the contained database model.

DatenbankbegrenzungDatabase boundary
Die Grenze zwischen einer Datenbank und der Instanz von SQL ServerSQL Server.The boundary between a database and the instance of SQL ServerSQL Server. Die Grenze zwischen einer Datenbank und anderen Datenbanken.The boundary between a database and other databases.

EnthaltenContained
Ein Element, das vollständig innerhalb der Datenbankbegrenzung vorhanden ist.An element that exists entirely in the database boundary.

Nicht enthaltenUncontained
Ein Element, das die Datenbankbegrenzung überschreitet.An element that crosses the database boundary.

Nicht enthaltene DatenbankNon-contained database
Eine Datenbank, deren Eigenständigkeit auf NONEfestgelegt ist.A database that has containment set to NONE. Alle Datenbanken in Versionen vor SQL Server 2012SQL Server 2012 sind nicht enthalten.All databases in versions earlier than SQL Server 2012SQL Server 2012 are non-contained. Die Kapselung aller Datenbanken von SQL Server 2012SQL Server 2012 und höher ist standardmäßig auf NONEfestgelegt.By default, all SQL Server 2012SQL Server 2012 and later databases have a containment set to NONE.

Teilweise enthaltene DatenbankPartially contained database
Eine teilweise eigenständige Datenbank ist eine eigenständige Datenbank, die einige Funktionen zulassen kann, die die Datenbankbegrenzung überschreiten.A partially contained database is a contained database that can allow some features that cross the database boundary. SQL ServerSQL Server enthält die Fähigkeit ein zu bestimmen, wann die Kapselungsbegrenzung überschritten wird. includes the ability to determine when the containment boundary is crossed.

Enthaltener BenutzerContained user
Es gibt zwei Typen von Benutzern für enthaltene Datenbanken.There are two types of users for contained databases.

  • Benutzer einer enthaltenen Datenbank mit KennwortContained database user with password

    Benutzer von enthaltenen Datenbanken mit Kennwort werden von der Datenbank authentifiziert.Contained database users with passwords are authenticated by the database. Weitere Informationen finden Sie unter Eigenständige Datenbankbenutzer - machen Sie Ihre Datenbank portabel.For more information, see Contained Database Users - Making Your Database Portable.

  • Windows-PrinzipaleWindows principals

    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.Authorized Windows users and members of authorized Windows groups can connect directly to the database and do not need logins in the master database. Die Datenbank vertraut der Authentifizierung von Windows.The database trusts the authentication by 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 ServerSQL Server -Instanz zur Folge haben.Users based on logins in the master database can be granted access to a contained database, but that would create a dependency on the SQL ServerSQL Server instance. Daher sollten Sie beim Erstellen von Benutzern auf Basis von Anmeldungen den Kommentar für teilweise eigenständige Datenbanken durchlesen.Therefore, creating users based on logins see comment for partially contained databases.

Wichtig

Das Aktivieren von teilweise eigenständigen Datenbanken delegiert die Steuerung über den Zugriff auf die Instanz der SQL ServerSQL Server an die Besitzer der Datenbank.Enabling partially contained databases delegates control over access to the instance of SQL ServerSQL Server to the owners of the database. Weitere Informationen finden Sie unter Security Best Practices with Contained Databases.For more information, see Security Best Practices with Contained Databases.

DatenbankbegrenzungDatabase Boundary
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.Because partially contained databases separate the database functionality from those of the instance, there is a clearly defined line between these two elements called the database boundary.

Innerhalb der Datenbankbegrenzung befindet sich das Datenbankmodell, in dem die Datenbanken entwickelt und verwaltet werden.Inside of the database boundary is the database model, where the databases are developed and managed. 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.Examples of entities located inside of the database include, system tables like sys.tables, contained database users with passwords, and user tables in the current database referenced by a two-part name.

Außerhalb der Datenbankbegrenzung befindet sich das Verwaltungsmodell, das sich auf Funktionen auf Instanzebene und auf die Verwaltung bezieht.Outside of the database boundary is the management model, which pertains to instance-level functions and management. 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.Examples of entities located outside of the database boundary include, system tables like sys.endpoints, users mapped to logins, and user tables in another database referenced by a three-part-name.

Eigenständigkeit Containment

Benutzerentitäten, die sich vollständig innerhalb der Datenbank befinden, werden als enthaltenangesehen.User entities that reside entirely within the database are considered contained. 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 enthaltenangesehen.Any entities that reside outside of the database, or rely on interaction with functions outside of the database, are considered uncontained.

Im Allgemeinen sind Benutzerentitäten folgenden Kapselungskategorien zuzuordnen:In general, user entities fall into the following categories of containment:

  • Vollständig eigenständige Benutzerentitäten (Entitäten, die nie die Datenbankbegrenzung überschreiten), z.B. „sys.indexes“.Fully contained user entities (those that never cross the database boundary), for example sys.indexes. Jeglicher Code, in dem diese Funktionen oder Objekte verwendet werden, die nur auf diese Entitäten verweisen, ist ebenfalls vollständig enthalten.Any code that uses these features or any object that references only these entities is also fully contained.

  • Nicht eigenständige Benutzerentitäten (Entitäten, die die Datenbankbegrenzung überschreiten), z.B. „sys.server_principals“ oder ein Serverprinzipal (eine Anmeldung) selbst.Uncontained user entities (those that cross the database boundary), for example sys.server_principals or a server principal (login) itself. Jeglicher Code, in dem diese Entitäten oder Funktionen verwendet werden, die auf diese Entitäten verweisen, ist nicht enthalten.Any code that uses these entities or any functions that references these entities are uncontained.

Partially Contained Database Partially Contained Database

Die Funktion der enthaltenen Datenbank ist derzeit nur in einem teilweise enthaltenen Status verfügbar.The contained database feature is currently available only in a partially contained state. Eine teilweise enthaltene Datenbank ist eine enthaltene Datenbank, die die Verwendung nicht enthaltener Funktionen zulässt.A partially contained database is a contained database that allows the use of uncontained features.

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.Use the sys.dm_db_uncontained_entities and sys.sql_modules (Transact-SQL) view to return information about uncontained objects or features. 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.By determining the containment status of the elements of your database, you can discover what objects or features must be replaced or altered to promote containment.

Wichtig

Da bestimmte Objekte bei der Eigenständigkeit die Standardeinstellung NONEaufweisen, werden von dieser Sicht möglicherweise falsch positive Ergebnisse zurückgegeben.Because certain objects have a default containment setting of NONE, this view can return false positives.

Das Verhalten teilweise eigenständiger Datenbanken unterscheidet sich von dem abhängiger Datenbanken am deutlichsten hinsichtlich der Sortierung.The behavior of partially contained databases differs most distinctly from that of non-contained databases with regard to collation. Weitere Informationen zu Sortierungsaspekten finden Sie unter Contained Database Collations.For more information about collation issues, see Contained Database Collations.

Vorteile des Verwendens von teilweise enthaltenen Datenbanken Benefits of using Partially Contained Databases

Im Zusammenhang mit abhängigen Datenbanken treten Probleme und Schwierigkeiten auf, die mithilfe einer teilweise eigenständigen Datenbank behoben werden können.There are issues and complications associated with the non-contained databases that can be resolved by using a partially contained database.

Verschiebung von DatenbankenDatabase Movement

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.One of the problems that occurs when moving databases, is that some important information can be unavailable when a database is moved from one instance to another. Beispielsweise werden Anmeldeinformationen innerhalb der Instanz gespeichert und nicht in der Datenbank.For example, login information is stored within the instance instead of in the database. Wenn Sie eine abhängige Datenbank von einer Instanz in eine andere SQL ServerSQL Server-Instanz verschieben, bleiben diese Daten zurück.When you move a non-contained database from one instance to another instance of SQL ServerSQL Server, this information is left behind. Sie müssen die fehlenden Daten bestimmen und zusammen mit der Datenbank in die neue SQL ServerSQL Server-Instanz verschieben.You must identify the missing information and move it with your database to the new instance of SQL ServerSQL Server. Dieser Vorgang kann schwierig und zeitaufwendig sein.This process can be difficult and time-consuming.

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.The partially contained database can store important information in the database so the database still has the information after it is moved.

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.A partially contained database can provide documentation describing those features that are used by a database that cannot be separated from the instance. 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.This includes a list of other interrelated databases, system settings that the database requires but cannot be contained, and so on.

Vorteil Benutzern von eigenständigen Datenbanken mit Always OnBenefit of Contained Database Users with Always On

Durch die Reduzierung der Verknüpfungen in Bezug auf die Instanz von SQL ServerSQL Serverkönnen teilweise eigenständige Datenbanken bei einem Failover nützlich sein, wenn Sie AlwaysOn-VerfügbarkeitsgruppenAlways On availability groupsverwenden.By reducing the ties to the instance of SQL ServerSQL Server, partially contained databases can be useful during failover when you use AlwaysOn-VerfügbarkeitsgruppenAlways On availability groups.

Durch die Erstellung von enthaltenen Benutzern kann der Benutzer direkt eine Verbindung mit der enthaltenen Datenbank herstellen.Creating contained users enables the user to connect directly to the contained database. Dies ist eine sehr bedeutende Funktion in Szenarien mit hoher Verfügbarkeit und Notfallwiederherstellung, z.B. in einer Always On-Lösung.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. 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.If the users are contained users, in case of failover, people would be able to connect to the secondary without creating logins on the instance hosting the secondary. Dies bietet einen unmittelbaren Vorteil.This provides an immediate benefit. 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).For more information, see Overview of Always On Availability Groups (SQL Server) and Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server).

Anfängliche DatenbankentwicklungInitial Database Development

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.Because a developer may not know where a new database will be deployed, limiting the deployed environmental impacts on the database lessens the work and concern for the developer. Im nicht enthaltenen Modell muss der Entwickler beim Programmieren mögliche Umgebungsauswirkungen auf die neue Datenbank berücksichtigen.In the non-contained model, the developer must consider possible environmental impacts on the new database and program accordingly. Mit teilweise eigenständigen Datenbanken können Entwickler jedoch Auswirkungen auf Instanzebene auf die Datenbank und Aspekte auf Instanzebene für den Entwickler erkennen.However, by using partially contained databases, developers can detect instance-level impacts on the database and instance-level concerns for the developer.

DatenbankverwaltungDatabase Administration

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.Maintaining database settings in the database, instead of in the master database, lets each database owner have more control over their database, without giving the database owner sysadmin permission.

Einschränkungen Limitations

Für teilweise eigenständige Datenbanken sind die folgenden Funktionen nicht zulässig.Partially contained databases do not allow the following features.

  • Teilweise Enthaltene Datenbanken unterstützen weder die Replikation, noch das Aufzeichnen oder das Nachverfolgen von Änderungsdaten.Partially contained databases cannot use replication, change data capture, or change tracking.

  • Nummerierte ProzedurenNumbered procedures

  • Schemagebundene Objekte, die von integrierten Funktionen mit Sortierungsänderungen abhängen.Schema-bound objects that depend on built-in functions with collation changes

  • Bindungsänderungen, die sich aus Sortierungsänderungen ergeben, einschließlich von Verweisen auf Objekte, Spalten, Symbole oder Typen.Binding change resulting from collation changes, including references to objects, columns, symbols, or types.

  • Replikation, Change Data Capture und ÄnderungsnachverfolgungReplication, change data capture, and change tracking.

Warnung

Temporär gespeicherte Prozeduren sind derzeit zulässig.Temporary stored procedures are currently permitted. 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.Because temporary stored procedures breach containment, they are not expected to be supported in future versions of contained database.

Identifizieren der Datenbankkapselung Identifying Database Containment

Es sind zwei Tools verfügbar, mit denen der Einschlussstatus der Datenbank bestimmt werden kann.There are two tools to help identify the containment status of the database. 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.The sys.dm_db_uncontained_entities (Transact-SQL) is a view that shows all the potentially uncontained entities in the database. Das database_uncontained_usage-Ereignis wird ausgelöst, wenn eine tatsächliche nicht enthaltene Entität zur Laufzeit bestimmt wird.The database_uncontained_usage event occurs when any actual uncontained entity is identified at run time.

sys.dm_db_uncontained_entitiessys.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.This view shows any entities in the database that have the potential to be uncontained, such as those that cross-the database boundary. Hierzu zählen die Benutzerentitäten, die Objekte außerhalb des Datenbankmodells verwenden können.This includes those user entities that may use objects outside the database model. 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.However, because the containment of some entities (for example, those using dynamic SQL) cannot be determined until run time, the view may show some entities that are not actually uncontained. Weitere Informationen finden Sie unter sys.dm_db_uncontained_entities (Transact-SQL).For more information, see sys.dm_db_uncontained_entities (Transact-SQL).

database_uncontained_usage-Ereignisdatabase_uncontained_usage event

Dieses XEvent wird ausgelöst, wenn nicht enthaltene Entität zur Laufzeit bestimmt wird.This XEvent occurs whenever an uncontained entity is identified at run time. Dies schließt in Clientcode ausgelöste Entitäten ein.This includes entities originated in client code. Dieses Xevent wird nur für tatsächliche nicht enthaltene Entitäten ausgelöst.This XEvent will occur only for actual uncontained entities. Das Ereignis wird jedoch nur zur Laufzeit ausgelöst.However, the event only occurs at run time. Daher werden alle nicht enthaltenen Benutzerentitäten, die nicht ausgeführt wurden, von diesem XEvent nicht identifiziert.Therefore, any uncontained user entities you have not run will not be identified by this XEvent

Siehe auchSee Also

Geänderte Funktionen (Enthaltene Datenbank) Modified Features (Contained Database)
Contained Database Collations Contained Database Collations
Security Best Practices with Contained Databases Security Best Practices with Contained Databases
Migrate to a Partially Contained Database Migrate to a Partially Contained Database
Eigenständige Datenbankbenutzer - machen Sie Ihre Datenbank portabel Contained Database Users - Making Your Database Portable