Compartilhar via


Bancos de dados independentes

Umbanco de dados independente é um banco de dados isolado de outros bancos de dados e da instância do SQL Server que hospeda o banco de dados. O SQL Server 2014 ajuda o usuário a isolar seu banco de dados da instância de 4 maneiras.

  • Grande parte dos metadados que descrevem um banco de dados é mantida no banco de dados. (Além ou em vez de manter metadados no banco de dados mestre.)

  • Todos os metadados são definidos usando a mesma ordenação.

  • A autenticação do usuário pode ser executada pelo banco de dados, reduzindo a dependência de bancos de dados nos logons da instância do SQL Server.

  • O ambiente do SQL Server (DMV's, XEvents etc.) relata e pode agir com base em informações de contenção.

Alguns recursos de bancos de dados parcialmente contidos, como armazenar metadados no banco de dados, se aplicam a todos os bancos de dados do SQL Server 2014. Alguns benefícios de bancos de dados parcialmente contidos, como autenticação em nível de banco de dados e ordenação de catálogo, devem ser habilitados antes de estarem disponíveis. A contenção parcial é habilitada usando as instruções CREATE DATABASE e ALTER DATABASE, ou usando o SQL Server Management Studio. Para obter mais informações sobre como habilitar a contenção parcial do banco de dados, consulte Migrar para um Banco de Dados Parcialmente Contido.

Este tópico inclui as seções a seguir.

Conceitos de banco de dados parcialmente contidos

Um banco de dados totalmente independente inclui todas as configurações e metadados necessários para definir o banco de dados e não tem dependências de configuração na instância do Mecanismo de Banco de Dados do SQL Server em que o banco de dados está instalado. Em versões anteriores do SQL Server, a separação de um banco de dados da instância do SQL Server pode ser demorada e requer um conhecimento detalhado da relação entre o banco de dados e a instância do SQL Server. Bancos de dados parcialmente contidos facilitam a separação de um banco de dados da instância do SQL Server e de outros bancos de dados.

O banco de dados contido considera as características relacionadas à contenção. Qualquer entidade definida pelo usuário que dependa apenas de funções que residem no banco de dados é considerada totalmente contida. Qualquer entidade definida pelo usuário que dependa de funções que residem fora do banco de dados é considerada incontida. (Para obter mais informações, consulte a seção Contenção mais adiante neste tópico.)

Os termos a seguir se aplicam ao modelo de banco de dados independente.

Limite do banco de dados
O limite entre um banco de dados e a instância do SQL Server. O limite entre um banco de dados e outros bancos de dados.

Contido
Um elemento que existe inteiramente no limite do banco de dados.

Incontrolável
Um elemento que cruza o limite do banco de dados.

Banco de dados não contido
Um banco de dados que tem a contenção definida como NONE. Todos os bancos de dados em versões anteriores ao SQL Server 2012 não estão contidos. Por padrão, todos os bancos de dados do SQL Server 2012 e posteriores têm uma contenção definida como NONE.

Banco de dados parcialmente contido
Um banco de dados parcialmente contido é um banco de dados independente que pode permitir alguns recursos que cruzam o limite do banco de dados. O SQL Server inclui a capacidade de determinar quando o limite de contenção é cruzado.

Usuário restrito
Há dois tipos de usuários para bancos de dados contidos.

  • Usuário de banco de dados independente com senha

    Usuários contidos no banco de dados com senhas são autenticados pelo banco de dados.

  • Principais do Windows

    Usuários autorizados do Windows e membros de grupos autorizados do Windows podem se conectar diretamente ao banco de dados e não precisam de logons no banco de dados mestre . O banco de dados confia na autenticação pelo Windows.

Os usuários com base em logons no banco de dados mestre podem ter acesso a uma base de dados delimitada, mas isso criaria uma dependência sobre a instância do SQL Server. Portanto, ao criar usuários com base em logons, consulte os comentários sobre bancos de dados parcialmente contidos.

Importante

A habilitação de bancos de dados parcialmente contidos delega o controle sobre o acesso à instância do SQL Server aos proprietários do banco de dados. Para obter mais informações, consulte Security Best Practices with Contained Databases.

Limite do banco de dados
Como bancos de dados parcialmente contidos separam a funcionalidade do banco de dados das da instância, há uma linha claramente definida entre esses dois elementos chamada limite do banco de dados.

Dentro do limite do banco de dados está o modelo de banco de dados, em que os bancos de dados são desenvolvidos e gerenciados. Exemplos de entidades localizadas dentro do banco de dados incluem tabelas do sistema como sys.tables, usuários de banco de dados contidos com senhas e tabelas de usuário no banco de dados atual referenciadas por um nome de duas partes.

Fora do limite do banco de dados está o modelo de gerenciamento, que pertence a funções e gerenciamento no nível da instância. Exemplos de entidades localizadas fora do limite do banco de dados incluem tabelas do sistema como sys.endpoints, usuários mapeados para logons e tabelas de usuário em outro banco de dados referenciado por um nome de três partes.

Contenção

Entidades de usuário que residem inteiramente no banco de dados são consideradas contidas. Todas as entidades que residem fora do banco de dados ou dependem da interação com funções fora do banco de dados são consideradas incontidas.

Em geral, as entidades de usuário se enquadram nas seguintes categorias de contenção:

  • Entidades de usuário totalmente contidas (aqueles elementos, como sys.indexes, que nunca cruzam o limite do banco de dados). Qualquer código que use esses recursos ou qualquer objeto que faça referência apenas a essas entidades também está totalmente contido.

  • Entidades de usuário não restritas (aquelas que cruzam o limite do banco de dados), por exemplo sys.server_principals ou um sistema de logon propriamente dito. Qualquer código que utilize essas entidades ou qualquer função que as referencie não está contido.

Banco de dados parcialmente contido

O recurso de banco de dados contido está disponível no momento apenas em um estado parcialmente contido. Um banco de dados parcialmente contido é um banco de dados independente que permite o uso de recursos não contidos.

Use a exibição sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) para retornar informações sobre objetos ou recursos não contidos. Ao determinar o status de contenção dos elementos do banco de dados, você pode descobrir quais objetos ou recursos devem ser substituídos ou alterados para promover a contenção.

Importante

Como determinados objetos têm uma configuração de contenção padrão de NONE, essa exibição pode retornar falsos positivos.

O comportamento de bancos de dados parcialmente contidos difere mais distintamente do de bancos de dados não contidos em relação à ordenação. Para obter mais informações sobre problemas de ordenação, consulte Ordenações de Banco de Dados Contidas.

Benefícios de usar bancos de dados parcialmente contidos

Há problemas e complicações associados aos bancos de dados não contidos que podem ser resolvidos usando um banco de dados parcialmente contido.

Movimentação de banco de dados

Um dos problemas que ocorre ao mover bancos de dados é que algumas informações importantes podem ficar indisponíveis quando um banco de dados é movido de uma instância para outra. Por exemplo, as informações de logon são armazenadas na instância em vez de no banco de dados. Quando você move um banco de dados não contido de uma instância para outra instância do SQL Server, essas informações são deixadas para trás. Você deve identificar as informações ausentes e movê-la com o banco de dados para a nova instância do SQL Server. Esse processo pode ser difícil e demorado.

O banco de dados parcialmente contido pode armazenar informações importantes no banco de dados para que o banco de dados ainda tenha as informações depois de movido.

Observação

Um banco de dados parcialmente contido pode fornecer documentação que descreve os recursos usados por um banco de dados que não pode ser separado da instância. Isso inclui uma lista de outros bancos de dados inter-relacionados, configurações do sistema que o banco de dados requer, mas não podem ser contidas e assim por diante.

Benefício de usuários de banco de dados independentes com AlwaysOn

Ao reduzir os vínculos com a instância do SQL Server, bancos de dados parcialmente contidos podem ser úteis durante o failover quando você usa Grupos de Disponibilidade AlwaysOn.

A criação de usuários independentes permite que o usuário se conecte diretamente ao banco de dados independente. Esse é um recurso muito significativo em cenários de alta disponibilidade e recuperação de desastre, como em uma solução AlwaysOn. Se os usuários forem usuários contidos, em caso de failover, as pessoas poderão se conectar ao secundário sem criar logons na instância que hospeda o secundário. Isso fornece um benefício imediato. Para obter mais informações, consulte Visão geral dos grupos de disponibilidade AlwaysOn (SQL Server) e pré-requisitos, restrições e recomendações para grupos de disponibilidade AlwaysOn (SQL Server).

Desenvolvimento inicial do banco de dados

Como um desenvolvedor pode não saber onde um novo banco de dados será implantado, limitar os impactos ambientais implantados no banco de dados diminui o trabalho e a preocupação com o desenvolvedor. No modelo não contido, o desenvolvedor deve considerar possíveis impactos ambientais no novo banco de dados e programa adequadamente. No entanto, usando bancos de dados parcialmente contidos, os desenvolvedores podem detectar impactos no nível da instância no banco de dados e preocupações no nível da instância para o desenvolvedor.

Administração de banco de dados

Manter as configurações de banco de dados no banco de dados, em vez de no banco de dados mestre, permite que cada proprietário do banco de dados tenha mais controle sobre seu banco de dados, sem conceder permissão de sysadmin ao proprietário do banco de dados.

Limitações

Bancos de dados parcialmente contidos não permitem os seguintes recursos.

  • Bancos de dados parcialmente contidos não podem usar replicação, captura de dados de alteração ou controle de alterações.

  • Procedimentos numerados

  • Objetos associados a esquema que dependem de funções internas com alterações de ordenação

  • Alteração de associação resultante de alterações de ordenação, incluindo referências a objetos, colunas, símbolos ou tipos.

  • Replicação, captura de dados de alteração e controle de alterações.

Aviso

Atualmente, os procedimentos armazenados temporários são permitidos. Como os procedimentos armazenados temporários violam a contenção, não se espera que tenham suporte em versões futuras do banco de dados contido.

Identificando a contenção de banco de dados

Há duas ferramentas para ajudar a identificar o status de contenção do banco de dados. O sys.dm_db_uncontained_entities (Transact-SQL) é uma exibição que mostra todas as entidades potencialmente não contidas no banco de dados. O evento database_uncontained_usage ocorre quando qualquer entidade não contida real é identificada em tempo de execução.

sys.dm_db_uncontained_entities

Essa exibição mostra todas as entidades no banco de dados que têm o potencial de serem incontidas, como aquelas que cruzam o limite do banco de dados. Isso inclui as entidades de usuário que podem usar objetos fora do modelo de banco de dados. No entanto, como a contenção de algumas entidades (por exemplo, aquelas que usam SQL dinâmico) não pode ser determinada até o tempo de execução, o modo de exibição pode mostrar algumas entidades que não estão realmente incontidas. Para obter mais informações, consulte sys.dm_db_uncontained_entities (Transact-SQL).

evento de uso não contido do banco de dados

Esse XEvent ocorre sempre que uma entidade não contida é identificada em tempo de execução. Isso inclui entidades originadas no código do cliente. Esse XEvent ocorrerá apenas para entidades não contidas reais. No entanto, o evento só ocorre em tempo de execução. Portanto, todas as entidades de usuário não contidas que você não executou não serão identificadas por este XEvent

Recursos modificados (banco de dados contido)

Ordenações de banco de dados contidas

Práticas recomendadas de segurança com bancos de dados independentes

Migrar para um banco de dados parcialmente independente