Partilhar via


Tutorial: Criar e utilizar logins de servidor do Microsoft Entra

Aplica-se a:Banco de Dados SQL do Azure Azure SQL Managed InstanceAzure Synapse Analytics (somente pools SQLdedicados)

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

Neste tutorial, irá aprender a:

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

Nota

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

Pré-requisitos

Criar login do Microsoft Entra

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

    Nota

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

  2. Usando o SQL Server Management Studio (SSMS), faça logon no 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 login 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 login bob@contoso.com foi criado no banco de dados virtual master .

Criar usuário a partir de um login do Microsoft Entra

  1. Agora que criamos um login do Microsoft Entra, podemos criar um usuário do Microsoft Entra no nível de banco de dados que é mapeado para o login 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 virtual master , pois queremos demonstrar a adição do usuário a funções especiais. Somente um administrador do Microsoft Entra ou administrador do servidor SQL pode criar usuários no banco de dados virtual master .

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

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

    Gorjeta

    Embora não seja necessário usar aliases de usuário do Microsoft Entra (por exemplo, bob@contoso.com), é uma prática recomendada usar o mesmo alias para usuários do Microsoft Entra e logins 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
    

Nota

A sintaxe existente para criar um usuário do Microsoft Entra sem um login do Microsoft Entra ainda é suportada. A execução da sintaxe a seguir cria um usuário contido no banco de dados dentro do 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 com o mesmo nome no banco de dados virtual master .

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

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

Você pode adicionar logons às funções fixas no nível do servidor, como a função ##MS_DefinitionReader##, ##MS_ServerStateReader## ou ##MS_ServerStateManager##.

Nota

As funções de nível de servidor mencionadas aqui não são suportadas 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. Libere o cache DBCC também:

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS 

Para verificar quais logons do Microsoft Entra fazem parte de 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 para usuários do Microsoft Entra

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

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

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, grupo ou entidade de serviço do Microsoft Entra na ID do Microsoft Entra.

No nosso exemplo, 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 - Desativar um login

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 DISABLE alterações ou ENABLE tenham efeito imediato, 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 login foi desativado 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.

Consulte também

Para mais informações e exemplos, consulte: