Partilhar via


Tutorial: Criar e utilizar logins de servidor do Microsoft Entra

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

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

Neste tutorial, você aprenderá a:

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

Observação

Os principais do servidor Microsoft Entra (logons) estão atualmente em visualização pública para a Base de Dados SQL do Azure. A Instância Gerenciada do SQL do Azure e o SQL Server 2022 e posterior já podem utilizar logons do Microsoft Entra em disponibilidade geral.

Pré-requisitos

Observação

Para organizações que lidam com nomes de exibição não exclusivos no Microsoft Entra ID (particularmente para entidades de serviço), certifique-se de ter as informações de ID do objeto disponíveis para todas as entidades de serviço para as quais planeja criar logons. A WITH OBJECT_ID extensão de sintaxe pode ajudar a resolver esses cenários.

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 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 principal de serviço (aplicativos). Por exemplo, mygroup é um grupo do Microsoft Entra composto por contas que são membros desse grupo. Para obter mais informações, consulte CREATE LOGIN (Transact-SQL).

    Observação

    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.

    Dica

    Se se deparar com problemas relacionados a nomes de apresentação não exclusivos no Microsoft Entra ID, pode usar a sintaxe da extensão WITH OBJECT_ID. Esse recurso é particularmente útil para entidades de serviço com nomes de exibição duplicados. Por exemplo:

    CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
    

    Para obter mais informações, consulte Logins do Microsoft Entra e utilizadores com nomes de exibição não únicos.

  2. Usando SQL Server Management Studio (SSMS), inicie sessão na sua Base de Dados SQL com a conta de administrador do Microsoft Entra configurada para o servidor.

  3. Expanda Bases de Dados>Bases de Dados do Sistema. Clique com o botão direito do rato no banco de dados master e selecione Nova Consulta para abrir uma nova janela de consulta no contexto do banco de dados master.

  4. Execute a seguinte consulta:

    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  5. 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
    
  6. O login bob@contoso.com foi criado na base de dados virtual master.

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

  1. Agora que criámos um login do Microsoft Entra, podemos criar um utilizador do Microsoft Entra ao nível da base de dados que está mapeado para o login do Microsoft Entra na base de dados virtual master. Continuaremos a usar nosso exemplo, bob@contoso.com para criar um usuário no banco de dados de master virtual, 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 de master virtual.

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

    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 prática recomendada usar o mesmo alias para usuários do Microsoft Entra e logins do Microsoft Entra.

    Se você precisar criar um usuário diretamente de um provedor externo com uma ID de objeto específica (por exemplo, para resolver problemas de nome de exibição não exclusivo), você também pode usar:

    CREATE USER [user_name] FROM EXTERNAL PROVIDER 
      WITH OBJECT_ID = 'objectid'
    
  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 login do Microsoft Entra ainda é suportada. A execução da sintaxe a seguir cria um usuário contido 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 com o mesmo nome no banco de dados virtual master .

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

Você pode criar um login do Entra da Microsoft usando uma entidade de serviço com um nome de apresentação que não é único. Para obter mais informações, consulte logins do Microsoft Entra e usuários com nomes de exibição não exclusivos

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

Você pode adicionar logons ao funções fixas de nível de servidor, como a ##MS_DefinitionReader##, ##MS_ServerStateReader##ou função de ##MS_ServerStateManager## no banco de dados master.

Observação

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 do Banco de dados SQL podem ser atribuídas a usuários no banco de dados de master virtual.

Para conceder uma das funções especiais de banco de dados a um usuário, o usuário deve existir no banco de dados de 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 utilizador, grupo ou principal de serviço no Microsoft Entra ID.

No nosso exemplo, criámos o utilizador bob@contoso.com. Vamos dar ao utilizador os papéis de dbmanager e de 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 ALTER LOGIN (Transact-SQL) DDL 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 de ou 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.