Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Una base de datos contenida es una base de datos que está aislada de otras bases de datos y de la instancia de SQL Server que hospeda la base de datos. SQL Server ayuda al usuario a aislar su base de datos de la instancia de 4 maneras.
Muchos de los metadatos que describen una base de datos se mantienen en la base de datos. (Además de, o en lugar de, mantener metadatos en la base de datos maestra.)
Todos los metadatos se definen utilizando la misma intercalación.
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 Server.
El entorno de SQL Server (las DMV, XEvents, etc.) informa sobre la información de contención y puede actuar en función de ella.
Algunas características de las bases de datos con contención parcial, como almacenar metadatos en la base de datos, se aplican a todas las bases de datos de SQL Server. 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. La contención parcial se habilita mediante las CREATE DATABASE instrucciones y ALTER DATABASE o mediante SQL 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.
Conceptos de bases de datos parcialmente contenidas
Una base de datos totalmente independiente incluye todas las configuraciones y metadatos necesarios para definir la base de datos y no tiene dependencias de configuración en la instancia del motor de base de datos SQL Server donde está instalada la base de datos. En versiones anteriores de SQL Server, la separación de una base de datos de la instancia de SQL Server podría necesitar mucho tiempo y un conocimiento detallado de la relación entre la base de datos y la instancia de SQL Server. Las bases de datos parcialmente independientes facilitan la separación de una base de datos de la instancia de SQL Server y de otras bases de datos.
La base de datos contenida tiene en cuenta las características con respecto a la contención. 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. Cualquier entidad definida por el usuario que dependa de funciones que residen fuera de la base de datos se considera no contenida. (Para obtener más información, vea la sección Contención más adelante en este tema).
Las siguientes condiciones se aplican al modelo de base de datos independiente.
Límite de la base de datos
El límite entre una base de datos y la instancia de SQL Server. El límite entre una base de datos y otras bases de datos.
Contenido
Un elemento que está completamente en el límite de la base de datos.
Sin contener
Un elemento que cruza el límite de la base de datos.
Base de datos no independiente
Una base de datos que tiene establecida la contención en NONE. Todas las bases de datos de versiones anteriores a SQL Server 2012 (11.x) no son independientes. De forma predeterminada, todas las bases de datos de SQL Server 2012 (11.x) y posteriores tienen una contención establecida en NONE.
Base de datos parcialmente contenida
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. SQL Server incluye la capacidad de determinar cuándo se traspasa el límite de contención.
Usuario restringido
Hay dos tipos de usuarios para las bases de datos independientes.
Usuario de base de datos independiente con contraseña
Los usuarios de bases de datos independientes con contraseña son autenticados por la base de datos. Para obtener más información, vea Usuarios de base de datos independiente: hacer que la base de datos sea portátil.
Entidades de seguridad de Windows
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 . La base de datos confía en la autenticación de 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 Server. Por lo tanto, crear usuarios a partir de inicios de sesión requiere contención parcial.
Importante
La habilitación de bases de datos parcialmente independientes delega el control sobre el acceso a la instancia de SQL Server en los propietarios de la base de datos. Para más información, vea Security Best Practices with Contained Databases.
Límite de la base de datos
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.
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. 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.
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. 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.
Contención
Las entidades de usuario que residen completamente dentro de la base de datos se consideran independientes. Cualquier entidad que resida fuera de la base de datos o dependa de la interacción con funciones externas a la base de datos se considera no contenida.
En general, las entidades de usuario entran en las siguientes categorías de contención:
Las entidades de usuario completamente contenidas (aquellas que nunca cruzan los límites de la base de datos), por ejemplo 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.
Las entidades de usuario no contenidas (aquellas que cruzan el límite de la base de datos), por ejemplo sys.server_principals o una entidad de seguridad de servidor (inicio de sesión) en sí. Cualquier código que utilice estas entidades o cualquier función que haga referencia a ellas no está contenido.
Base de datos parcialmente contenida
La funcionalidad de base de datos contenida actualmente solo está disponible en un estado de contención parcial. Una base de datos parcialmente independiente es una base de datos independiente que permite el uso de características no contenidas.
Use las vistas sys.dm_db_uncontained_entities y sys.sql_modules (Transact-SQL) para obtener información sobre objetos o características no contenidos. 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.
Importante
Dado que ciertos objetos tienen la configuración de contención predeterminada NONE, esta vista puede devolver falsos positivos.
El comportamiento de las bases de datos con contención parcial difiere más claramente del de las bases de datos no contenidas en lo que respecta a la intercalación. Para obtener más información acerca de los problemas de intercalación, vea Contained Database Collations.
Ventajas del uso de bases de datos parcialmente independientes
Hay problemas y complicaciones asociados a las bases de datos no independientes que se pueden resolver mediante el uso de una base de datos parcialmente independiente.
Movimiento de la base de datos
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. Por ejemplo, la información de inicio de sesión se almacena en la instancia en lugar de en la base de datos. Cuando se mueve una base de datos no contenida de una instancia de SQL Server a otra, esta información queda atrás. Debe identificar la información que falta y moverla con la base de datos a la nueva instancia de SQL Server. Este proceso puede ser difícil y tardar mucho tiempo.
La base de datos parcialmente contenida puede almacenar información importante en la propia base de datos, de modo que siga conservándola después de trasladarse.
Nota:
Una base de datos parcialmente contenida puede proporcionar documentación en la que se describen las características que utiliza una base de datos que no pueden separarse de la instancia. 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.
Ventajas de usuarios de bases de datos independientes con AlwaysOn
Al reducir la dependencia de la instancia de SQL Server, las bases de datos con contención parcial pueden ser útiles durante la conmutación por error al usar grupos de disponibilidad Always On.
La creación de usuarios contenidos permite al usuario conectarse directamente a la base de datos independiente. Esta es una característica muy importante en escenarios de alta disponibilidad y recuperación ante desastres, como en una solución de AlwaysOn. 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. Esto proporciona una ventaja inmediata. 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).
Desarrollo inicial de la base de datos
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. En el modelo no contenido, el desarrollador debe tener en cuenta los posibles impactos del entorno en la nueva base de datos y programar en consecuencia. Sin embargo, al usar bases de datos parcialmente contenidas, los desarrolladores pueden detectar los impactos a nivel de instancia en la base de datos y las consideraciones a nivel de instancia para el desarrollador.
Administración de bases de datos
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 .
Limitaciones
Las bases de datos con contención parcial no admiten las siguientes características.
Replicación, captura de datos modificados o seguimiento de cambios
Procedimientos numerados
Objetos enlazados a esquema que dependen de funciones integradas con cambios de intercalación
Cambio de vinculación derivado de cambios de cotejamiento, incluidas las referencias a objetos, columnas, símbolos o tipos.
Advertencia
Actualmente, se permiten los procedimientos almacenados temporales. 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.
Identificar la contención de bases de datos
Hay dos herramientas para ayudar a identificar el estado de contención de la base de datos. sys.dm_db_uncontained_entities (Transact-SQL) es una vista que muestra todas las entidades potencialmente no contenidas de la base de datos. El evento database_uncontained_usage se produce cuando se identifica una entidad real no contenida en tiempo de ejecución.
sys.dm_db_uncontained_entities
Esta vista muestra todas las entidades de la base de datos que pueden no estar contenidas, como las que cruzan el límite de la base de datos. Esto incluye las entidades del usuario que pueden utilizar objetos fuera del modelo de base de datos. 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. Para obtener más información, vea sys.dm_db_uncontained_entities (Transact-SQL).
evento de uso no contenido de base de datos
Este XEvent se produce siempre que se identifica una entidad no contenida en tiempo de ejecución. Esto incluye las entidades originadas en el código de cliente. Este XEvent solo se producirá para entidades reales no contenidas. Sin embargo, el evento solo se produce en tiempo de ejecución. Por consiguiente, este XEvent no identificará las entidades de usuario no contenidas que no haya ejecutado.
Consulte también
Características modificadas (base de datos contenida)
Intercalaciones de bases de datos independientes
Prácticas recomendadas de seguridad con bases de datos independientes
Migrar a una base de datos parcialmente independiente
Usuarios de base de datos independientes: hacer que la base de datos sea portátil