Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

Azure SQL Database – Como criar e gerenciar usuários e logins com autenticação SQL e Azure Active Directory (Azure AD)

Tempo de Leitura: 10 minutos

Fala pessoal!
Nesse post eu gostaria de compartilhar com vocês como criar e gerenciar usuários e logins. Explicarei o que é o usuário/grupo Azure Active Directory admin, o que é o server admin, como criar e quais as diferenças entre um login criado na instância e um usuário criado no database.

Vale lembrar que a interface do Management Studio ainda não suporta criação de logins e usuários, então isso deve ser feito via comandos T-SQL.

Métodos de autenticação

Clique aqui para visualizar o conteúdo
A primeira escolha que você faz com relação aos usuários do seu Azure SQL DB é em relação ao método de autenticação durante a criação/alteração do servidor.

Isso irá definir se o seu servidor irá aceitar conexões utilizando o Azure Active Directory (Azure AD) apenas, se vai aceitar apenas conexões utilização autenticação SQL ou se vai aceitar as duas formas de autenticação.

A forma mais segura e a recomendação oficial da Microsoft, é utilizar a opção de aceitar apenas autenticação Azure Active Directory (Azure AD), uma vez que a responsabilidade pela gestão das senhas e credenciais passa a ser do Azure Active Directory e não do banco de dados. Além disso, você pode definir autenticação de 2 fatores, por exemplo, exigindo que o usuário precise confirmar o login em um dispositivo externo, como o celular ou e-mail.

Usuários com autenticação SQL também são passíveis de ataques de força bruta, visto que o banco de dados não irá monitorar e bloquear excessivas tentativas de falhas de conexão por padrão, enquanto o Azure AD tem esse bloqueio por padrão, relatórios sobre falhas de conexão, Inteligência Artifical analisando todos os logins e bloquando logins suspeitos, etc..

Outro ponto positivo para essa escolha é que caso essa pessoa saia da empresa, basta desativar o seu login no Azure Active Directory e ela automaticamente já perde acesso em todos os bancos. Utilizando uma autenticação SQL, você terá que entrar banco por banco, verificar se esse usuário tinha acesso, e excluir/desativar essa conta.

Entretanto, sabemos que nem sempre é possível bloquear a autenticação utilizando credenciais SQL, especialmente quando falamos sobre sistemas legados, algumas ferramentas de BI ou alguns tipos de integrações. Nesses casos, a autenticação SQL acaba sendo necessário. Caso não seja o seu caso, sugiro manter apenas a autenticação utilizando Azure AD.

Dependendo do método de autenticação escolhido, as opções de Azure Active Directory admin e Server admin são mostradas/ocultadas.

Use SQL authentication

Use only Azure Active Directory (Azure AD) authentication

Use both SQL and Azure AD authentication

Azure Active Directory admin

Clique aqui para visualizar o conteúdo
O primeiro usuário que você acaba criando em um novo servidor do Azure SQL Database, caso você tenha escolhido os métodos de autenticação “Use only Azure Active Directory (Azure AD) authentication” ou “Use both SQL and Azure AD authentication”, é o Azure Active Directory admin.

Esse usuário ou grupo terá acesso irrestrito nos bancos de dados do servidor, com permissão para gestão dos usuários/logins, de todos os databases e acesso irrestrito aos dados também, podendo ser utilizado para conectar no banco de dados.

O usuário atribuído como Azure Active Directory admin não consegue alterar nenhuma propriedade do servidor pelo Portal do Azure (caso ela não tenha outras permissões no recurso e/ou na Subscription/Resource Group) e nem alterar o usuário admin. Somente com essa atribuição, ele não conseguirá nem abrir ou visualizar o recurso pelo Portal.

Suas permissões são apenas ao nível da instância, conectado ao banco de dados. A partir do momento que esse usuário se conecta, ele terá acesso a fazer tudo que seja possível fazer utilizando T-SQL.

Algumas configurações como Firewall, Service Tier e criação de outros bancos de dados, esse usuário pode fazer utilizando comandos T-SQL, mas não consegue fazer pelo portal do Azure.

Vale lembrar que apenas UM usuário pode ser atribuído a ser Azure Active Directory admin. Caso você queira ter mais de uma pessoa com esse nível de acesso, crie um grupo, adicione os usuários nesse grupo e atribua esse grupo como o Azure Active Directory admin.

Importante: Usuários que sejam owner/contributor do resource group ou da subscription tem permissão para gerenciar o servidor e até alterar esse usuário/grupo, mas não conseguem se conectar na base de dados caso eles não tenham permissão diretamente no banco.

Alerta: O usuário/grupo que seja o Azure Active Directory admin tem acesso automaticamente no banco de dados.

Depois que o servidor foi criado, você ainda pode ativar/desativar a autenticação via Azure Active Directory (Azure AD) e também gerenciar o usuário administrador.

Se você tentar ativar a opção “Azure Active Directory authentication only”, para permitir somente autenticação usando o Azure AD, você verá uma confirmação perguntando se você realmente quer ativar essa opção, porque ela irá DESATIVAR a autenticação SQL e todos os usuários que utilizem esse tipo de autenticação, incluindo o usuário “sa” (Server admin)

Server admin (sa)

Clique aqui para visualizar o conteúdo
Conhecido como o usuário “sa”, o Server admin é um usuário que tem basicamente as mesmas permissões do usuário Azure Active Directory admin, mas utilizando a autenticação SQL.

Isso quer dizer que esse usuário não tem acesso nenhum no portal do Azure e não consegue alterar nada lá e nem alterar nenhuma propriedade. Entretanto, ele pode ser utilizado para logar na instância e ele terá acesso a todos os dados, de todas as tabelas, além de poder alterar/criar/excluir qualquer usuário, login, permissão ou objeto no banco, além de gerenciar database e server firewall via comandos T-SQL.

Como eu já comentei nesse post, essa alternativa é a menos segura possível, visto que quem fica responsável pela gestão das senhas e usuários é o banco de dados. Não tem suporte à MFA e cada usuário pode ter uma senha diferente, em bancos diferentes.

Caso você queira desativar o mesmo usuário em vários bancos, terá que entrar em banco por banco para desativar/excluir a conta (ou criar um script para automatizar isso), ao invés de simplesmente desativar a conta no AD.

Não é possível alterar o nome do Server admin depois que o servidor é criado, mas é possível fazer um reset de senha, caso necessário

Esse usuário está disponível apenas se você selecionar o método de autenticação “Use SQL authentication” ou “Use both SQL and Azure AD authentication”.

Caso você tenha escolhido essas opções e depois tenha alterado o método de autenticação e depois altere para permitir apenas autenticação com Azure Active Directory, esse usuário será desativado, assim como todos os outros que utilizem autenticação SQL.

Criação de Logins

Clique aqui para visualizar o conteúdo
Após definir os usuários administradores, chegou a hora de criar os demais usuários do banco. Uma das formas de você dar acesso num banco de dados, é criando um login.

Importante: Logins só podem ser criados se você estiver conectado no banco master

O login é uma forma de conectar no banco, onde o banco inicial será o “master” e depois ele pode alterar o contexto para o banco desejado. Além disso, o login pode ser adicionado à alguma server role para receber permissões a nível de servidor.

Importante: Diferente do SQL Server, um login não pode receber permissões a nível de servidor no Azure SQL Database, apenas ser adicionado à server roles que dão permissões a nível de servidor, dado que o conceito de servidor é algo apenas lógico e não físico.

Criando um login com autenticação SQL

Simples. Rápido. Prático. Inseguro. E mais um usuário que você terá que manter a senha atualizada, trocando de tempos em tempos (e alterando nas apps), se preocupando com tentativas de ataque por força bruta, vazamentos de senha, etc.

Para criar um login com autenticação SQL, basta seguir o script abaixo:

Criando um login com autenticação Azure Active Directory

O primeiro passo para isso, é acessar o Azure Active Directory para obter o “User Principal Name” (UPN) do login que quero adicionar no banco:

Agora que já sei o User Principal Name, já posso criar o login no banco “master”

Reparem que não precisei definir nenhuma senha para o login. A senha será a própria senha do Azure Active Directory, um único local centralizado para gestão de usuários e senhas.

Alerta: As opções CHECK_POLICY, CHECK_EXPIRATION, DEFAULT_DATABASE e DEFAULT_LANGUAGE não estão disponíveis na criação de logins no Azure SQL Database. Entretanto, a opção CHECK_POLICY é habilitada internamente, não permitindo que você crie senhas fracas para os logins (Política de Senhas do Azure SQL).

Dica: Se você for utilizar autenticação SQL, sugiro utilizar sites geradores de senhas, como o LastPass e escolher uma senha bem complexa (eu costumo utilizar 50+ caracteres)

Criação de Usuários

Clique aqui para visualizar o conteúdo
Assim como no SQL Server, o Azure SQL Database permite a criação de usuários dentro de cada um dos bancos de dados, onde esse usuário tem permissões específicas em cada um desses bancos. Entretanto, diferente do SQL Server, você não precisa criar um login para se conectar ao Azure SQL, pode se conectar utilizando apenas o usuário.

Listo abaixo as diferenças entre Login e Usuário:

LoginUsuário
Criado no banco "master"Criado no banco onde ele irá se conectar
A conexão é feita sem precisar especificar o banco de dadosA conexão é feita obrigatoriamente tendo que especificar o banco de dados
Login pode receber permissões a nível de servidor (através de server roles)Usuário NÃO pode receber permissões a nível de servidor
Login NÃO pode receber permissões em um banco de dadosUsuário pode receber permissões em um banco de dados
Login NÃO pode acessar nenhum banco de dadosUsuário pode acessar os bancos de dados que ele tem acesso, mesmo que não esteja associado a um login
Login precisa estar associado à um usuário para acessar algum banco de dadosUsuário NÃO precisa ser associado à um login (É até melhor que não seja)
Dica: Por questões de segurança, eu costumo não criar logins e sempre criar o usuário somente no banco que ele vai acessar. Desta forma, preciso especificar o nome do banco de dados na conexão (senão dá erro) e ele só conseguirá ver aquele banco de dados (e a “master”), não vê nenhum outro banco. Isso é mais seguro, porque se alguém conseguir acesso a essa credencial, ele precisará saber exatamente o nome do banco de dados para conseguir acessar os dados.

Se você optar por criar o login e depois criar um usuário associado à um login, a autenticação será feita via login, sem precisar especificar o nome do banco de dados. Ao se conectar ao servidor, essa pessoa irá visualizar todos os bancos de dados, tornando mais fácil um possível ataque.

Criando um usuário utilizando autenticação SQL

Como já comentei anteriormente, essa opção é a menos segura, mas é a mais simples, prática e fácil de usar, especialmente se estiver usando sistemas legados ou aplicações que não suportam conexão usando o Azure Active Directory.

Criando um usuário associado a um login

Nesse cenário, já existe um login previamente criado, seja utilizando autenticação SQL ou Azure Active Directory e vou agora criar um usuário no banco de dados desejado, utilizando esse login já existente. Nesse caso, não especificarei uma senha na criação do usuário, pois ele irá aproveitar o método de autenticação do login.

Criando um usuário utilizando o Azure Active Directory (Azure AD)

Assim como na criação do login, o primeiro passo para a criação de um usuário utilizando o Azure Active Directory (Azure AD), é acessar o Azure Active Directory para obter o “User Principal Name” (UPN) do usuário que quero adicionar no banco:

Agora que já sei o User Principal Name, já posso criar o usuário no banco desejado

Criando um usuário para um Azure Data Factory (Managed Identity)

Sempre que possível, opte por utilizar autenticação “Managed Identity” na sua aplicação ou recurso do Azure. Isso faz com que você precise apenas criar o usuário no banco, sem ter que informar nenhum usuário, senha ou KeyVault para acessar o banco de dados. Para criar o login/usuário no banco, é da mesma forma que qualquer outro login/usuário com autenticação Azure AD, com a diferença que você informará o nome do recurso ao invés do User Principal Name.

Exemplo prático
Tenho um recurso do Azure Data Factory e quero adicioná-lo no banco de dados para ele ter acesso para ler e modificar dados e estruturas.

Adicionarei o nome do recurso agora como usuário (fica a seu critério entre login ou usuário) no banco de dados

Resultado:

Criando um usuário para um App Registration / Service Principal

Para a criação de um usuário para um App Registration / Service Principal utilizando Managed Identity, o processo é o mesmo, basta informar o nome do AppRegistration e adicionar normalmente no banco de dados.

Exemplo:

Script para adicionar esse Service Principal no banco de dados

Dica: Caso você não possa ou não consiga utilizar Managed Identity, você terá que obter o token de acesso e usar o client secret. Nesse caso, sugiro a leitura do artigo Query Azure SQL Database with PowerShell and Azure App Registration.

Outra Dica: Precisa de ajuda para implementar Managed Identity na sua aplicação? Dê uma lida no artigo Passwordless connection string to Azure SQL database using Azure managed identity

É isso aí, pessoal!
Espero que tenham gostado desse artigo e até a próxima!