sábado, 28 de enero de 2017

Bases de datos parcialmente contenidas

Bases de datos contenidas

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 aloja la base de datos.  Existen varios tipos de datos aislados de la base de datos y de la instancia.

Los metadatos que describen una base de datos.
La autenticación del usuario.
El entorno de SQL Server.

Algunas características de bases de las bases de datos parcialmente contenidas, como el almacenamiento de metadatos en la base de datos, se aplican a todas las bases de datos de SQL Server. Algunos beneficios de las bases de datos parcialmente contenidas, como la autenticación de nivel de base de datos y la intercalación de catálogos, deben habilitarse antes para que estén disponibles. La contención parcial se habilita con  sentencias CREATE DATABASE y ALTER DATABASE o utilizando el SQL Server Management Studio. 

Bases de datos parcialmente contenidas

Concepto de base de datos parcialmente contenida


Una base de datos totalmente contenida incluye todas las configuraciones y metadatos necesarios para definir la base de datos. Las bases de datos parcialmente contenidas facilitan la separación de una base de datos de su instancia de SQL Server y otras bases de datos.
Cualquier entidad definida por el usuario que dependa únicamente de las funciones que residen en la base de datos se considera totalmente contenida. Cualquier entidad definida por el usuario que depende de funciones que residen fuera de la base de datos se considera no contenida.
Los siguientes términos se aplican al modelo de base de datos contenido.

Base de datos no contenida


Es una base de datos que tiene la contención establecida en NONE. Todas las bases de datos en versiones anteriores a SQL Server 2012 no están contenidas. De forma predeterminada, todas las bases de datos de SQL Server 2012 y posteriores tienen una contención establecida en NONE.

Base de datos parcialmente contenida


Una base de datos parcialmente contenida, es una base de datos contenida que puede permitir que algunas características crucen el límite de la base de datos. SQL Server incluye la capacidad de determinar cuándo se cruzan los límites de contención.


La función de base de datos contenida está actualmente disponible sólo en un estado parcialmente contenido. Una base de datos parcialmente contenida es una base de datos contenida que permite el uso de características no contenidas.
Se puede utilizar la vista sys.dm_db_uncontained_entities y sys.sql_modules  para devolver información sobre objetos o características no contenidas. Determinando el estado de contención de los elementos de su base de datos, se puede descubrir qué objetos o características deben ser reemplazados o alterados para promover la contención.


Importante. Dado que determinados objetos tienen un valor de contención predeterminado de NONE, esta vista puede devolver falsos positivos.

Usuario contenido

Hay dos tipos de usuarios para las bases de datos contenidas.

Usuario de base de datos contenida con contraseña

Los usuarios de la base de datos contenida con contraseñas son autenticados por la base de datos. 

Usuarios de Windows

Los usuarios autorizados de Windows y los miembros de grupos de Windows autorizados pueden conectarse directamente a la base de datos y no necesitan inicios de sesión en la base de datos master. La base de datos confía en la autenticación de Windows.
Los usuarios basados en inicios de sesión en la base de datos master pueden tener acceso a una base de datos contenida, pero eso crearía una dependencia en la instancia de SQL Server.

Importante. Habilitar bases de datos parcialmente contenidas controla el acceso a la instancia de SQL Server a los propietarios de la base de datos. Para obtener más información, Security Best Practices with Contained Databases. 

Límites de la base de datos

Debido a que las bases de datos parcialmente contenidas separan la funcionalidad de la base de datos de las de la instancia, existe una línea claramente definida entre estos dos elementos llamada límite de la base de datos.
Dentro del límite de la base de datos se encuentra el modelo de base de datos, donde se desarrollan y gestionan las bases de datos. Por ejemplo, las entidades ubicadas dentro de la base de datos incluyen las tablas de sistema como sys.tables, los usuarios de bases de datos con contraseñas y tablas de usuario de la base de datos referenciada con un nombre de dos partes.
Fuera del límite de la base de datos se encuentra el modelo de gestión, que se refiere a funciones y gestión a nivel de instancia. Ejemplos de entidades ubicadas fuera del límite de la base de datos incluyen tablas del sistema como sys.endpoints, usuarios asignados a los inicios de sesión y tablas de usuario en otra base de datos referenciada por un nombre de tres partes.

Contención

Las entidades de usuario que residen completamente dentro de la base de datos se consideran contenidas. Las entidades que residen fuera de la base de datos, o dependen de la interacción con funciones fuera de la base de datos, se consideran no contenidas.
En general, las entidades de usuario pertenecen a las siguientes categorías de contención:
Entidades de usuario completamente contenidas (son 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 sólo hace referencia 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 un servidor principal (login). Cualquier código que utiliza estas entidades o cualquier función que hace referencia a estas entidades no contienen.

Beneficios del uso de bases de datos parcialmente contenidas

Hay problemas y complicaciones asociadas a las bases de datos no contenidas que se pueden resolver utilizando una base de datos parcialmente contenida.

Movimiento de una base de datos parcialmente contenida

Uno de los problemas que se produce al mover bases de datos es que alguna información importante puede no estar disponible cuando migra una base de datos de una instancia a otra. Por ejemplo, la información de inicio de sesión que se almacena dentro de la instancia en lugar de en la base de datos. Cuando se migra una base de datos no contenida de una instancia a otra instancia de SQL Server, se pierde esta información. Se debe identificar la información que falta y moverla con su base de datos a la nueva instancia de SQL Server. Este proceso puede ser difícil y requerir mucho tiempo.
Una base de datos parcialmente contenida puede almacenar información importante en la base de datos para que la base de datos conserve la información después migrarla.

Nota. Una base de datos parcialmente contenida puede proporcionar documentación que describa las características que son utilizadas por una base de datos que no se puede separar de la instancia. Esto incluye una lista de otras bases de datos interrelacionadas, configuraciones del sistema que la base de datos requiere pero no se puede contener, y así sucesivamente.

Beneficio de las bases de datos contenidas: los usuarios de siempre están activados

Al reducir los vínculos a la instancia de SQL Server, las bases de datos parcialmente contenidas pueden ser útiles durante la conmutación por error cuando se utiliza siempre en grupos de disponibilidad.
La creación de usuarios contenidos, permite al usuario conectarse directamente a la base de datos contenida. Esta es una característica muy significativa en los escenarios de alta disponibilidad y recuperación de desastres, como en una solución Siempre en Línea. Si los usuarios están contenidos, en caso de conmutación por error, la gente podría conectarse a la secundaria sin crear inicios de sesión en la instancia que aloja la secundaria. Esto proporciona un beneficio inmediato. 

Desarrollo inicial de bases de datos

Como un desarrollador no tiene por qué saber dónde se desplegará una nueva base de datos,  limitando los impactos ambientales desplegados en la base de datos disminuirá el trabajo y la preocupación del desarrollador. En el modelo no contenido, el desarrollador debe considerar posibles impactos ambientales en la nueva base de datos. Sin embargo, al usar bases de datos parcialmente contenidas, los desarrolladores pueden detectar impactos a nivel de instancia en la base de datos.


No hay comentarios:

Publicar un comentario