Compartilhar via


Microsoft Entra principais de serviço com Azure SQL

Applies to:Azure SQL DatabaseAzure SQL Managed Instance

Recursos do Azure SQL dão suporte ao acesso programático para aplicativos usando entidades de serviço e identidades gerenciadas no Microsoft Entra ID (formerly Azure Active Directory).

Suporte a entidades de serviço (aplicativos Microsoft Entra)

Este artigo se aplica a aplicativos registrados em Microsoft Entra ID. O uso de credenciais de aplicativo para acessar Azure SQL dá suporte ao princípio de segurança da Separação de Tarefas, permitindo que as organizações configurem o acesso preciso para cada aplicativo que se conecta aos seus bancos de dados. As identidades gerenciadas, uma forma especial de entidades de serviço, são recomendadas por serem sem senha e eliminarem a necessidade de uso de credenciais gerenciadas pelo desenvolvedor.

Microsoft Entra ID habilita ainda mais cenários avançados de autenticação, como OAuth 2.0 On-Behalf-Of Flow (OBO). O OBO permite que os aplicativos solicitem credenciais de usuário conectado, para cenários em que os próprios aplicativos não devem receber acesso ao banco de dados sem permissões delegadas.

Para obter mais informações sobre os aplicativos do Microsoft Entra, consulte Aplicativos e objetos principais de serviço no Microsoft Entra ID e Criar uma entidade de serviço no Azure com o Azure PowerShell.

Microsoft Entra criação de usuário usando entidades de serviço

O suporte a essa funcionalidade é útil em processos de automação de aplicativos Microsoft Entra, em que principais do Microsoft Entra são criados e mantidos no Banco de Dados SQL ou Instância Gerenciada do SQL sem interação humana. Os principais de serviço podem atuar como administradores Microsoft Entra no servidor lógico do SQL ou na instância gerenciada, como parte de um grupo ou como uma identidade autônoma. O aplicativo pode automatizar a criação de objetos do Microsoft Entra no Banco de Dados SQL ou na Instância Gerenciada SQL, permitindo a automação completa da criação de usuários no banco de dados.

Habilitar entidades de serviço para criar usuários Microsoft Entra

Ao usar aplicativos para acessar o Azure SQL, a criação de usuários e logons do Microsoft Entra requer permissões que não são atribuídas por padrão a entidades de serviço ou identidades gerenciadas: a capacidade de ler usuários, grupos e aplicativos em um inquilino no Microsoft Graph. Essas permissões são necessárias para que o mecanismo SQL valide a identidade especificada em CREATE LOGIN ou CREATE USER e extraia informações importantes, incluindo a ID do Objeto ou do Aplicativo da identidade, que é usada para criar o logon ou o usuário.

Quando um usuário Microsoft Entra executa esses comandos, o aplicativo Microsoft do Azure SQL usa permissões delegadas para representar o usuário conectado e consultas Microsoft Graph usando suas permissões. Esse fluxo não é possível com entidades de serviço, porque um aplicativo não pode representar outro aplicativo. Em vez disso, o mecanismo de SQL tenta usar sua identidade de servidor, que é a identidade gerenciada primária atribuída a uma instância gerenciada de SQL, servidor lógico do Azure SQL ou workspace do Azure Synapse. A identidade do servidor deve existir e ter as permissões de consulta Microsoft Graph, senão as operações falharão.

As etapas a seguir explicam como atribuir uma identidade gerenciada ao servidor e atribuí-la às permissões de Microsoft Graph para permitir que as entidades de serviço criem Microsoft Entra usuários e logons no banco de dados.

  1. Atribua a identidade do servidor. A identidade do servidor pode ser uma identidade gerenciada atribuída pelo sistema ou pelo usuário. Para obter mais informações, consulte Managed identities no Microsoft Entra para Azure SQL.

    • O comando do PowerShell a seguir cria um novo servidor lógico provisionado com uma identidade gerenciada atribuída pelo sistema:
    $newServerParams = @{
        ResourceGroupName        = '<resource group>'
        Location                 = '<Location name>'
        ServerName               = '<Server name>'
        ServerVersion            = '12.0'
        SqlAdministratorCredentials = (Get-Credential)
        AssignIdentity           = $true
    }
    New-AzSqlServer @newServerParams
    

    Para obter mais informações, consulte o comando New-AzSqlServer ou New-AzSqlInstance comando para SQL Managed Instance.

    • Para um servidor lógico existente, execute o seguinte comando para adicionar uma identidade gerenciada atribuída pelo sistema a ele:
    $setServerParams = @{
        ResourceGroupName = '<resource group>'
        ServerName        = '<Server name>'
        AssignIdentity    = $true
    }
    Set-AzSqlServer @setServerParams
    

    Para obter mais informações, consulte o comando Set-AzSqlServer ou Set-AzSqlInstance comando para SQL Managed Instance.

    • Para verificar se a identidade do servidor está atribuída ao servidor, execute o comando Get-AzSqlServer ou Get-AzSqlInstance comando para SQL Managed Instance.

    Observação

    A identidade do servidor também pode ser atribuída por meio de comandos da CLI e da API REST. Para obter mais informações, confira az sql server create, az sql server update e Servidores - REST API.

  2. Conceda permissões de identidade do servidor para consultar Microsoft Graph. Isso pode ser feito de várias maneiras: adicionando a identidade à função Microsoft Entra Leitores de Diretório, atribuindo à identidade as permissões individuais do Microsoft Graph, ou adicionando a identidade a um grupo que pode receber atribuições de função que tenha a função Leitores de Diretório:

    • Adicionar identidade de servidor a um grupo de funções atribuíveis

      Em ambientes de produção, é recomendável que um administrador de locatário crie um grupo de funções atribuíveis e atribua a função Leitores de Diretório a ele. Os proprietários do grupo podem adicionar identidades de servidor ao grupo, herdando essas permissões. Isso remove o requisito para que um Administrador de Funções Com Privilégios conceda permissões a cada identidade de servidor individual, permitindo que os administradores delegam a atribuição de permissão aos proprietários do grupo para esse cenário. Para obter mais informações, consulte A função Leitores de Diretório em Microsoft Entra ID para Azure SQL.

    • Atribuir permissões de Microsoft Graph à identidade do servidor

      Para atribuir as permissões de Microsoft Graph individuais à identidade do servidor, você deve ter a função Microsoft Entra Privileged Roles Administrator. Isso é recomendado em vez de atribuir a função Leitores de Diretório, pois existem permissões incluídas nessa função que não são necessárias para a identidade do servidor. Atribuir somente as permissões individuais de leitura do Microsoft Graph limita as permissões da identidade do servidor em seu inquilino e mantém o princípio de privilégio mínimo. Para obter instruções, consulte as identidades gerenciadas no Microsoft Entra para Azure SQL.

    • Adicionar identidade do servidor à função Leitores de Diretório

      Para adicionar a identidade do servidor à função Leitores de Diretório, você deve ser membro da função Microsoft Entra Privileged Roles Administrator. Em ambientes de produção, essa opção não é recomendada por dois motivos: a função Leitor de Diretório fornece mais permissões do que a identidade do servidor exige e o processo de atribuição de função ainda requer aprovações de administrador para cada identidade de servidor (ao contrário do uso de grupos). Siga as instruções do SQL Managed Instance disponíveis no artigo Set Microsoft Entra admin (SQL Managed Instance).

Troubleshoot

Durante a solução de problemas, você pode encontrar o seguinte erro:

Msg 33134, Level 16, State 1, Line 1
Principal 'test-user' could not be resolved.
Error message: 'Server identity is not configured. Please follow the steps in "Assign an Azure AD identity to your server and add Directory Reader permission to your identity" (https://aka.ms/sqlaadsetup)'

Esse erro indica que a identidade do servidor não foi criada ou não foi atribuída permissões do Microsoft Graph. Siga as etapas para Atribuir uma identidade ao servidor lógico e Atribuir permissão de Leitores de Diretório à identidade do servidor lógico.

Limitações

  • As entidades de serviço não podem se autenticar além dos limites dos locatários. A tentativa de acessar o Banco de Dados SQL ou SQL Managed Instance usando um aplicativo Microsoft Entra criado em um locatário diferente falha.

  • Az.Sql 2.9.0 módulo ou superior é necessário para definir um aplicativo Microsoft Entra como o administrador Microsoft Entra para Azure SQL. Verifique se você atualizou para o módulo mais recente.

Conectar-se ao Azure SQL com um principal de serviço

Para conectar um aplicativo ao Azure SQL Database usando um service principal, você precisa:

  1. Um registro de aplicativo no Microsoft Entra ID, com um ID de Aplicativo (cliente) e um segredo do cliente ou certificado. Para cargas de trabalho de produção, use uma identidade gerenciada em vez disso – as identidades gerenciadas eliminam a necessidade de credenciais gerenciadas pelo desenvolvedor.

  2. Um usuário de banco de dados independente mapeado para a entidade de serviço. Conecte-se como administrador do Microsoft Entra e execute:

    CREATE USER [my-sql-app] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [my-sql-app];
    

    Substitua my-sql-app pelo nome de exibição do registro da aplicação. Atribua funções de banco de dados apropriadas com base nas necessidades de acesso do aplicativo.

  3. Uma cadeia de conexão que especifica Active Directory Service Principal autenticação. Use a ID do aplicativo (cliente) como o nome de usuário e o segredo do cliente como a senha.

Para obter um passo a passo completo, incluindo o registro de aplicativo e a configuração de permissão, consulte Tutorial: Criar usuários Microsoft Entra usando aplicativos Microsoft Entra. Para obter exemplos de conexão específicos do driver, consulte Conectar ao Azure SQL com autenticação do Microsoft Entra e SqlClient.