Tutorial: criar e usar logons de servidor do Microsoft Entra

Aplica-se a: Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics (somente pools de SQL dedicados)

Este artigo orienta você na criação e uso de logons apoiados pelo Microsoft Entra ID (anteriormente Azure Active Directory) no banco de dados virtual master do Azure SQL.

Neste tutorial, você aprenderá a:

  • Criar um logon do Microsoft Entra no banco de dados master virtual com a nova extensão de sintaxe para Banco de Dados SQL do Azure
  • Criar um usuário mapeado para um logon do Microsoft Entra no banco de dados master virtual
  • Conceder funções de servidor a um usuário do Microsoft Entra
  • Desabilitar um logon do Microsoft Entra

Observação

As entidades de segurança (logons) do servidor Microsoft Entra estão atualmente em visualização pública para Banco de Dados SQL do Azure. A Instância Gerenciada de SQL do Azure já pode utilizar logons do Microsoft Entra.

Pré-requisitos

Criar um logon do Microsoft Entra

  1. Crie um logon do Banco de Dados SQL do Azure para uma conta do Microsoft Entra. Em nosso exemplo, vamos usar o bob@contoso.com que existe em nosso domínio do Microsoft Entra chamado contoso. Um logon também pode ser criado de um grupo do Microsoft Entra ou de uma entidade de serviço (aplicativos). Por exemplo, mygroup é um grupo do Microsoft Entra que consiste em contas do Microsoft Entra que são membros desse grupo. Para obter mais informações, confira CRIAR LOGON (Transact-SQL).

    Observação

    O primeiro logon do Microsoft Entra deve ser criado pelo administrador do Microsoft Entra. O administrador do Microsoft Entra pode ser um usuário ou um grupo do Microsoft Entra. Um logon do SQL não pode criar logons do Microsoft Entra.

  2. Usando o SSMS (SQL Server Management Studio), faça logon em seu Banco de Dados SQL com a conta de administrador do Microsoft Entra, configurada para o servidor.

  3. Execute a seguinte consulta:

    Use master
    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  4. Verifique o logon criado em sys.server_principals. Execute a seguinte consulta:

    SELECT name, type_desc, type, is_disabled
    FROM sys.server_principals
    WHERE type_desc like 'external%'
    

    Você veria uma saída semelhante à seguinte:

    Name                            type_desc       type   is_disabled
    bob@contoso.com                 EXTERNAL_LOGIN  E      0
    
  5. O logon bob@contoso.com foi criado no banco de dados master virtual.

Criar um usuário por meio de um logon do Microsoft Entra

  1. Agora que criamos um logon do Microsoft Entra, podemos criar um usuário do Microsoft Entra no nível do banco de dados que é mapeado para o logon do Microsoft Entra no banco de dados virtual master. Continuaremos a usar nosso exemplo, bob@contoso.com para criar um usuário no banco de dados master virtual, pois queremos demonstrar a adição do usuário a funções especiais. Somente um administrador do Microsoft Entra ou um administrador do servidor SQL pode criar usuários no banco de dados master virtual.

  2. Estamos usando o banco de dados master virtual, mas você poderá alternar para um banco de dados de sua escolha se quiser criar usuários em outros bancos de dados. Execute a consulta a seguir.

    Use master
    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    Dica

    Embora não seja necessário usar aliases de usuário do Microsoft Entra (por exemplo, bob@contoso.com), é uma melhor prática usar o mesmo alias para usuários e logons do Microsoft Entra.

  3. Verifique o usuário criado em sys.database_principals. Execute a seguinte consulta:

    SELECT name, type_desc, type
    FROM sys.database_principals
    WHERE type_desc like 'external%'
    

    Você veria uma saída semelhante à seguinte:

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

Observação

A sintaxe existente para criar um usuário do Microsoft Entra sem um logon do Microsoft Entra ainda tem suporte. A execução da sintaxe a seguir cria um usuário contido no banco de dados no banco de dados específico ao qual você está conectado. É importante ressaltar que esse usuário não está associado a nenhum login, mesmo que exista um login de mesmo nome no banco de dados virtual master.

Por exemplo, CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER.

Você pode criar um logon do Microsoft Entra usando uma entidade de serviço com um nome de exibição não exclusivo. Para obter mais informações, consulte Logins e usuários do Microsoft Entra com nomes de exibição não exclusivos

Conceder funções de nível de servidor a logons do Microsoft Entra

Você pode adicionar logon às funções fixas no servidor, como as funções ##MS_DefinitionReader##, ##MS_ServerStateReader## ou ##MS_ServerStateManager##.

Observação

As funções do nível de servidor mencionadas aqui não têm suporte para grupos do Microsoft Entra.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

As permissões não são efetivas até que o usuário se reconecte. Liberar o cache DBCC também:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Para verificar quais logons do Microsoft Entra fazem parte das funções no nível do servidor, execute a seguinte consulta:

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       FROM sys.server_role_members AS server_role_members
       INNER JOIN sys.server_principals AS roles
       ON server_role_members.role_principal_id = roles.principal_id
       INNER JOIN sys.server_principals AS members
       ON server_role_members.member_principal_id = members.principal_id;

Conceder funções especiais a usuários do Microsoft Entra

Funções especiais para Banco de Dados SQL podem ser atribuídas aos usuários no banco de dados master virtual.

Para conceder uma das funções especiais de banco de dados a um usuário, este usuário deve existir no banco de dados master virtual.

Para adicionar um usuário a uma função, você pode executar a seguinte consulta:

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]

Para remover um usuário de uma função, execute a seguinte consulta:

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]

AzureAD_object pode ser um usuário, um grupo ou uma entidade de serviço do Microsoft Entra no Microsoft Entra ID.

Em nosso exemplo, nós criamos o usuário bob@contoso.com. Vamos dar ao usuário as funções dbmanager e loginmanager.

  1. Execute a seguinte consulta:

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com]
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
    
  2. Verifique a atribuição de função de banco de dados executando a seguinte consulta:

    SELECT DP1.name AS DatabaseRoleName,
      isnull (DP2.name, 'No members') AS DatabaseUserName
    FROM sys.database_role_members AS DRM
    RIGHT OUTER JOIN sys.database_principals AS DP1
      ON DRM.role_principal_id = DP1.principal_id
    LEFT OUTER JOIN sys.database_principals AS DP2
      ON DRM.member_principal_id = DP2.principal_id
    WHERE DP1.type = 'R'and DP2.name like 'bob%'
    

    Você veria uma saída semelhante à seguinte:

    DatabaseRoleName       DatabaseUserName
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

Opcional – Desabilitar um logon

A sintaxe DDL ALTER LOGIN (Transact-SQL) pode ser usada para habilitar ou desabilitar um logon do Microsoft Entra no Banco de Dados SQL do Azure.

ALTER LOGIN [bob@contoso.com] DISABLE

Para que as alterações DISABLE ou ENABLE entre em vigor imediatamente, o cache de autenticação e o cache TokenAndPermUserStore devem ser limpos usando os seguintes comandos T-SQL:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS

Verifique se o logon foi desabilitado executando a seguinte consulta:

SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1

Um caso de uso para isso seria permitir somente leitura em réplicas geográficas, mas negar a conexão em um servidor primário.