Exercício – controlar quem pode aceder à sua base de dados
Mesmo que você possa se conectar ao banco de dados pela rede, isso não significa que você pode realmente obter acesso aos dados em si. Seguindo uma abordagem em camadas, você deseja garantir que apenas os usuários que precisam acessar os dados possam realmente acessá-los. Este acesso é onde a autenticação e a autorização entram em jogo.
Autenticação
A autenticação é o processo de verificar uma identidade. Essa identidade pode ser um usuário, um serviço executado em um sistema ou o próprio sistema, como uma máquina virtual. Através do processo de autenticação, você garante que a pessoa ou o sistema é quem afirma ser. O Banco de dados SQL oferece suporte a dois tipos de autenticação: autenticação SQL e autenticação Microsoft Entra.
Autenticação do SQL
O método de autenticação SQL usa um nome de usuário e senha. As contas de usuário podem ser criadas no banco de dados principal e podem receber permissões em todos os bancos de dados no servidor. Você também pode criar usuários no próprio banco de dados, chamados de usuários contidos, e dar-lhes acesso somente a esse banco de dados. Ao criar o servidor lógico para seu banco de dados, você especificou um login de administrador de servidor com um nome de usuário e senha. Usando essas credenciais, você pode autenticar em qualquer banco de dados nesse servidor como o proprietário do banco de dados ou dbo.
Autenticação do Microsoft Entra
Esse método de autenticação usa identidades gerenciadas pelo Microsoft Entra ID e é suportado para domínios gerenciados e integrados. Use a autenticação Microsoft Entra (segurança integrada) sempre que possível. Com a autenticação do Microsoft Entra, você pode gerenciar as identidades dos usuários do banco de dados e outros serviços da Microsoft em um local central. A gestão de IDs centralizada disponibiliza um único local para gerir utilizadores da base de dados e simplifica a gestão de permissões. Se você quiser usar a autenticação do Microsoft Entra, deverá criar outro administrador de servidor chamado administrador do Microsoft Entra, que tem permissão para administrar usuários e grupos do Microsoft Entra. Este administrador também pode fazer todas as operações que um administrador de servidor normal faz.
Autorização
A autorização refere-se ao que uma identidade pode efetuar numa Base de Dados SQL do Azure. Essa autorização é controlada por permissões concedidas diretamente à conta de usuário e às associações de função de banco de dados. Uma função de banco de dados é usada para agrupar permissões para facilitar a administração. Adicione um usuário a uma função para conceder as permissões que a função tem. Essas permissões podem incluir a capacidade de entrar no banco de dados, a capacidade de ler uma tabela e a capacidade de adicionar e remover colunas de um banco de dados. Como melhor prática, deverá conceder aos utilizadores o mínimo de privilégios necessários. O processo de concessão de autorização para usuários SQL e Microsoft Entra é o mesmo.
No exemplo aqui, a conta de administrador do servidor com a qual você se conecta é um membro da função db_owner, que tem autoridade para fazer qualquer coisa dentro do banco de dados.
A autenticação e autorização em prática
Como melhor prática, a sua aplicação deve utilizar uma conta dedicada para a autenticação. Desta forma, pode limitar as permissões concedidas à aplicação e reduzir os riscos de atividades maliciosas, caso o código da aplicação seja vulnerável a um ataque de injeção SQL. Recomendamos que você crie um usuário de banco de dados contido, que permita que seu aplicativo se autentique diretamente no banco de dados. Para obter mais informações, veja Contained Database Users - Making Your Database Portable (Utilizadores de Base de Dados Contidos – Tornar a Sua Base de Dados Portátil).
Use a autenticação do Microsoft Entra para gerenciar centralmente identidades de usuários de banco de dados e como uma alternativa à autenticação do SQL Server.
Veja como configurar um usuário e conceder-lhe acesso a um banco de dados. Nesse caso, você usa a autenticação SQL para seu usuário, mas o processo seria essencialmente o mesmo se você usar a autenticação do Microsoft Entra.
Criar um utilizador de base de dados
Crie um novo usuário que você possa usar para conceder acesso.
No Cloud Shell, em sua VM appServer , conecte-se ao banco de dados novamente como seu
ADMINUSER
arquivo .sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
Execute o comando seguinte para criar um novo utilizador. Este utilizador é um utilizador contido que apenas permite o acesso à base de dados do marketplace . Sinta-se à vontade para ajustar a senha conforme necessário, mas certifique-se e anote-a porque você precisa dela para uma etapa futura.
CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1'; GO
Com essas credenciais, o usuário pode se autenticar no banco de dados, mas não está autorizado a acessar nenhum dado. Conceda acesso a este usuário.
Conceder permissões a um utilizador
Torne o usuário um membro das funções e db_datawriter
, concedendo acesso para leitura e gravação no banco de db_datareader
dados, respectivamente. Você também deseja impedir que esse usuário acesse uma tabela com endereços.
Enquanto ainda estiver conectado ao
sqlcmd
appServer, execute o seguinte T-SQL para conceder asdb_datareader
funções edb_datawriter
ao usuário que você criou.ALTER ROLE db_datareader ADD MEMBER ApplicationUser; ALTER ROLE db_datawriter ADD MEMBER ApplicationUser; GO
Você pode restringir ainda mais o escopo de acesso. Você pode negar o acesso de um usuário a outros elementos dentro do banco de dados usando o operador DENI. Execute o seguinte T-SQL para negar ao utilizador ApplicationUser a capacidade de selecionar dados da tabela
SalesLT.Address
.DENY SELECT ON SalesLT.Address TO ApplicationUser; GO
Agora entre como esse usuário e dê uma olhada nessa configuração em ação.
Ainda no prompt do T-SQL, entre
exit
para sair da sessão.Agora entre novamente no banco de dados, mas como o usuário que você criou.
sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
Execute a seguinte consulta. Essa consulta extrai dados de uma tabela que o usuário está autorizado a acessar.
SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer; GO
Deverá obter uma lista de clientes.
FirstName LastName EmailAddress Phone -------------- -------------- ------------------------------- ------------ Orlando Gee orlando0@adventure-works.com 245-555-0173 Keith Harris keith0@adventure-works.com 170-555-0127 Donna Carreras donna0@adventure-works.com 279-555-0130 Janet Gates janet1@adventure-works.com 710-555-0173 ...
Veja o que acontece quando tenta consultar uma tabela à qual não tem acesso.
SELECT * FROM SalesLT.Address; GO
Deverá ser apresentada uma mensagem que o informa que não tem acesso à tabela.
Msg 229, Level 14, State 5, Server server-22942, Line 1 The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
Como você pode ver aqui, mesmo que tenha concedido acesso de leitura/gravação ao banco de dados, você pode proteger ainda mais o acesso aos dados negando explicitamente o acesso às tabelas. Se tiver múltiplos utilizadores que partilham acesso semelhante, pode criar funções personalizadas com as permissões adequadas e simplificar a sua administração.
É importante proteger a sua base de dados adequadamente e só conceder acesso quando necessário. A Base de Dados SQL do Azure disponibiliza funcionalidades incorporadas para controlar totalmente a autenticação e autorização de identidades para aceder aos dados na sua base de dados.