Bases de données à relation contenant-contenuContained Databases

Cette rubrique s’applique à : OuiSQL ServerOuibase de données SQL AzureaucunAzure SQL Data Warehouse aucun Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Une base de données à relation contenant-contenu est une base de données qui est isolée d’autres bases de données et de l’instance de SQL ServerSQL Server qui héberge cette base de données.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 aide l'utilisateur à isoler sa base de données de l'instance de 4 manières différentes. helps user to isolate their database from the instance in 4 ways.

  • Une grande partie des métadonnées qui décrivent une base de données est conservée dans la base de données.Much of the metadata that describes a database is maintained in the database. (En plus ou en remplacement de la conservation des métadonnées dans la base de données MASTER.)(In addition to, or instead of, maintaining metadata in the master database.)

  • Toutes les métadonnées sont définies à l'aide du même classement.All metadata are defined using the same collation.

  • L'authentification utilisateur peut être exécutée par la base de données, ce qui réduit la dépendance sur les connexions de l'instance de SQL ServerSQL Server.User authentication can be performed by the database, reducing the databases dependency on the logins of the instance of SQL ServerSQL Server.

  • L'environnement SQL ServerSQL Server (DMV, XEvents, etc.) signale des informations relatives à la relation contenant-contenu et peut interagir sur celles-ci.The SQL ServerSQL Server environment (DMV's, XEvents, etc.) reports and can act upon containment information.

    Certaines fonctionnalités de bases de données partiellement à relation contenant-contenu, telles que le stockage des métadonnées dans la base de données, s'appliquent à toutes les bases de données SQL Server 2017SQL Server 2017 .Some features of partially contained databases, such as storing metadata in the database, apply to all SQL Server 2017SQL Server 2017 databases. Certains avantages des bases de données partiellement à relation contenant-contenu, tels que l'authentification de niveau base de données et le classement de catalogue, doivent être activés pour pouvoir être disponibles.Some benefits of partially contained databases, such as database level authentication and catalog collation, must be enabled before they are available. La relation contenant-contenu partielle est activée à l’aide des instructions CREATE DATABASE et ALTER DATABASE ou de SQL Server Management StudioSQL Server Management Studio.Partial containment is enabled using the CREATE DATABASE and ALTER DATABASE statements or by using SQL Server Management StudioSQL Server Management Studio. Pour plus d'informations sur l'activation de la relation contenant-contenu de base de données partielle, consultez Migrate to a Partially Contained Database.For more information about how to enable partial database containment, see Migrate to a Partially Contained Database.

Concepts relatifs aux bases de données partiellement à relation contenant-contenuPartially Contained Database Concepts

Une base de données à relation contenant-contenu complète inclut tous les paramètres et métadonnées requis pour définir la base de données ; sa configuration ne dépend pas de l'instance du Moteur de base de données SQL ServerSQL Server Database Engine où la base de données est installée.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 Moteur de base de données SQL ServerSQL Server Database Engine where the database is installed. Dans les versions antérieures de SQL ServerSQL Server, la séparation d'une base de données de l'instance de SQL ServerSQL Server pouvait être fastidieuse et nécessiter une connaissance détaillée de la relation entre la base de données et l'instance de 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. Les bases de données partiellement à relation contenant-contenu simplifient la séparation d'une base de données de l'instance de SQL ServerSQL Server et des autres bases de données.Partially contained databases make it easier to separate a database from the instance of SQL ServerSQL Server and other databases.

La base de données à relation contenant-contenu considère les fonctionnalités en termes de relation contenant-contenu.The contained database considers features with regard to containment. Toute entité définie par l'utilisateur qui ne s'appuie que sur des fonctions résidant dans la base de données est considérée comme entièrement à relation contenant-contenu.Any user-defined entity that relies only on functions that reside in the database is considered fully contained. Toute entité définie par l'utilisateur qui s'appuie sur des fonctions résidant hors de la base de données est considérée sans relation contenant-contenu.Any user-defined entity that relies on functions that reside outside the database is considered uncontained. (Pour plus d’informations, consultez la section Relation contenant-contenu , plus loin dans cette rubrique.)(For more information, see the Containment section later in this topic.)

Les termes suivants s'appliquent au modèle de base de données à relation contenant-contenu.The following terms apply to the contained database model.

Limite de base de donnéesDatabase boundary
Limite entre une base de données et l'instance de SQL ServerSQL Server.The boundary between a database and the instance of SQL ServerSQL Server. Limite entre une base de données et d'autres bases de données.The boundary between a database and other databases.

À relation contenant-contenuContained
Élément qui existe entièrement dans la limite de base de données.An element that exists entirely in the database boundary.

Sans relation contenant-contenuUncontained
Élément qui dépasse la limite de base de données.An element that crosses the database boundary.

Base de données sans relation contenant-contenuNon-contained database
Base de données dont la relation contenant-contenu a la valeur NONE.A database that has containment set to NONE. Toutes les bases de données de versions antérieures à SQL Server 2012SQL Server 2012 sont sans relation contenant-contenu.All databases in versions earlier than SQL Server 2012SQL Server 2012 are non-contained. Par défaut, toutes les bases de données SQL Server 2012SQL Server 2012 et de versions ultérieures ont une relation contenant-contenu définie avec la valeur NONE.By default, all SQL Server 2012SQL Server 2012 and later databases have a containment set to NONE.

Base de données partiellement à relation contenant-contenuPartially contained database
Une base de données partiellement à relation contenant-contenu est une base de données à relation contenant-contenu qui peut autoriser certaines fonctionnalités qui dépassent la limite de base de données.A partially contained database is a contained database that can allow some features that cross the database boundary. SQL ServerSQL Server permet de déterminer si la limite de la relation contenant-contenu est dépassée. includes the ability to determine when the containment boundary is crossed.

Utilisateur contenuContained user
Il existe deux types d'utilisateurs pour les bases de données à relation contenant-contenu.There are two types of users for contained databases.

  • Utilisateur de base de données à relation contenant-contenu avec mot de passeContained database user with password

    Les utilisateurs de base de données à relation contenant-contenu avec mots de passe sont authentifiés par la base de données.Contained database users with passwords are authenticated by the database. Pour plus d’informations, consultez Utilisateurs de base de données à relation contenant-contenu - Rendre votre base de données portable.For more information, see Contained Database Users - Making Your Database Portable.

  • Principaux WindowsWindows principals

    Les utilisateurs Windows autorisés et les membres de groupes Windows autorisés peuvent se connecter directement à la base de données et n'ont pas besoin de connexions dans la base de données master .Authorized Windows users and members of authorized Windows groups can connect directly to the database and do not need logins in the master database. La base de données fait confiance au processus d'authentification effectué par Windows.The database trusts the authentication by Windows.

    Les utilisateurs, selon les connexions dans la base de données master , peuvent bénéficier de l'accès à une base de données à relation contenant-contenu, mais cela créerait une dépendance sur l'instance SQL ServerSQL Server .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. Par conséquent, pour la création d'utilisateurs basés sur des connexions, reportez-vous au commentaire relatif aux bases de données partiellement à relation contenant-contenu.Therefore, creating users based on logins see comment for partially contained databases.

Important

L'activation de bases de données à relation contenant-contenu partielle transfère le contrôle de l'accès à l'instance de SQL ServerSQL Server aux propriétaires de la base de données.Enabling partially contained databases delegates control over access to the instance of SQL ServerSQL Server to the owners of the database. Pour plus d'informations, consultez Security Best Practices with Contained Databases.For more information, see Security Best Practices with Contained Databases.

Limite de base de donnéesDatabase Boundary
Comme les bases de données partiellement à relation contenant-contenu séparent les fonctionnalités de base de données de celles de l’instance, une frontière clairement définie existe entre ces deux éléments, appelée limite de base de données.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.

À l'intérieur de la limite de base de données se trouve le modèle de base de données, où les bases de données sont développées et gérées.Inside of the database boundary is the database model, where the databases are developed and managed. Les entités situées dans la base de données sont, par exemple, des tables système telles que sys.tables, des utilisateurs de base de données à relation contenant-contenu avec mots de passe et des tables utilisateur dans la base de données actuelle référencées par un nom en deux parties.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.

En dehors de la limite de base de données se trouve le modèle de gestion, qui se rapporte aux fonctions et à la gestion au niveau de l’instance.Outside of the database boundary is the management model, which pertains to instance-level functions and management. Les entités situées en dehors de la limite de base de données sont, par exemple, des tables système telles que sys.endpoints, des utilisateurs mappés aux connexions et des tables utilisateur dans une autre base de données référencées par un nom en trois parties.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.

Relation contenant-contenuContainment

Les entités d'utilisateur qui résident entièrement dans la base de données sont considérées avec relation contenant-contenu.User entities that reside entirely within the database are considered contained. Toutes les entités qui résident en dehors de la base de données, ou qui s'appuient sur une interaction avec des fonctions situées en dehors de la base de données, sont considérées sans relation contenant-contenu.Any entities that reside outside of the database, or rely on interaction with functions outside of the database, are considered uncontained.

En général, les entités d'utilisateur sont classées dans les catégories de relation contenant-contenu suivantes :In general, user entities fall into the following categories of containment:

  • Entités d’utilisateur à relation contenant-contenu entière (celles qui ne dépassent jamais la limite de base de données), par exemple sys.indexes.Fully contained user entities (those that never cross the database boundary), for example sys.indexes. Tout code qui utilise ces fonctionnalités ou tout objet qui référence uniquement ces entités est également entièrement à relation contenant-contenu.Any code that uses these features or any object that references only these entities is also fully contained.

  • Entités d’utilisateur sans relation contenant-contenu (celles qui dépassent la limite de base de données), par exemple sys.server_principals ou un principal de serveur (connexion) lui-même.Uncontained user entities (those that cross the database boundary), for example sys.server_principals or a server principal (login) itself. Tout code qui utilise ces entités ou toute fonction qui les référence est sans relation contenant-contenu.Any code that uses these entities or any functions that references these entities are uncontained.

Partially Contained DatabasePartially Contained Database

La fonctionnalité de base de données à relation contenant-contenu est actuellement disponible uniquement dans un état partiel.The contained database feature is currently available only in a partially contained state. Une base de données partiellement à relation contenant-contenu est une base de données à relation contenant-contenu qui autorise l'utilisation de fonctionnalités sans relation contenant-contenu.A partially contained database is a contained database that allows the use of uncontained features.

Utilisez les vues sys.dm_db_uncontained_entities et sys.sql_modules (Transact-SQL) pour retourner des informations sur des objets ou des fonctionnalités sans relation contenant-contenu.Use the sys.dm_db_uncontained_entities and sys.sql_modules (Transact-SQL) view to return information about uncontained objects or features. En déterminant l'état de la relation contenant-contenu des éléments de votre base de données, vous pouvez découvrir les objets ou les fonctionnalités qui doivent être remplacés ou modifiés pour promouvoir la relation contenant-contenu.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.

Important

Étant donné que certains objets ont pour paramètre de relation contenant-contenu NONEpar défaut, cette vue peut retourner des faux positifs.Because certain objects have a default containment setting of NONE, this view can return false positives.

Le comportement des bases de données partiellement à relation contenant-contenu est très différent de celui des bases de données sans relation contenant-contenu en termes de classement.The behavior of partially contained databases differs most distinctly from that of non-contained databases with regard to collation. Pour plus d'informations sur les problèmes de classement, consultez Contained Database Collations.For more information about collation issues, see Contained Database Collations.

Avantages de l'utilisation de bases de données partiellement à relation contenant-contenuBenefits of using Partially Contained Databases

Les problèmes et les complications associés aux bases de données sans relation contenant-contenu peuvent être résolus à l'aide d'une base de données partiellement à relation contenant-contenu.There are issues and complications associated with the non-contained databases that can be resolved by using a partially contained database.

Déplacement de base de donnéesDatabase Movement

Un des problèmes qui se produit lors du déplacement de bases de données est que certaines informations importantes peuvent être indisponibles lorsqu'une base de données est déplacée d'une instance à l'autre.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. Par exemple, les informations de connexion sont stockées dans l'instance, et non dans la base de données.For example, login information is stored within the instance instead of in the database. Lorsque vous déplacez une base de données sans relation contenant-contenu d'une instance vers une autre instance SQL ServerSQL Server, ces informations sont abandonnées.When you move a non-contained database from one instance to another instance of SQL ServerSQL Server, this information is left behind. Vous devez identifier les informations manquantes et les déplacer avec votre base de données vers la nouvelle instance de SQL ServerSQL Server.You must identify the missing information and move it with your database to the new instance of SQL ServerSQL Server. Le processus peut nécessiter du temps et s'avérer difficile.This process can be difficult and time-consuming.

La base de données partiellement à relation contenant-contenu peut stocker des informations importantes dans la base de données afin que celle-ci dispose toujours des informations après le déplacement.The partially contained database can store important information in the database so the database still has the information after it is moved.

Note

Une base de données partiellement à relation contenant-contenu peut fournir de la documentation décrivant ces fonctionnalités utilisées par une base de données qui ne peut pas être séparée de l'instance.A partially contained database can provide documentation describing those features that are used by a database that cannot be separated from the instance. Cela inclut une liste d'autres bases de données reliées entre elles, des paramètres système que la base de données requiert mais sans relation contenant-contenu, et ainsi de suite.This includes a list of other interrelated databases, system settings that the database requires but cannot be contained, and so on.

Avantage des utilisateurs de base de données à relation contenant-contenu avec Always OnBenefit of Contained Database Users with Always On

En réduisant les liens à l'instance de SQL ServerSQL Server, les bases de données partiellement à relation contenant-contenu peuvent être utiles pendant le basculement lorsque vous utilisez Groupes de disponibilité Always OnAlways On availability groups.By reducing the ties to the instance of SQL ServerSQL Server, partially contained databases can be useful during failover when you use Groupes de disponibilité Always OnAlways On availability groups.

La création d'utilisateurs à relation contenant-contenu permet à l'utilisateur de se connecter directement à la base de données à relation contenant-contenu.Creating contained users enables the user to connect directly to the contained database. Il s’agit d’une fonctionnalité très importante dans les scénarios de haute disponibilité et de récupération d’urgence, notamment dans le cadre d’une solution Always On.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. Si les utilisateurs sont des utilisateurs à relation contenant-contenu, en cas de basculement, les personnes peuvent se connecter au serveur secondaire sans créer de connexions sur l'instance hébergeant le serveur secondaire.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. Ceci constitue un avantage immédiat.This provides an immediate benefit. Pour plus d’informations, consultez Vue d’ensemble des groupes de disponibilité Always On (SQL Server) et Conditions préalables requises, restrictions et recommandations pour les groupes de disponibilité Always On (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).

Développement initial de la base de donnéesInitial Database Development

Étant donné qu'un développeur ne peut pas savoir où une nouvelle base de données sera déployée, diminuer les impacts environnementaux déployés sur la base de données réduit le travail et les difficultés du développeur.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. Dans le modèle sans relation contenant-contenu, le développeur doit prendre en considération les impacts environnementaux potentiels sur la nouvelle base de données et le nouveau programme.In the non-contained model, the developer must consider possible environmental impacts on the new database and program accordingly. Toutefois, en utilisant des bases de données partiellement à relation contenant-contenu, les développeurs peuvent détecter les impacts au niveau de l'instance sur la base de données et les difficultés au niveau de l'instance pour le développeur.However, by using partially contained databases, developers can detect instance-level impacts on the database and instance-level concerns for the developer.

Administration de bases de donnéesDatabase Administration

La gestion des paramètres de base de données dans la base de données, plutôt que dans la base de données master, permet à chaque propriétaire de la base de données d'avoir plus de contrôle sur sa base de données, sans donner au propriétaire de la base de données l'autorisation sysadmin .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.

LimitationsLimitations

Les bases de données partiellement à relation contenant-contenu n'autorisent pas les fonctionnalités suivantes.Partially contained databases do not allow the following features.

  • Les bases de données partiellement à relation contenant-contenu ne peuvent pas utiliser de réplication, de capture des données modifiées ou de suivi des modifications.Partially contained databases cannot use replication, change data capture, or change tracking.

  • Procédures numérotéesNumbered procedures

  • les objets liés par schéma qui dépendent de fonctions intégrées avec des modifications de classement ;Schema-bound objects that depend on built-in functions with collation changes

  • la modification de liaison résultant des modifications de classement, notamment les références aux objets, les colonnes, les symboles ou les types.Binding change resulting from collation changes, including references to objects, columns, symbols, or types.

  • la réplication, la capture de données modifiées et le suivi des modifications.Replication, change data capture, and change tracking.

Avertissement

Les procédures stockées temporaires sont actuellement autorisées.Temporary stored procedures are currently permitted. Étant donné que les procédures stockées temporaires violent la relation contenant-contenu, il ne faut pas s'attendre à leur prise en charge dans les futures versions d'une base de données à relation contenant-contenu.Because temporary stored procedures breach containment, they are not expected to be supported in future versions of contained database.

Identification de base de données à relation contenant-contenuIdentifying Database Containment

Il existe deux outils qui permettent d'identifier l'état de la relation contenant-contenu de la base de données.There are two tools to help identify the containment status of the database. sys.dm_db_uncontained_entities (Transact-SQL) est une vue qui montre toutes les entités potentiellement sans relation contenant-contenu dans la base de données.The sys.dm_db_uncontained_entities (Transact-SQL) is a view that shows all the potentially uncontained entities in the database. L'événement database_uncontained_usage se produit lorsqu'une entité sans relation contenant-contenu réelle est identifiée au moment de l'exécution.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

Cette vue affiche les entités de la base de données susceptibles d'être sans relation contenant-contenu, telles que celles qui dépassent la limite de base de données.This view shows any entities in the database that have the potential to be uncontained, such as those that cross-the database boundary. Cela inclut les entités d'utilisateur qui peuvent utiliser des objets à l'extérieur du modèle de base de données.This includes those user entities that may use objects outside the database model. Cependant, comme la relation contenant-contenu de certaines entités (par exemple, celles utilisant SQL dynamique) ne peut être déterminée qu'au moment de l'exécution, la vue peut afficher des entités qui ne sont pas réellement sans relation contenant-contenu.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. Pour plus d’informations, consultez sys.dm_db_uncontained_entities (Transact-SQL).For more information, see sys.dm_db_uncontained_entities (Transact-SQL).

database_uncontained_usage, événementdatabase_uncontained_usage event

Ce XEvent se produit chaque fois qu'une entité sans relation contenant-contenu est identifiée lors de l'exécution.This XEvent occurs whenever an uncontained entity is identified at run time. Cela inclut des entités provenant du code client.This includes entities originated in client code. Ce XEvent ne se produit que pour les entités sans relation contenant-contenu réelles.This XEvent will occur only for actual uncontained entities. Toutefois, l'événement ne se produit qu'au moment de l'exécution.However, the event only occurs at run time. Par conséquent, toutes les entités d'utilisateur sans relation contenant-contenu que vous n'avez pas exécutées ne seront pas identifiées par ce XEventTherefore, any uncontained user entities you have not run will not be identified by this XEvent

Voir aussiSee Also

Fonctionnalités modifiées (base de données à relation contenant-contenu) 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
Utilisateurs de base de données à relation contenant-contenu - Rendre votre base de données portableContained Database Users - Making Your Database Portable