Tornar seu banco de dados portável usando banco de dados Independentes

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse Analytics

Use usuários de banco de dados independentes para autenticar conexões do SQL Server e de banco de dados SQL do Azure no nível do banco de dados. Um banco de dados independente é um banco de dados isolado de outros bancos de dados e da instância do SQL Server ou do banco de dados SQL (e o banco de dados master) que hospeda o banco de dados.

O SQL Server dá suporte a usuários de bancos de dados independentes para autenticação no Windows e SQL Server. Ao usar o banco de dados SQL, combine usuários do banco de dados independentes com regras de firewall no nível do banco de dados.

Este artigo revisa os benefícios de usar o modelo de banco de dados independente em comparação com o modelo de logon/usuário tradicional e Windows ou as regras de firewall em nível de servidor. Cenários específicos, manegabilidade ou lógica de negócios do aplicativo ainda podem exigir o uso do modelo tradicional de logon/usuário e regras de firewall no nível do servidor.

Modelo tradicional de usuário e logon

No modelo de conexão tradicional, usuários do Windows ou membros de grupos do Windows se conectem ao mecanismo de banco de dados fornecendo credenciais de usuário ou grupo autenticadas pelo Windows. Ou os usuários podem fornecer um nome e uma senha e se conectar usando a autenticação do SQL Server. Em ambos os casos, o banco de dados mestre deve ter um logon que corresponde às credenciais de conexão.

Depois que o mecanismo de banco de dados confirmar as credenciais de autenticação do Windows ou autenticar as credenciais de autenticação do SQL Server , a conexão normalmente tenta se conectar a um banco de dados de usuário. Para se conectar a um banco de dados de usuário, o logon deve ser mapeado para (ou seja, associado a) um usuário de banco de dados no banco de dados de usuário. A cadeia de conexão também pode especificar a conexão com um banco de dados específico, o que é opcional no SQL Server mas obrigatório no banco de dados SQL.

O princípio importante é que o logon (no banco de dados master) e o usuário (no banco de dados do usuário) devem existir e estar relacionados entre si. A conexão com o banco de dados do usuário tem uma dependência do logon no banco de dados master. Essa dependência limita a capacidade do banco de dados ser movido para uma instância diferente do SQL Server hospedeiro ou servidor do Banco de Dados SQL do Azure.

Se uma conexão com o banco de dados master não estiver disponível (por exemplo, um failover estiver em andamento), o tempo de conexão geral aumentará ou a conexão poderá atingir o tempo limite. Uma conexão indisponível pode reduzir a escalabilidade da conexão.

Modelo de usuário de banco de dados independente

No modelo de usuário de banco de dados independente, o logon no banco de dados master não está presente. Em vez disso, o processo de autenticação ocorre no banco de dados do usuário. O usuário do banco de dados no banco de dados do usuário não tem um logon associado no banco de dados master.

O modelo de usuário de banco de dados independente dá suporte à autenticação do Windows e à autenticação e do SQL Server. Você pode usá-lo no SQL Server e no Banco de dados SQL.

Para se conectar como um usuário de banco de dados independente, a cadeia de conexão sempre deve conter um parâmetro para o banco de dados do usuário. O mecanismo de banco de dados usa esse parâmetro para saber qual banco de dados é responsável por gerenciar o processo de autenticação.

A atividade do usuário do banco de dados contido é limitada ao banco de dados de autenticação. A conta de usuário do banco de dados deve ser criada independentemente em cada banco de dados de que o usuário precisa. Para alterar os bancos de dados, os usuários do banco de dados SQL devem criar uma nova conexão. Os usuários de bancos de dados independentes no SQL Server poderão alterar bancos de dados se um usuário idêntico estiver presente em outro banco de dados.

No Azure, o banco de dados SQL e o Azure Synapse Analytics dão suporte a identidades do Microsoft Entra ID (anteriormente Azure Active Directory) como usuários de banco de dados independente. O banco de dados SQL dá suporte a usuários de bancos de dados independentes que usam a autenticação do SQL Server, mas o Azure Synapse Analytics, não. Veja mais informações em Conectar-se ao Banco de Dados SQL usando a autenticação do Microsoft Entra.

Quando você usa a autenticação do Microsoft Entra, os usuários podem fazer conexões do SQL Server Management Studio usando a autenticação universal do Microsoft Entra. Os administradores podem configurar a autenticação universal para exigir a autenticação multifator, que verifica a identidade usando uma chamada telefônica, mensagem de texto, cartão inteligente com PIN ou notificação de aplicativo móvel. Veja mais informações em Usando a autenticação multifator do Microsoft Entra.

Para o Banco de Dados SQL e o Azure Synapse Analytics, o nome do banco de dados é sempre necessário na cadeia de conexão. Assim você não precisa fazer nenhuma alteração na cadeia de conexão ao alternar do modelo tradicional para o modelo de usuário de banco de dados independente. Para conexões do SQL Server, o nome do banco de dados deve ser adicionado à cadeia de conexão se não ainda estiver presente.

Importante

Quando você usa o modelo tradicional, as funções no nível do servidor e as permissões no nível do servidor podem limitar o acesso a todos os bancos de dados. Ao usar o modelo de banco de dados independente, os proprietários e os usuários do banco de dados a permissão ALTER ANY USER podem conceder acesso ao banco de dados. Essa permissão reduz o controle de acesso dos logons do servidor com privilégios altos e expande o controle de acesso para incluir os usuários do banco de dados com privilégios altos.

Firewalls

SQL Server

No SQL Server, as regras do Firewall do Windows se aplicam a todas as conexões e têm os mesmos efeitos sobre logons (conexões de modelo tradicional) e usuários de bancos de dados independentes. Veja mais informações sobre o Firewall do Windows, em Configurar um Firewall do Windows para acesso ao Mecanismo de Banco de Dados.

Firewalls de banco de dados SQL

O banco de dados SQL permite regras de firewall separadas para conexões (logons) no nível do servidor e para conexões no nível do banco de dados (usuários de bancos de dados independentes). banco de dados SQL se conectar a um banco de dados do usuário, ele primeiro verifica as regras de firewall. Se não houver nenhuma regra que permita o acesso ao banco de dados, o banco de dados SQL verifica as regras de firewall no nível do servidor. A verificação de regras de firewall no nível de servidor requer acesso ao banco de dados master do servidor do Banco de dados SQL.

Regras de firewall no nível do banco de dados combinadas com usuários de banco de dados independente podem eliminar a necessidade de acessar o banco de dados master do servidor durante a conexão. O resultado é uma melhor escalabilidade da conexão.

Para obter mais informações sobre as regras de firewall do banco de dados SQL, veja os seguintes tópicos:

Diferenças de sintaxe

Modelo tradicional Modelo de usuário de banco de dados independente
Quando você está conectado ao banco de dados master:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Em seguida, quando você está conectado a um banco de dados de usuário:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Quando você está conectado a um banco de dados de usuário:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Modelo tradicional Modelo de usuário de banco de dados independente
Para alterar uma senha no contexto do banco de dados master:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
Para alterar uma senha no contexto do banco de dados de usuário:

ALTER USER user_name WITH PASSWORD = 'strong_password';

Instância Gerenciada de SQL

A Instância Gerenciada de SQL do Azure se comporta como o SQL Server local no contexto de bancos de dados independentes. Altere o contexto do banco de dados mestre para o banco de dados do usuário ao criar o usuário independente. Além disso, não deve haver nenhuma conexão ativa com o banco de dados do usuário ao definir a opção de independência. Use o código a seguir como guia.

Aviso

O script de exemplo a seguir usa uma instrução kill para fechar todos os processos do usuário no banco de dados. Certifique-se de entender as consequências desse script e de que ele é adequado para a sua empresa antes de executá-lo. Verifique também se nenhuma outra conexão está ativa no banco de dados da Instância Gerenciada de SQL, pois o script interromperá outros processos em execução no banco de dados.

USE master;

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

DECLARE @kill_string varchar(8000) = '';
SELECT @kill_string = @kill_string + 'KILL ' + str(session_id) + '; '  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test') and is_user_process = 1;

EXEC(@kill_string);
GO

sp_configure 'contained database authentication', 1;  
GO
 
RECONFIGURE;  
GO 

SELECT * FROM sys.dm_exec_sessions
WHERE database_id  = db_id('Test')

ALTER DATABASE Test
SET containment=partial

USE Test;  
GO 

CREATE USER Carlo  
WITH PASSWORD='Enterpwdhere*'  

SELECT containment_desc FROM sys.databases
WHERE name='Test'

Comentários

  • Usuários de bancos de dados independentes devem estar habilitados para toda instância do SQL Server. Veja mais informações em Autenticação do banco de dados independente (opção de configuração do servidor).
  • Os usuários do banco de dados independente e logons com nomes não sobrepostas podem coexistir nos aplicativos.
  • Suponha que um logon no master banco de dados tenha o nome nome1. Se você criar um usuário de banco de dados independente denominado nome1, quando um nome de banco de dados for fornecido na cadeia de conexão, o contexto do usuário de banco de dados será escolhido será escolhido em vez do contexto de logon para conexão com o banco de dados.. Ou seja, os usuários do banco de dados independente têm precedência sobre logons com o mesmo nome.
  • No banco de dados SQL, o nome de usuário de banco de dados independente não pode ser igual ao nome da conta do administrador de servidor.
  • A conta do administrador do servidor do banco de dados SQL nunca pode ser um usuário de banco de dados independente. O administrador do servidor tem permissões suficientes para criar e gerenciar usuários de banco de dados independente. O administrador do servidor pode conceder permissões a usuários de banco de dados independente em bancos de dados do usuário.
  • Como os usuários de banco de dados independente são entidades no nível do banco de dados, você precisa criar usuários de banco de dados independente em todos os bancos de dados em que for usá-los. A identidade é confinada ao banco de dados. A identidade é independente (em todos os aspectos) de um usuário que tenha o mesmo nome e a mesma senha em outro banco de dados no mesmo servidor.
  • Use senhas tão fortes quanto as que normalmente usaria para logons.