Bases de datos independientes

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Una base de datos independiente es una base de datos que está aislada de otras bases de datos y de la instancia de 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, o en lugar de, mantenerse los 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 (DMV, XEvents, etc.) informa y puede actuar en la información de contención.

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. 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 instrucciones CREATE DATABASE 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 las bases de datos parcialmente independientes

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 independiente considera las características en lo que se refiere 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 se base en funciones que residen fuera de la base de datos se considera dependiente. (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.

Contenida
Un elemento que está completamente en el límite de la base de datos.

No contenida
Un elemento que cruza el límite de la base de datos.

Base de datos dependiente
Una base de datos que tiene establecida la contención en NONE. Todas las bases de datos en versiones anteriores a SQL Server 2012 (11.x) son dependientes. 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 independiente
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 contenido
Hay dos tipos de usuarios para las bases de datos independientes.

  • Usuario de la base de datos independiente con contraseña

    La base de datos autentica a los usuarios de la base de datos independiente con contraseñas. 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, para crear usuarios basados en inicios de sesión se necesita 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.

Containment

Las entidades de usuario que residen completamente dentro de la base de datos se consideran independientes. 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.

En general, las entidades de usuario entran en las siguientes categorías de contención:

  • Las entidades de usuario totalmente independientes (aquellas que nunca cruzan el límite 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 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. Cualquier código que utilice estas entidades o cualquier función que haga referencia a estas entidades también es dependiente.

Base de datos parcialmente independiente

La característica de base de datos independiente solo está disponible actualmente en un estado contenido de forma 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 devolver información sobre características u objetos dependientes. 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 parcialmente independientes difiere del que se observa en las bases de datos dependientes 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

Las bases de datos dependientes tienen problemas y complicaciones asociados que se pueden resolver utilizando 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. Al mover una base de datos dependiente de una instancia a otra de SQL Server, esta información se 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 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.

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. 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

Mediante la reducción de los vínculos a la instancia de SQL Server, las bases de datos parcialmente independientes pueden ser útiles durante la conmutación por error cuando se use 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 dependiente, el desarrollador debe tener en cuenta los posibles impactos del entorno en la nueva base de datos y programar en consecuencia. 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.

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 parcialmente independientes no permiten 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

  • Cambios de enlace que son el resultado de los cambios de intercalación, incluidas las referencias a los objetos, columnas, símbolos o tipos.

Advertencia

Los procedimientos almacenados temporales se admiten ahora. 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 base 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 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. 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).

database_uncontained_usage, evento

Este XEvent tiene lugar siempre que una entidad dependiente se identifica en tiempo de ejecución. Esto incluye las entidades originadas en el código de cliente. Este Xevent solo tendrá lugar para las entidades dependientes reales. Sin embargo, el evento solo se produce en tiempo de ejecución. Por consiguiente, este XEvent no identificará las entidades de usuario dependientes que no se hayan 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