Exercício – Controlar quem pode acessar o banco de dados

Concluído

Mesmo que você possa se conectar ao banco de dados pela rede, isso não significa que você possa realmente obter acesso aos dados em si. Seguindo uma abordagem em camadas, você deseja garantir que somente os usuários que precisam de acesso aos dados possam realmente acessá-los. É nesse aceso aqui que 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 um sistema em si, como uma máquina virtual. Por meio do processo de autenticação, você garante que a pessoa ou o sistema sejam quem eles afirmam ser. O Banco de Dados SQL dá suporte a dois tipos de autenticação: Autenticação do SQL e autenticação do Microsoft Entra.

Autenticação do SQL

O método de autenticação SQL usa um nome de usuário e uma 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 independentes, e dar a eles acesso somente a esse banco de dados. Ao criar o servidor lógico para seu banco de dados, você especificou um logon de administrador de servidor com um nome de usuário e uma senha. Usando essas credenciais, você pode se 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 tem suporte para domínios gerenciados e integrados. Use a autenticação do Microsoft Entra (segurança integrada) sempre que possível. Com a autenticação do Microsoft Entra, você pode gerenciar as identidades de usuários de banco de dados e outros serviços da Microsoft em um local central. O gerenciamento central de IDs fornece um único local para gerenciar os usuários do banco de dados e simplifica o gerenciamento 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 executar todas as operações executadas por um administrador de servidor comum.

Autorização

Autorização se refere a o que uma identidade pode fazer em um Banco de Dados SQL do Azure. Essa autorização é controlada por permissões concedidas diretamente à conta de usuário e 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 da função. 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 uma prática recomendada, você deve conceder aos usuários os privilégios mínimos necessários. O processo de conceder autorização a usuários do SQL e do Microsoft Entra é o mesmo.

No exemplo aqui, a conta de administrador do servidor com a qual você se conecta é membro da função db_owner, que tem autoridade para fazer qualquer coisa dentro do banco de dados.

Autenticação e autorização na prática

Como melhor prática, seu aplicativo deve usar uma conta dedicada para se autenticar. Dessa forma, você pode limitar as permissões concedidas ao aplicativo e reduzir os riscos de atividades mal-intencionadas, caso o código do aplicativo seja vulnerável a um ataque de injeção de SQL. Recomendamos que você crie um usuário de banco de dados independente, o que permite que seu aplicativo se autentique diretamente no banco de dados. Para obter mais informações, consulte Usuários do banco de dados independente – Tornando o banco de dados portátil.

Use a autenticação do Microsoft Entra para gerenciar centralmente as identidades de usuários do banco de dados e como uma alternativa à autenticação do SQL Server.

Dê uma olhada em como configurar um usuário e conceder-lhe acesso a um banco de dados. Nesse caso, você usará a autenticação SQL para o seu usuário, mas o processo será essencialmente o mesmo se você usar a autenticação do Microsoft Entra.

Criar um usuário de banco de dados

Crie um novo usuário que você pode usar para conceder acesso.

  1. No Cloud Shell, na VM do appServer, conecte-se ao banco de dados novamente como seu ADMINUSER.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Execute o comando a seguir para criar um novo usuário. Esse usuário é um usuário independente que só permite o acesso ao banco de dados do marketplace. Fique à vontade para ajustar a senha conforme necessário, mas não esqueça de anotá-la, porque você precisará dela em 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 esse usuário.

Conceder permissões a um usuário

Torne o usuário um membro das funções db_datareader e db_datawriter concedendo acesso de leitura e gravação no banco de dados, respectivamente. Você também deseja impedir que esse usuário acesse uma tabela com endereços.

  1. Embora ainda esteja conectado ao sqlcmd no appServer, execute o T-SQL a seguir para conceder as funções db_datareader e db_datawriter ao usuário que você criou.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Você pode restringir ainda mais o escopo de acesso. Você pode negar o acesso de um usuário a outros elementos no banco de dados usando o operador DENY. Execute o seguinte T-SQL para negar ao usuário 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.

  1. Ainda no prompt T-SQL, insira exit para sair de sua sessão.

  2. Agora entre novamente no banco de dados, mas como o usuário que você criou.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Execute a consulta a seguir. Essa consulta extrai dados de uma tabela que o usuário está autorizado a acessar.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    Você deve 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
    ...
    
  4. Veja o que acontece quando você tenta consultar uma tabela à qual não tem acesso.

    SELECT * FROM SalesLT.Address;
    GO
    

    Você deve receber uma mensagem dizendo que você não tem acesso a essa 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 tendo concedido acesso de leitura/gravação ao banco de dados, você pode proteger ainda mais o acesso aos dados negando explicitamente o acesso a tabelas. Se você tiver vários usuários que compartilhem acesso semelhante, poderá criar funções personalizadas com as permissões adequadas e simplificar sua administração.

É importante proteger corretamente o seu banco de dados e permitir acesso somente quando necessário. O Banco de Dados SQL do Azure fornece a capacidade interna de controlar totalmente a capacidade de autenticar e autorizar identidades a acessar os dados no seu banco de dados.