Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Banco de Dados SQL do Azure Synapse Analytics
no Microsoft Fabric
Use usuários de banco de dados contidos para autenticar conexões do SQL Server e do Banco de Dados SQL do Azure no nível do banco de dados. Um banco de dados contido é um banco de dados isolado de outros bancos de dados e da instância do SQL Server ou do Banco de dados SQL (e do master banco de dados) que hospeda o banco de dados.
O SQL Server dá suporte a utilizadores de bases de dados autónomas para autenticação no Windows e no SQL Server. Quando estiver usando o Banco de dados SQL, combine usuários de banco de dados contidos com regras de firewall no nível de banco de dados.
Este artigo analisa os benefícios de usar o modelo de banco de dados contido em comparação com o modelo tradicional de login/usuário e as regras de firewall do Windows ou no nível do servidor. Cenários específicos, capacidade de gerenciamento ou lógica de negócios do aplicativo ainda podem exigir o uso do modelo tradicional de login/usuário e regras de firewall no nível do servidor.
Login tradicional e modelo de usuário
No modelo de conexão tradicional, os usuários do Windows ou membros de grupos do Windows se conectam 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 senha e se conectar usando a autenticação do SQL Server. Em ambos os casos, o master banco de dados deve ter um login que corresponda às credenciais de conexão.
Depois que o Mecanismo de Banco de Dados confirma as credenciais de autenticação do Windows ou autentica 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 utilizador, o login deve ser mapeado para (ou seja, associado a) um utilizador de banco de dados no respetivo banco de dados de utilizador. A cadeia de conexão também pode especificar a conexão com um banco de dados específico, que é opcional no SQL Server, mas necessária no Banco de dados SQL.
O princípio importante é que tanto o master login (no banco de dados) quanto 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 de usuários depende do login no master banco de dados. Essa dependência limita a capacidade do banco de dados de ser movido para uma instância diferente do SQL Server de hospedagem ou para o servidor do Banco de Dados SQL do Azure.
Se uma ligação ao master banco de dados não estiver disponível (por exemplo, se estiver a ocorrer uma comutação por falha), o tempo total de ligação poderá aumentar ou a ligação poderá atingir o tempo limite. Uma ligação indisponível pode reduzir a escalabilidade da ligação.
Modelo de usuário de banco de dados contido
No modelo de utilizador da base de dados contida, o login na master base de dados 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 master banco de dados.
O modelo de usuário de banco de dados contido oferece suporte à autenticação do Windows e à autenticação 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 contido, 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 pelo gerenciamento do 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 de forma independente em cada banco de dados de que o usuário precisa. Para alterar bancos de dados, os usuários do Banco de dados SQL devem criar uma nova conexão. Os usuários de banco de dados contidos no SQL Server podem 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 oferecem suporte a identidades do Microsoft Entra ID (anteriormente Azure Ative Directory) como usuários de banco de dados contidos. O Banco de Dados SQL dá suporte a usuários de banco de dados contidos que usam a autenticação do SQL Server, mas o Azure Synapse Analytics não. Para obter mais informações, consulte Conectar-se ao Banco de dados SQL usando a autenticação do Microsoft Entra.
Quando você estiver usando 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 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. Para obter mais informações, consulte 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. Portanto, você não precisa alterar a cadeia de conexão quando estiver mudando do modelo tradicional para o modelo de usuário de banco de dados contido. Para conexões do SQL Server, o nome do banco de dados deve ser adicionado à cadeia de conexão, se ainda não estiver presente.
Important
Quando você estiver usando o modelo tradicional, as funções e permissões no nível do servidor podem limitar o acesso a todos os bancos de dados. Quando se utiliza o modelo de base de dados contida, os proprietários e utilizadores da base de dados que têm permissão ALTER ANY USER podem conceder acesso à base de dados. Essa permissão reduz o controle de acesso de logins de servidor altamente privilegiados e expande o controle de acesso para incluir usuários de banco de dados altamente privilegiados.
Firewalls
SQL Server
Para o SQL Server, as regras do Firewall do Windows se aplicam a todas as conexões e têm os mesmos efeitos em logons (conexões de modelo tradicional) e usuários de banco de dados contidos. Para obter mais informações sobre o Firewall do Windows, consulte Configurar o Firewall do Windows para acesso ao Mecanismo de Banco de Dados.
Firewalls do Banco de dados SQL
O Banco de dados SQL permite regras de firewall separadas para conexões no nível do servidor (logons) e para conexões no nível do banco de dados (usuários de banco de dados contidos). Quando o Banco de dados SQL se conecta a um banco de dados de usuário, ele primeiro verifica as regras de firewall do banco de dados. Se não houver nenhuma regra que permita o acesso ao banco de dados, o Banco de dados SQL verificará as regras de firewall no nível do servidor. A verificação das regras de firewall ao nível do servidor requer acesso à base de dados do servidor do master SQL Database.
As regras de firewall no nível de banco de dados, combinadas com usuários de banco de dados contidos, podem eliminar a necessidade de acessar o master banco de dados do servidor durante a conexão. O resultado é uma melhor escalabilidade da conexão.
Para obter mais informações sobre regras de firewall do Banco de dados SQL, consulte os seguintes artigos:
- firewall do Banco de Dados SQL do Azure
- Definir configurações de firewall (Banco de Dados SQL do Azure)
- Sp_set_firewall_rule (Banco de Dados SQL do Azure)
- Sp_set_database_firewall_rule (Banco de Dados SQL do Azure)
Diferenças de sintaxe
| Modelo tradicional | Modelo de usuário de banco de dados contido |
|---|---|
Quando você estiver conectado ao master banco de dados:CREATE LOGIN login_name WITH PASSWORD = 'strong_password';Em seguida, quando você estiver conectado a um banco de dados de usuários: CREATE USER 'user_name' FOR LOGIN 'login_name'; |
Quando você está conectado a um banco de dados de usuários:CREATE USER user_name WITH PASSWORD = 'strong_password'; |
| Modelo tradicional | Modelo de usuário de banco de dados contido |
|---|---|
Para alterar uma senha no contexto do master banco de dados:ALTER LOGIN login_name WITH PASSWORD = 'strong_password'; |
Para alterar uma senha no contexto do banco de dados de usuários:ALTER USER user_name WITH PASSWORD = 'strong_password'; |
SQL Managed Instance
A Instância Gerenciada SQL do Azure se comporta como o SQL Server local no contexto de bancos de dados contidos. Certifique-se de alterar o contexto do banco de dados do banco de master dados para o banco de dados do usuário ao criar o usuário contido. Além disso, não deve haver conexões ativas com o banco de dados do usuário quando você estiver definindo a opção de contenção. Use o código a seguir como um guia.
Warning
O script de exemplo a seguir usa uma kill instrução para fechar todos os processos do usuário no banco de dados. Certifique-se de que compreende as consequências deste script e que se adequa ao seu negócio antes de o executar. Certifique-se também de que nenhuma outra conexão esteja ativa no banco de dados da Instância Gerenciada 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'
Remarks
- Os usuários de banco de dados contidos devem ser habilitados para cada instância do SQL Server. Para obter mais informações, consulte Autenticação de banco de dados contida (opção de configuração do servidor).
- Usuários de banco de dados contidos e logins com nomes não sobrepostos podem coexistir em seus aplicativos.
- Suponha que um logon no
masterbanco de dados tem o nome name1. Se você criar um usuário de banco de dados contido chamado name1, quando um nome de banco de dados for fornecido na cadeia de conexão, o contexto do usuário do banco de dados será escolhido sobre o contexto de logon para se conectar ao banco de dados. Ou seja, o usuário do banco de dados contido tem precedência sobre logins que têm o mesmo nome. - No Banco de dados SQL, o nome do usuário do banco de dados contido não pode ser o mesmo que o nome da conta de administrador do servidor.
- A conta de administrador do servidor do Banco de dados SQL nunca pode ser um usuário de banco de dados contido. O administrador do servidor tem permissões suficientes para criar e gerenciar usuários de banco de dados contidos. O administrador do servidor pode conceder permissões a utilizadores contidos da base de dados em bases de dados de utilizadores.
- Como os utilizadores de banco de dados contidos são principais ao nível do banco de dados, é necessário criar utilizadores de banco de dados contidos em todos os bancos de dados em que os utilizaria. A identidade está confinada à base de dados. A identidade é independente (em todos os aspetos) de um usuário que tem o mesmo nome e a mesma senha em outro banco de dados no mesmo servidor.
- Use a mesma força de senhas que você normalmente usaria para logins.