Bases de datos independientesContained Databases

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL DatabaseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

Una base de datos independiente es una base de datos que está aislada de otras bases de datos y de la instancia de SQL ServerSQL Server que hospeda la base de datos.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 2019 (15.x)SQL Server 2019 (15.x) ayuda al usuario a aislar su base de datos de la instancia de 4 maneras.helps user to isolate their database from the instance in 4 ways.

  • Muchos de los metadatos que describen una base de datos se mantienen en la base de datos.Much of the metadata that describes a database is maintained in the database. (Además, o en lugar de, mantenerse los metadatos en la base de datos maestra).(In addition to, or instead of, maintaining metadata in the master database.)

  • Todos los metadatos se definen utilizando la misma intercalación.All metadata are defined using the same collation.

  • La autenticación de usuario la puede realizar la base de datos, reduciendo la dependencia de las bases de datos en los inicios de sesión de la instancia 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.

  • El entorno de SQL ServerSQL Server (DMV, XEvents, etc.) informa y puede actuar en la información de contención.The SQL ServerSQL Server environment (DMV's, XEvents, etc.) reports and can act upon containment information.

Algunas características de las bases de datos parcialmente independientes, como el almacenamiento de la base de datos, se aplican a todas las bases de datos de SQL Server 2019 (15.x)SQL Server 2019 (15.x) .Some features of partially contained databases, such as storing metadata in the database, apply to all SQL Server 2019 (15.x)SQL Server 2019 (15.x) databases. Algunas ventajas de las bases de datos parcialmente independientes, como la autenticación en el nivel de base de datos y la intercalación de catálogo, se deben habilitar para que estén disponibles.Some benefits of partially contained databases, such as database level authentication and catalog collation, must be enabled before they are available. La contención parcial se habilita mediante las instrucciones CREATE DATABASE y ALTER DATABASE o mediante 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. Para obtener más información acerca de cómo habilitar la contención parcial de bases de datos, vea Migrate to a Partially Contained Database.For more information about how to enable partial database containment, see Migrate to a Partially Contained Database.

Conceptos de las bases de datos parcialmente independientesPartially Contained Database Concepts

Una base de datos totalmente independiente incluye todos los metadatos y opciones de configuración necesarios para definirla y no tiene dependencias de configuración en la instancia de Motor de base de datos de SQL ServerSQL Server Database Engine donde esté instalada.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 Motor de base de datos de SQL ServerSQL Server Database Engine where the database is installed. En versiones anteriores de SQL ServerSQL Server, la separación de una base de datos de la instancia de SQL ServerSQL Server podría necesitar mucho tiempo y un conocimiento detallado de la relación entre la base de datos y la instancia 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. Las bases de datos parcialmente independientes facilitan la separación de una base de datos de la instancia de SQL ServerSQL Server y de otras bases de datos.Partially contained databases make it easier to separate a database from the instance of SQL ServerSQL Server and other databases.

La base de datos independiente considera las características en lo que se refiere a la contención.The contained database considers features with regard to containment. Cualquier entidad definida por el usuario que solo se base en las funciones que residen dentro de la base de datos se considera totalmente independiente.Any user-defined entity that relies only on functions that reside in the database is considered fully contained. Cualquier entidad definida por el usuario que se base en funciones que residen fuera de la base de datos se considera dependiente.Any user-defined entity that relies on functions that reside outside the database is considered uncontained. (Para obtener más información, vea la sección Contención más adelante en este tema).(For more information, see the Containment section later in this topic.)

Las siguientes condiciones se aplican al modelo de base de datos independiente.The following terms apply to the contained database model.

Límite de la base de datosDatabase boundary
El límite entre el modelo una base de datos y la instancia de SQL ServerSQL Server.The boundary between a database and the instance of SQL ServerSQL Server. El límite entre una base de datos y otras bases de datos.The boundary between a database and other databases.

ContenidaContained
Un elemento que está completamente en el límite de la base de datos.An element that exists entirely in the database boundary.

No contenidaUncontained
Un elemento que cruza el límite de la base de datos.An element that crosses the database boundary.

Base de datos dependienteNon-contained database
Una base de datos que tiene establecida la contención en NONE.A database that has containment set to NONE. Todas las bases de datos de versiones anteriores a SQL Server 2012 (11.x)SQL Server 2012 (11.x) son dependientes.All databases in versions earlier than SQL Server 2012 (11.x)SQL Server 2012 (11.x) are non-contained. De forma predeterminada, todas las bases de datos de SQL Server 2012 (11.x)SQL Server 2012 (11.x) y posteriores tienen establecida la contención en NONE.By default, all SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later databases have a containment set to NONE.

Base de datos parcialmente independientePartially contained database
Una base de datos parcialmente independiente es una base de datos independiente que puede permitir algunas características que cruzan el límite de la base de datos.A partially contained database is a contained database that can allow some features that cross the database boundary. SQL ServerSQL Server incluye la capacidad de determinar cuándo se traspasa el límite de contención.includes the ability to determine when the containment boundary is crossed.

Usuario contenidoContained user
Hay dos tipos de usuarios para las bases de datos independientes.There are two types of users for contained databases.

  • Usuario de la base de datos independiente con contraseñaContained database user with password

    La base de datos autentica a los usuarios de la base de datos independiente con contraseñas.Contained database users with passwords are authenticated by the database. Para obtener más información, vea Usuarios de base de datos independiente: hacer que la base de datos sea portátil.For more information, see Contained Database Users - Making Your Database Portable.

  • Entidades de seguridad de WindowsWindows principals

    Los usuarios de Windows autorizados y los miembros de grupos de Windows autorizados pueden conectarse directamente a la base de datos y no requieren inicios de sesión en la base de datos maestra .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 datos confía en la autenticación de Windows.The database trusts the authentication by Windows.

A los usuarios basados en inicios de sesión en la base de datos maestra se les puede conceder acceso a una base de datos independiente, pero eso crearía una dependencia en la instancia de 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. Por lo tanto, para crear usuarios basados en inicios de sesión se necesita contención parcial.Therefore, creating users based on logins requires partial containment.

Importante

La habilitación de bases de datos parcialmente independientes delega el control sobre el acceso a la instancia de SQL ServerSQL Server en los propietarios de la base de datos.Enabling partially contained databases delegates control over access to the instance of SQL ServerSQL Server to the owners of the database. Para más información, vea Security Best Practices with Contained Databases.For more information, see Security Best Practices with Contained Databases.

Límite de la base de datosDatabase Boundary
Dado que las bases de datos parcialmente independientes separan la funcionalidad de la base de datos de las de la instancia, hay una línea definida claramente entre estos dos elementos que se conoce como límite de la base de datos.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.

Dentro del límite de la base de datos está el modelo de base de datos, donde las bases de datos se desarrollan y administran.Inside of the database boundary is the database model, where the databases are developed and managed. Ejemplos de entidades situadas dentro de la base de datos son las tablas del sistema como sys.tables, los usuarios de bases de datos independientes con contraseñas y las tablas de usuario de la base de datos actual a la que se hace referencia mediante un nombre de dos partes.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.

Fuera del límite de la base de datos está el modelo de administración, que tiene que ver con la administración y las funciones del nivel de instancia.Outside of the database boundary is the management model, which pertains to instance-level functions and management. Algunos ejemplos de entidades situadas fuera del límite de la base de datos son las tablas del sistema como sys.endpoints, los usuarios asignados a los inicios de sesión y las tablas de usuario de otra base de datos a la que se hace referencia mediante un nombre de tres partes.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.

ContenciónContainment

Las entidades de usuario que residen completamente dentro de la base de datos se consideran independientes.User entities that reside entirely within the database are considered contained. Cualquier entidad de usuario que resida fuera de la base de datos o se base en la interacción con funciones externas a la base de datos se considera dependiente.Any entities that reside outside of the database, or rely on interaction with functions outside of the database, are considered uncontained.

En general, las entidades de usuario entran en las siguientes categorías de contención:In general, user entities fall into the following categories of containment:

  • Las entidades de usuario totalmente independientes (aquellas que nunca cruzan el límite de la base de datos), por ejemplo, sys.indexes.Fully contained user entities (those that never cross the database boundary), for example sys.indexes. Cualquier código que utilice estas características o cualquier objeto que haga referencia únicamente a estas entidades también está totalmente contenido.Any code that uses these features or any object that references only these entities is also fully contained.

  • Las entidades de usuario dependientes (aquellas que cruzan el límite de la base de datos), por ejemplo sys.server_principals o una entidad de seguridad del servidor (inicio de sesión) propiamente dicha.Uncontained user entities (those that cross the database boundary), for example sys.server_principals or a server principal (login) itself. Cualquier código que utilice estas entidades o cualquier función que haga referencia a estas entidades también es dependiente.Any code that uses these entities or any functions that references these entities are uncontained.

Partially Contained DatabasePartially Contained Database

La característica de base de datos independiente solo está disponible actualmente en un estado contenido de forma parcial.The contained database feature is currently available only in a partially contained state. Una base de datos parcialmente independiente es una base de datos independiente que permite el uso de características no contenidas.A partially contained database is a contained database that allows the use of uncontained features.

Use las vistas sys.dm_db_uncontained_entities y sys.sql_modules (Transact-SQL) para devolver información sobre características u objetos dependientes.Use the sys.dm_db_uncontained_entities and sys.sql_modules (Transact-SQL) view to return information about uncontained objects or features. Mediante la determinación del estado de contención de los elementos de la base de datos, se puede detectar qué objetos o características deben reemplazarse o alterarse para promover la contención.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.

Importante

Dado que ciertos objetos tienen la configuración de contención predeterminada NONE, esta vista puede devolver falsos positivos.Because certain objects have a default containment setting of NONE, this view can return false positives.

El comportamiento de las bases de datos parcialmente independientes difiere del que se observa en las bases de datos dependientes en lo que respecta a la intercalación.The behavior of partially contained databases differs most distinctly from that of non-contained databases with regard to collation. Para obtener más información acerca de los problemas de intercalación, vea Contained Database Collations.For more information about collation issues, see Contained Database Collations.

Ventajas del uso de bases de datos parcialmente independientesBenefits of using Partially Contained Databases

Las bases de datos dependientes tienen problemas y complicaciones asociados que se pueden resolver utilizando una base de datos parcialmente independiente.There are issues and complications associated with the non-contained databases that can be resolved by using a partially contained database.

Movimiento de la base de datosDatabase Movement

Uno de los problemas que se produce al mover bases de datos, es que determinada información importante puede no estar disponible cuando una base de datos se mueve de una instancia a otra.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. Por ejemplo, la información de inicio de sesión se almacena en la instancia en lugar de en la base de datos.For example, login information is stored within the instance instead of in the database. Al mover una base de datos dependiente de una instancia a otra de SQL ServerSQL Server, esta información se queda atrás.When you move a non-contained database from one instance to another instance of SQL ServerSQL Server, this information is left behind. Debe identificar la información que falta y moverla con la base de datos a la nueva instancia de SQL ServerSQL Server.You must identify the missing information and move it with your database to the new instance of SQL ServerSQL Server. Este proceso puede ser difícil y tardar mucho tiempo.This process can be difficult and time-consuming.

La base de datos parcialmente independiente puede almacenar información importante en la base de datos, de modo que esta todavía tiene la información después de moverse.The partially contained database can store important information in the database so the database still has the information after it is moved.

Nota

Una base de datos parcialmente independiente puede proporcionar documentación que describe las características que se utilizan en una base de datos que no se puede separar de la instancia.A partially contained database can provide documentation describing those features that are used by a database that cannot be separated from the instance. Esto incluye una lista de otras bases de datos interrelacionadas, la configuración del sistema que la base de datos requiere pero no se puede contener, etc.This includes a list of other interrelated databases, system settings that the database requires but cannot be contained, and so on.

Ventajas de usuarios de bases de datos independientes con AlwaysOnBenefit of Contained Database Users with Always On

Mediante la reducción de los vínculos a la instancia de SQL ServerSQL Server, las bases de datos parcialmente independientes pueden ser útiles durante la conmutación por error cuando se use Grupos de disponibilidad AlwaysOnAlways 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 Grupos de disponibilidad AlwaysOnAlways On availability groups.

La creación de usuarios contenidos permite al usuario conectarse directamente a la base de datos independiente.Creating contained users enables the user to connect directly to the contained database. Esta es una característica muy importante en escenarios de alta disponibilidad y recuperación ante desastres, como en una solución de AlwaysOn.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. Cuando los usuarios son usuarios contenidos, si que se produce una conmutación por error, podrán conectarse al servidor secundario sin crear inicios de sesión en la instancia que hospeda a este servidor.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. Esto proporciona una ventaja inmediata.This provides an immediate benefit. Para obtener más información, consulte Información general de los grupos de disponibilidad AlwaysOn (SQL Server) y Requisitos previos, restricciones y recomendaciones para Grupos de disponibilidad AlwaysOn (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).

Desarrollo inicial de la base de datosInitial Database Development

Dado que un desarrollador puede no saber dónde se implementará una nueva base de datos, la limitación de los impactos del entorno implementados en la base de datos disminuye el trabajo y la carga del desarrollador.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. En el modelo dependiente, el desarrollador debe tener en cuenta los posibles impactos del entorno en la nueva base de datos y programar en consecuencia.In the non-contained model, the developer must consider possible environmental impacts on the new database and program accordingly. Sin embargo, las bases de datos parcialmente independientes permiten a los desarrolladores detectar los efectos de nivel de instancia en la base de datos y aspectos en el nivel de instancia que les preocupan.However, by using partially contained databases, developers can detect instance-level impacts on the database and instance-level concerns for the developer.

Administración de bases de datosDatabase Administration

El mantenimiento de los valores de configuración de la base de datos en la base de datos, en lugar de en la base de datos maestra, permite a cada propietario de la base de datos tener un mayor control sobre ella, sin proporcionar al propietario de la base de datos el permiso 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.

LimitacionesLimitations

Las bases de datos parcialmente independientes no permiten las siguientes características.Partially contained databases do not allow the following features.

  • Replicación, captura de datos modificados o seguimiento de cambiosReplication, change data capture, or change tracking.

  • Procedimientos numeradosNumbered procedures

  • Objetos enlazados a esquema que dependen de funciones integradas con cambios de intercalaciónSchema-bound objects that depend on built-in functions with collation changes

  • Cambios de enlace que son el resultado de los cambios de intercalación, incluidas las referencias a los objetos, columnas, símbolos o tipos.Binding change resulting from collation changes, including references to objects, columns, symbols, or types.

Advertencia

Los procedimientos almacenados temporales se admiten ahora.Temporary stored procedures are currently permitted. Dado que los procedimientos almacenados temporales incumplen la contención, no está previsto que se admitan en las versiones futuras de una base de datos independiente.Because temporary stored procedures breach containment, they are not expected to be supported in future versions of contained database.

Identificar la contención de base de datosIdentifying Database Containment

Hay dos herramientas para ayudar a identificar el estado de contención de la base de datos.There are two tools to help identify the containment status of the database. sys.dm_db_uncontained_entities (Transact-SQL)es una vista que muestra todas las entidades potencialmente no contenidas de la base de datos.The sys.dm_db_uncontained_entities (Transact-SQL) is a view that shows all the potentially uncontained entities in the database. El evento database_uncontained_usage se produce cuando se identifica una entidad real no contenida en tiempo de ejecución.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

Esta vista muestra las entidades de la base de datos que tienen el potencial de ser dependientes, como por ejemplo, las que cruzan los límites de la base de datos.This view shows any entities in the database that have the potential to be uncontained, such as those that cross-the database boundary. Esto incluye las entidades del usuario que pueden utilizar objetos fuera del modelo de base de datos.This includes those user entities that may use objects outside the database model. Sin embargo, dado que la contención de ciertas entidades (por ejemplo, aquellas que usan SQL dinámico) no se puede determinar hasta el tiempo de ejecución, la vista puede mostrar algunas entidades que realmente no están contenidas.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. Para obtener más información, vea sys.dm_db_uncontained_entities (Transact-SQL).For more information, see sys.dm_db_uncontained_entities (Transact-SQL).

database_uncontained_usage, eventodatabase_uncontained_usage event

Este XEvent tiene lugar siempre que una entidad dependiente se identifica en tiempo de ejecución.This XEvent occurs whenever an uncontained entity is identified at run time. Esto incluye las entidades originadas en el código de cliente.This includes entities originated in client code. Este Xevent solo tendrá lugar para las entidades dependientes reales.This XEvent will occur only for actual uncontained entities. Sin embargo, el evento solo se produce en tiempo de ejecución.However, the event only occurs at run time. Por consiguiente, este XEvent no identificará las entidades de usuario dependientes que no se hayan ejecutado.Therefore, any uncontained user entities you have not run will not be identified by this XEvent

Consulte tambiénSee Also

Características modificadas (base de datos independiente) Modified Features (Contained Database)
Intercalaciones de bases de datos independientes Contained Database Collations
Prácticas recomendadas de seguridad con bases de datos independientes Security Best Practices with Contained Databases
Migrate to a Partially Contained Database Migrate to a Partially Contained Database
Usuarios de base de datos independientes: hacer que la base de datos sea portátilContained Database Users - Making Your Database Portable