Bancos de dados independentesContained Databases

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure SQL nãoAzure Synapse Analytics (SQL DW) nãoData Warehouse Paralelo APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Um banco de dados independente é um banco de dados isolado de outros bancos de dados e da instância do SQL ServerSQL Server que hospeda o banco de dados.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) ajuda o usuário a isolar seu banco de dados da instância de 4 maneiras.helps user to isolate their database from the instance in 4 ways.

  • A maioria dos metadados que descrevem um banco de dados é mantida no banco de dados.Much of the metadata that describes a database is maintained in the database. (Além de, ou em vez de, manter os metadados no banco de dados mestre.)(In addition to, or instead of, maintaining metadata in the master database.)

  • Todo os metadados são definidos usando a mesma ordenação.All metadata are defined using the same collation.

  • A autenticação de usuário pode ser executada pelo banco de dados, reduzindo a dependência dos bancos de dados dos logons da instância do 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.

  • O ambiente do SQL ServerSQL Server (DMVs, XEvents etc.) relata e pode agir sobre as informações de contenção.The SQL ServerSQL Server environment (DMV's, XEvents, etc.) reports and can act upon containment information.

Alguns recursos de bancos de dados parcialmente independentes, como armazenar metadados no banco de dados, aplicam-se a todos os bancos de dados do 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. Alguns benefícios dos bancos de dados parcialmente independentes, como autenticação no nível de banco de dados e ordenação de catálogos, devem ser habilitados antes de serem disponibilizados.Some benefits of partially contained databases, such as database level authentication and catalog collation, must be enabled before they are available. A contenção parcial é habilitada usando as instruções CREATE DATABASE e ALTER DATABASE ou usando o 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 obter mais informações sobre como habilitar a contenção parcial de bancos de dados, consulte Migrate to a Partially Contained Database.For more information about how to enable partial database containment, see Migrate to a Partially Contained Database.

Conceitos de banco de dados parcialmente independentePartially Contained Database Concepts

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 nenhuma dependência de configuração da instância do Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine onde o banco de dados está instalado.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 Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine where the database is installed. Em versões anteriores do SQL ServerSQL Server, separar um banco de dados da instância do SQL ServerSQL Server poderia ser demorado e exigir conhecimento detalhado da relação entre o banco de dados e a instância do 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. Os bancos de dados parcialmente independentes facilitam a separação de um banco de dados de uma instância do SQL ServerSQL Server e de outros bancos de dados.Partially contained databases make it easier to separate a database from the instance of SQL ServerSQL Server and other databases.

O banco de dados independente considera recursos em relação à contenção.The contained database considers features with regard to containment. Qualquer entidade definida pelo usuário que confie apenas em funções que residem no banco de dados é considerada totalmente contida.Any user-defined entity that relies only on functions that reside in the database is considered fully contained. Qualquer entidade definida pelo usuário que confie apenas em funções que residem fora do banco de dados é considerada não contida.Any user-defined entity that relies on functions that reside outside the database is considered uncontained. (Para obter mais informações, consulte a seção Contenção mais adiante neste tópico.)(For more information, see the Containment section later in this topic.)

Os termos a seguir se aplicam ao modelo de banco de dados independente.The following terms apply to the contained database model.

Limite de banco de dadosDatabase boundary
O limite entre um banco de dados e a instância do SQL ServerSQL Server.The boundary between a database and the instance of SQL ServerSQL Server. O limite entre um banco de dados e outros bancos de dados.The boundary between a database and other databases.

ContidaContained
Um elemento que existe completamente no limite de banco de dados.An element that exists entirely in the database boundary.

Não contidaUncontained
Um elemento que cruza o limite de banco de dados.An element that crosses the database boundary.

Banco de dados dependenteNon-contained database
Um banco de dados com contenção definida como NONE.A database that has containment set to NONE. Todos os bancos de dados em versões anteriores ao SQL Server 2012 (11.x)SQL Server 2012 (11.x) são dependentes.All databases in versions earlier than SQL Server 2012 (11.x)SQL Server 2012 (11.x) are non-contained. Por padrão, todos os bancos de dados do SQL Server 2012 (11.x)SQL Server 2012 (11.x) e posteriores têm um conjunto de contenção definido como NONE.By default, all SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later databases have a containment set to NONE.

Banco de dados parcialmente contidoPartially contained database
Um banco de dados parcialmente independente é um banco de dados independente que permite que alguns recursos cruzem o limite de banco de dados.A partially contained database is a contained database that can allow some features that cross the database boundary. SQL ServerSQL Server inclui a capacidade de determinar quando o limite de retenção é cruzado.includes the ability to determine when the containment boundary is crossed.

Usuário contidoContained user
Há dois tipos de usuários de bancos de dados independentes.There are two types of users for contained databases.

  • Usuário de banco de dados independente com senhaContained database user with password

    Usuários de banco de dados independente com senhas são autenticados pelo banco de dados.Contained database users with passwords are authenticated by the database. Para obter mais informações, consulte Usuários de bancos de dados independentes – Tornando seu banco de dados portátil.For more information, see Contained Database Users - Making Your Database Portable.

  • entidades de segurança do WindowsWindows principals

    Usuários autorizados do Windows e membros de grupos autorizados do Windows podem conectar-se diretamente ao banco de dados e não precisam de logons no banco de dados mestre .Authorized Windows users and members of authorized Windows groups can connect directly to the database and do not need logins in the master database. O banco de dados confia na autenticação pelo Windows.The database trusts the authentication by Windows.

Os usuários baseados em logons no banco de dados mestre podem receber acesso a um banco de dados independente, mas isso cria uma dependência na instância do 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. Portanto, criar usuários com base em logons requer independência parcial.Therefore, creating users based on logins requires partial containment.

Importante

Habilitar delegados de bancos de dados parcialmente independentes controla o acesso à instância do SQL ServerSQL Server para os proprietários do banco de dados.Enabling partially contained databases delegates control over access to the instance of SQL ServerSQL Server to the owners of the database. Para saber mais, veja Security Best Practices with Contained Databases.For more information, see Security Best Practices with Contained Databases.

Limite de banco de dadosDatabase Boundary
Como os bancos de dados parcialmente independentes separam a funcionalidade do banco de dados das funcionalidades da instância, há uma linha claramente definida entre esses dois elementos chamada de limite de banco de dados.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 do limite de banco de dados está o modelo de banco de dados, onde os bancos de dados são desenvolvidos e gerenciados.Inside of the database boundary is the database model, where the databases are developed and managed. Exemplos de entidades localizadas dentro do modelo do banco de dados incluem tabelas do sistema, como sys.tables, usuários com senhas de bancos de dados independentes e tabelas de usuário no banco de dados atual referenciadas por um nome de duas 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.

Fora do limite de banco de dados está o modelo de gerenciamentoque pertence às funções e ao gerenciamento em nível da instância.Outside of the database boundary is the management model, which pertains to instance-level functions and management. Exemplos de entidades localizadas fora do limite de 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 referenciadas por um nome de três 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.

ContençãoContainment

Entidades de usuário que residem inteiramente dentro do banco de dados são consideradas contidas.User entities that reside entirely within the database are considered contained. Qualquer entidade que resida fora do banco de dados ou que dependa da interação com funções fora do banco de dados é considerada como não contida.Any entities that reside outside of the database, or rely on interaction with functions outside of the database, are considered uncontained.

Em geral, entidades de usuário entram nas seguintes categorias de contenção:In general, user entities fall into the following categories of containment:

  • Entidades de usuário totalmente contidas (que nunca cruzam o limite de banco de dados), por exemplo sys.indexes.Fully contained user entities (those that never cross the database boundary), for example sys.indexes. Qualquer código que use esses recursos ou qualquer objeto que faça referência apenas a essas entidades também é totalmente contido.Any code that uses these features or any object that references only these entities is also fully contained.

  • Entidades de usuário não contidas (que cruzam o limite de banco de dados), por exemplo, sys.server_principals ou a própria entidade de servidor (logon).Uncontained user entities (those that cross the database boundary), for example sys.server_principals or a server principal (login) itself. Qualquer código que use essas entidades ou qualquer função que faça referência a essas entidades não é contido.Any code that uses these entities or any functions that references these entities are uncontained.

Partially Contained DatabasePartially Contained Database

O recurso de banco de dados independente está disponível atualmente apenas em um estado parcialmente contido.The contained database feature is currently available only in a partially contained state. Um banco de dados parcialmente contido é um banco de dados independente que permite o uso de recursos não contidos.A partially contained database is a contained database that allows the use of uncontained features.

Use as exibições sys.dm_db_uncontained_entities e sys.sql_modules (Transact-SQL) para retornar informações sobre objetos ou recursos não contidos.Use the sys.dm_db_uncontained_entities and sys.sql_modules (Transact-SQL) view to return information about uncontained objects or features. Por meio da determinação do status da contenção dos elementos de seu banco de dados, é possível descobrir quais objetos ou recursos devem ser substituídos os alterados para promover a contenção.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

Como determinados objetos têm uma configuração de contenção padrão de NONE, essa exibição pode retornar falsos positivos.Because certain objects have a default containment setting of NONE, this view can return false positives.

O comportamento de bancos de dados parcialmente independentes difere muito distintamente do comportamento de bancos de dados dependentes em termos de ordenação.The behavior of partially contained databases differs most distinctly from that of non-contained databases with regard to collation. Para obter mais informações sobre problemas de ordenação, consulte Ordenações de banco de dados independentes.For more information about collation issues, see Contained Database Collations.

Benefícios do uso de bancos de dados parcialmente independentesBenefits of using Partially Contained Databases

Há problemas e complicações associadas aos bancos de dados dependentes que podem ser resolvidos por meio de um banco de dados parcialmente independente.There are issues and complications associated with the non-contained databases that can be resolved by using a partially contained database.

Movimentação do banco de dadosDatabase Movement

Um dos problemas que ocorre ao mover bancos de dados é que algumas informações importantes podem não estar disponíveis quando um banco de dados é movido de uma instância a outra.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 exemplo, as informações de logon são armazenadas na instância e não no banco de dados.For example, login information is stored within the instance instead of in the database. Quando você move um banco de dados dependente de uma instância para outra instância do SQL ServerSQL Server, essas informações são deixadas para trás.When you move a non-contained database from one instance to another instance of SQL ServerSQL Server, this information is left behind. Você deve identificar as informações ausentes e movê-las com seu banco de dados para a nova instância do SQL ServerSQL Server.You must identify the missing information and move it with your database to the new instance of SQL ServerSQL Server. Esse processo pode ser difícil e demorado.This process can be difficult and time-consuming.

O banco de dados parcialmente independente pode armazenar informações importantes no banco de dados para que o banco de dados ainda contenha as informações depois de ser movido.The partially contained database can store important information in the database so the database still has the information after it is moved.

Observação

Um banco de dados parcialmente independente pode fornecer documentação que descreve os recursos que são usados por um banco de dados que não pode ser separado da instância.A partially contained database can provide documentation describing those features that are used by a database that cannot be separated from the instance. Isso inclui uma lista de outros bancos de dados relacionados, configurações do sistema exigidas pelo banco de dados, mas que não podem ser contidas, e assim por diante.This includes a list of other interrelated databases, system settings that the database requires but cannot be contained, and so on.

Benefício de usuários de banco de dados independentes com AlwaysOnBenefit of Contained Database Users with Always On

Reduzindo as associações à instância do SQL ServerSQL Server, bancos de dados parcialmente independentes podem ser úteis durante o failover quando o Grupos de disponibilidade AlwaysOnAlways On availability groupsé usado.By reducing the ties to the instance of SQL ServerSQL Server, partially contained databases can be useful during failover when you use Grupos de disponibilidade AlwaysOnAlways On availability groups.

Criar os usuários independentes permite que o usuário se conecte diretamente no banco de dados independente.Creating contained users enables the user to connect directly to the contained database. Este é um recurso muito significativo em cenários de alta disponibilidade e recuperação de desastres como em uma solução AlwaysOn.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. Se os usuários forem independentes, no caso de failover, as pessoas podem ser capazes de se conectar ao secundário sem criar logons na instância que hospeda o secundário.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. Isto fornece um benefício imediato.This provides an immediate benefit. 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).For more information, see Overview of Always On Availability Groups (SQL Server) and Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server).

Desenvolvimento inicial de bancos de dadosInitial Database Development

Como um desenvolvedor talvez não saiba onde um novo banco de dados será implantado, a limitação dos impactos no ambiente implantados no banco de dados reduz o trabalho e a preocupação do desenvolvedor.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. No modelo não contido, o desenvolvedor deve considerar os possíveis impactos no ambiente no novo banco de dados e programa de maneira correspondente.In the non-contained model, the developer must consider possible environmental impacts on the new database and program accordingly. No entanto, ao usar bancos de dados parcialmente independentes, os desenvolvedores podem detectar impactos de nível de instância no banco de dados e preocupações de nível de instância para o desenvolvedor.However, by using partially contained databases, developers can detect instance-level impacts on the database and instance-level concerns for the developer.

Administração de banco de dadosDatabase Administration

Manter as configurações de banco de dados no banco de dados, e não no banco de dados mestre, permite que o proprietário de cada banco de dados tenha mais controle sobre seu banco de dados, sem conceder a eles a permissão 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.

LimitaçõesLimitations

Bancos de dados parcialmente independentes não permitem os recursos a seguir.Partially contained databases do not allow the following features.

  • Os bancos de dados parcialmente independentes não podem usar replicação, Change Data Capture ou controle de alterações.Partially contained databases cannot use replication, change data capture, or change tracking.

  • Procedimentos numeradosNumbered procedures

  • Objetos associados a esquema que dependem de funções internas com alterações de ordenaçãoSchema-bound objects that depend on built-in functions with collation changes

  • Alteração de associação resultante de alterações de ordenação, inclusive referências a objetos, colunas, símbolos ou tipos.Binding change resulting from collation changes, including references to objects, columns, symbols, or types.

  • Replicação, captura de dados de alteração e controle de alterações.Replication, change data capture, and change tracking.

Aviso

Os procedimentos armazenados temporários são permitidos no momento.Temporary stored procedures are currently permitted. Como os procedimentos armazenados temporários violam a retenção, não se espera que eles tenham suporte em versões futuras de bancos de dados independentes.Because temporary stored procedures breach containment, they are not expected to be supported in future versions of contained database.

Identificando a contenção do banco de dadosIdentifying Database Containment

Há duas ferramentas para facilitar a identificação do status de contenção do banco de dados.There are two tools to help identify the containment status of the database. O sys.dm_db_uncontained_entities (Transact-SQL) é uma exibição que mostra todas as entidades potencialmente não contidas no banco de dados.The sys.dm_db_uncontained_entities (Transact-SQL) is a view that shows all the potentially uncontained entities in the database. O evento database_uncontained_usage ocorre quando qualquer entidade não contida real é identificada em tempo de execução.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 exibição mostra as entidades do banco de dados que têm potencial para não serem contidas, como aquelas que cruzam o limite de banco de dados.This view shows any entities in the database that have the potential to be uncontained, such as those that cross-the database boundary. Isso inclui as entidades de usuário que possam usar objetos fora do modelo de banco de dados.This includes those user entities that may use objects outside the database model. Porém, como a contenção de algumas entidades (por exemplo, as que usam SQL dinâmico) não pode ser determinada até o tempo de execução, a exibição poderá mostrar algumas entidades que não estão contidas realmente.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 obter mais informações, consulte sys.dm_db_uncontained_entities (Transact-SQL).For more information, see sys.dm_db_uncontained_entities (Transact-SQL).

evento database_uncontained_usagedatabase_uncontained_usage event

Esse XEvent ocorre sempre que uma entidade não contida é identificada no momento de execução.This XEvent occurs whenever an uncontained entity is identified at run time. Isso inclui entidades originadas no código de cliente.This includes entities originated in client code. Esse XEvent ocorrerá somente para entidades reais não contidas.This XEvent will occur only for actual uncontained entities. No entanto, o evento ocorre somente no momento de execução.However, the event only occurs at run time. Portanto, qualquer entidade de usuário não contida não executada não será identificada por esse XEvent.Therefore, any uncontained user entities you have not run will not be identified by this XEvent

Consulte TambémSee Also

Recursos modificados (Banco de Dados Contidos) Modified Features (Contained Database)
Ordenações de banco de dados independentes Contained Database Collations
Security Best Practices with Contained Databases Security Best Practices with Contained Databases
Migrate to a Partially Contained Database Migrate to a Partially Contained Database
Usuários de bancos de dados independentes – Tornando seu banco de dados portátilContained Database Users - Making Your Database Portable