Configurar e gerenciar a autenticação do Azure AD com o Azure SQL

APLICA-SE A: Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics

Este artigo mostra como criar e preencher uma instância do Azure Active Directory (Azure AD) e, em seguida, usá-lo com o Banco de dados SQL do Azure, a Instância Gerenciada de SQL do Azure e o Azure Synapse Analytics. Para obter uma visão geral, confira Autenticação do Azure Active Directory.

Métodos de autenticação do Azure AD

A autenticação do Azure AD suporta os seguintes métodos de autenticação:

  • Identidades somente na nuvem do Azure AD
  • Identidades híbridas do Azure AD que dão suporte a:
    • Autenticação em nuvem com duas opções combinadas com SSO (logon único) contínuo
      • Autenticação por hash da senha do Azure AD
      • Autenticação de passagem do Azure AD
    • Autenticação federada

Para obter mais informações sobre os métodos de autenticação do Azure AD, confira Escolher o método de autenticação adequado para sua solução de identidade híbrida do Azure Active Directory.

Para obter mais informações sobre identidades, configuração e sincronização híbridas do Azure AD, confira:

Criar e preencher uma instância do Azure AD

Crie uma instância do Azure AD e preencha-a com usuários e grupos. O Azure AD pode ser o domínio gerenciado pelo Azure AD inicial. O Azure AD também pode ser um Active Directory Domain Services local federado com o Azure AD.

Para obter mais informações, consulte:

Associar ou adicionar uma assinatura do Azure ao Azure Active Directory

  1. Associe sua assinatura do Azure ao Azure Active Directory tornando o diretório um diretório confiável para a assinatura do Azure que hospeda o banco de dados. Para obter detalhes, confira Associar ou adicionar uma assinatura do Azure ao seu locatário do Azure Active Directory.

  2. Use o seletor de diretório no portal do Azure para alternar para a assinatura associada ao domínio.

    Importante

    Cada assinatura do Azure tem uma relação de confiança com uma instância do Azure AD. Isso significa que ela confia que esse diretório autentique usuários, serviços e dispositivos. Várias assinaturas podem confiar no mesmo diretório, mas uma única assinatura confia em apenas um diretório. Essa relação de confiança que uma assinatura tem com um diretório é diferente da relação que uma assinatura tem com todos os outros recursos no Azure (sites, bancos de dados e assim por diante), que são mais similares a recursos filho de uma assinatura. Se uma assinatura expira, o acesso a esses outros recursos associados à assinatura também pára. Mas o diretório permanece no Azure e você pode associar outra assinatura a ele, além de continuar a gerenciar os usuários do diretório. Para obter mais informações sobre recursos, consulte Noções básicas sobre o acesso a recursos no Azure. Para saber mais sobre essa relação de confiança, consulte relação Como associar ou adicionar uma assinatura do Azure ao Microsoft Azure Active Directory.

Administrador do Azure AD com um servidor no Banco de Dados SQL

Cada servidor do Azure (que hospeda um Banco de dados SQL ou um Azure Synapse) começa com uma única conta de administrador do servidor, que é o administrador de todo o servidor. Crie uma segunda conta de administrador como uma conta do Azure AD. Essa entidade de segurança é criada como um usuário de banco de dados independente no banco de dados mestre do servidor. As contas de administrador são membros da função db_owner em todos os bancos de dados de usuários e inserem cada um deles como o usuário dbo. Para mais informações sobre contas de administrador, confira Gerenciamento de bancos de dados e logons.

Ao usar o Azure Active Directory com a Replicação Geográfica, o administrador do Azure Active Directory deverá ser configurado para os servidores primários e secundários. Se um servidor não tiver um administrador do Azure Active Directory, o Azure Active Directory fará o logon e os usuários receberão um erro de servidor Cannot connect.

Observação

Os usuários que não são baseados em uma conta do Azure AD (incluindo a conta de administrador do servidor) não podem criar usuários baseados no Azure AD, pois eles não têm permissão para validar os usuários do banco de dados proposto com o Azure AD.

Provisionar o administrador do Azure AD (Instância Gerenciada de SQL)

Importante

Siga estas etapas somente se estiver provisionando uma Instância Gerenciada de SQL. Esta operação só pode ser executada pelo administrador global ou por um administrador que tenha função com privilégios no Azure AD.

Na versão prévia pública, você pode atribuir a função Leitores de Diretório a um grupo do Azure AD. Os proprietários do grupo podem então adicionar a identidade da instância gerenciada como um membro desse grupo, o que permitiria provisionar um administrador do Azure AD para a Instância Gerenciada de SQL. Para obter mais informações sobre esse recurso, confira Função Leitores de Diretório no Azure Active Directory para o SQL do Azure.

A Instância Gerenciada de SQL precisa de permissões de leitura no Azure AD para executar com êxito tarefas, como autenticação de usuários, por meio da associação a um grupo de segurança ou da criação de novos usuários. Para que isso funcione, você precisa conceder permissão de leitura do Azure AD à Instância Gerenciada SQL. Você pode fazer isso usando o portal do Azure ou o PowerShell.

Portal do Azure

Para conceder a permissão de leitura do Azure AD à Instância Gerenciada de SQL usando o portal do Azure, faça logon como Administrador global no Azure AD e siga estas etapas:

  1. No portal do Azure, no canto superior direito, selecione sua conta e escolha Alternar diretórios para confirmar qual Active Directory é atualmente seu diretório ativo. Alterne diretórios, se necessário.

    Screenshot of the Azure portal showing where to switch your directory

  2. Escolha o Active Directory correto como o AD do Azure padrão.

    Esta etapa vincula a assinatura associada ao Active Directory à Instância Gerenciada de SQL, garantindo que a mesma assinatura seja usada para ambos.

  3. Acesse a Instância Gerenciada de SQL que deseja usar para a integração do Azure AD.

    Screenshot of the Azure portal showing the Active Directory admin page open for the selected SQL managed instance.

  4. Selecione a faixa na parte superior da página de administração do Active Directory e conceda permissão ao usuário atual.

    Screenshot of the dialog for granting permissions to a SQL managed instance for accessing Active Directory. The Grant permissions button is selected.

  5. Depois que a operação for concluída com êxito, a seguinte notificação será exibida no canto superior direito:

    Screenshot of a notification confirming that active directory read permissions have been successfully updated for the managed instance.

  6. Agora você pode escolher o administrador do Azure AD para sua Instância Gerenciada de SQL. Para isso, na página de administração do Active Directory, selecione o comando Definir administrador.

    Screenshot showing the Set admin command highlighted on the Active Directory admin page for the selected SQL managed instance.

  7. Na página de administração do Azure AD, pesquise um usuário, selecione o usuário ou o grupo para ser um administrador e, em seguida, escolha Selecionar.

    A página de administração do Active Directory mostra todos os membros e grupos do Active Directory. Usuários ou grupos que estejam esmaecidos não poderão ser selecionados porque não têm suporte como administradores do Azure AD. Consulte a lista de administradores com suporte em Limitações e recursos do Azure AD. O Azure RBAC (controle de acesso baseado em função) aplica-se somente ao portal do Azure e não é propagado para o Banco de Dados SQL, a Instância Gerenciada de SQL ou o Azure Synapse.

    Add Azure Active Directory admin

  8. Na parte superior da página Administrador do Active Directory, selecione Salvar.

    Screenshot of the Active Directory admin page with the Save button in the top row next to the Set admin and Remove admin buttons.

    O processo de alteração do administrador pode levar vários minutos. Em seguida, o novo administrador é exibido na caixa de administração do Active Directory.

    Para usuários e grupos do Azure AD, a ID do objeto é exibida ao lado do nome do administrador. Para aplicativos (entidades de serviço), a ID do aplicativo é exibida.

Após provisionar um administrador do Azure AD para a Instância Gerenciada de SQL, comece a criar entidades de segurança do servidor do Azure AD (logons) com a sintaxe CREATE LOGIN. Para obter mais informações, confira Visão geral da Instância Gerenciada de SQL.

Dica

Para remover um Administrador mais tarde, na parte superior da página Administrador do Active Directory, selecione Remover administrador e, em seguida, selecione Salvar.

PowerShell

Para conceder a permissão de leitura do Azure AD à Instância Gerenciada de SQL usando o PowerShell, execute este script:

# Gives Azure Active Directory read permission to a Service Principal representing the SQL Managed Instance.
# Can be executed only by a "Global Administrator" or "Privileged Role Administrator" type of user.

$aadTenant = "<YourTenantId>" # Enter your tenant ID
$managedInstanceName = "MyManagedInstance"

# Get Azure AD role "Directory Users" and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq $roleName}
if ($role -eq $null) {
    # Instantiate an instance of the role template
    $roleTemplate = Get-AzureADDirectoryRoleTemplate | Where-Object {$_.displayName -eq $roleName}
    Enable-AzureADDirectoryRole -RoleTemplateId $roleTemplate.ObjectId
    $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq $roleName}
}

# Get service principal for your SQL Managed Instance
$roleMember = Get-AzureADServicePrincipal -SearchString $managedInstanceName
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No Service Principals with name '$    ($managedInstanceName)', make sure that managedInstanceName parameter was     entered correctly."
    exit
}
if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: More than one service principal with name pattern '$    ($managedInstanceName)'"
    Write-Output "Dumping selected service principals...."
    $roleMember
    exit
}

# Check if service principal is already member of readers role
$allDirReaders = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
$selDirReader = $allDirReaders | where{$_.ObjectId -match     $roleMember.ObjectId}

if ($selDirReader -eq $null) {
    # Add principal to readers role
    Write-Output "Adding service principal '$($managedInstanceName)' to     'Directory Readers' role'..."
    Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId     $roleMember.ObjectId
    Write-Output "'$($managedInstanceName)' service principal added to     'Directory Readers' role'..."

    #Write-Output "Dumping service principal '$($managedInstanceName)':"
    #$allDirReaders = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
    #$allDirReaders | where{$_.ObjectId -match $roleMember.ObjectId}
}
else {
    Write-Output "Service principal '$($managedInstanceName)' is already     member of 'Directory Readers' role'."
}

PowerShell para Instância Gerenciada de SQL

Para executar os cmdlets do PowerShell, você precisa ter o Azure PowerShell instalado e em execução. Para obter informações detalhadas, confira Como instalar e configurar o PowerShell do Azure.

Importante

O módulo ARM (Azure Resource Manager) do PowerShell ainda é compatível com a Instância Gerenciada de SQL do Azure, mas todo o desenvolvimento futuro será para o módulo Az.Sql. O módulo AzureRM continuará a receber as correções de bugs até pelo menos dezembro de 2020. Os argumentos para os comandos no módulo Az e nos módulos AzureRm são substancialmente idênticos. Para saber mais sobre a compatibilidade entre eles, confira Apresentação do novo módulo Az do Azure PowerShell.

Para provisionar um administrador do AD do Azure, execute os seguintes comandos do Azure PowerShell:

  • Connect-AzAccount
  • Select-AzSubscription

Os cmdlets usados para provisionar e gerenciar o administrador do Azure AD para a Instância Gerenciada de SQL estão listados na tabela a seguir:

Nome do cmdlet Descrição
Set-AzSqlInstanceActiveDirectoryAdministrator Provisiona um administrador do Azure AD para a Instância Gerenciada de SQL na assinatura atual. (Precisa ser da assinatura atual.)
Remove-AzSqlInstanceActiveDirectoryAdministrator Remove um administrador do Azure AD para a Instância Gerenciada de SQL na assinatura atual.
Get-AzSqlInstanceActiveDirectoryAdministrator Retorna informações sobre um administrador do Azure AD para a Instância Gerenciada de SQL na assinatura atual.

O comando a seguir obtém informações sobre um administrador do Azure AD para uma Instância Gerenciada de SQL denominada ManagedInstance01, que está associada a um grupo de recursos chamado de ResourceGroup01.

Get-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstance01"

O comando a seguir provisiona um grupo de administradores do Azure AD chamado de DBAs para a Instância Gerenciada de SQL denominada ManagedInstance01. Este servidor está associado ao grupo de recursos ResourceGroup01.

Set-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstance01" -DisplayName "DBAs" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353b"

O comando a seguir remove o administrador do Azure AD para a Instância Gerenciada de SQL denominada ManagedInstanceName01, associada ao grupo de recursos ResourceGroup01.

Remove-AzSqlInstanceActiveDirectoryAdministrator -ResourceGroupName "ResourceGroup01" -InstanceName "ManagedInstanceName01" -Confirm -PassThru

Provisionar um administrador do Azure AD (Banco de Dados SQL)

Importante

Somente siga estas etapas se estiver provisionando um servidor para o Banco de Dados SQL ou o Azure Synapse.

Os dois procedimentos a seguir mostram como provisionar um administrador do Azure Active Directory para seu servidor no Portal do Azure usando o PowerShell.

Portal do Azure

  1. No portal do Azure, no canto superior direito, selecione a conexão para exibir uma lista suspensa dos Active Directories possíveis. Escolha o Active Directory correto como o AD do Azure padrão. Esta etapa vincula o Active Directory associado à assinatura ao servidor, verificando se a mesma assinatura é usada no Azure AD e no servidor.

  2. Pesquise e selecione servidores SQL.

    Search for and select SQL servers

    Observação

    Nessa página, antes você selecionar SQL servers, você pode selecionar a estrela ao lado do nome para estabelecer a categoria como favorito e adicionar SQL serversà barra de navegação à esquerda.

  3. Na página SQL Server, selecione Administrador do Active Directory.

  4. Na página Administrador do Active Directory, selecione Definir administrador.

    SQL servers set Active Directory admin

  5. Na página Adicionar administrador, pesquise um usuário, selecione o usuário ou grupo que será um administrador e, em seguida, selecione Selecionar. A página de administração do Active Directory mostra todos os membros e grupos do Active Directory. Usuários ou grupos que estão esmaecidos não podem ser selecionados porque eles não têm suporte como administradores do AD do Azure. (Consulte a lista de administradores com suporte na seção Recursos e limitações do Azure AD da opção Usar a Autenticação do Azure Active Directory para autenticação com o Banco de Dados SQL ou o Azure Synapse .) O Azure RBAC (controle de acesso baseado em função) aplica-se somente ao portal e não é propagado para o SQL Server.

    Select Azure Active Directory admin

  6. Na parte superior da página Administrador do Active Directory, selecione Salvar.

    save admin

    Para usuários e grupos do Azure AD, a ID do objeto é exibida ao lado do nome do administrador. Para aplicativos (entidades de serviço), a ID do aplicativo é exibida.

O processo de alteração do administrador pode levar vários minutos. O novo administrador aparece na caixa Administrador do Active Directory .

Observação

Ao configurar o administrador do Azure AD, o novo nome de administrador (usuário ou grupo) não pode existir no banco de dados mestre virtual como um usuário de autenticação do servidor. Se presente, a configuração de administração do AD do Azure falhará, revertendo sua criação e indicando que esse administrador (nome) já existe. Como esse usuário de autenticação do servidor não é parte do Azure AD, ocorrerá uma falha em qualquer conexão ao servidor usando a autenticação do Azure AD.

Para remover um Administrador mais tarde, na parte superior da página Administrador do Active Directory, selecione Remover administrador e, em seguida, selecione Salvar.

PowerShell para o Banco de Dados SQL e o Azure Synapse

Para executar os cmdlets do PowerShell, você precisa ter o Azure PowerShell instalado e em execução. Para obter informações detalhadas, confira Como instalar e configurar o PowerShell do Azure. Para provisionar um administrador do AD do Azure, execute os seguintes comandos do Azure PowerShell:

  • Connect-AzAccount
  • Select-AzSubscription

Os cmdlets usados para provisionar e gerenciar o administrador do Azure AD para o Banco de Dados SQL e o Azure Synapse:

Nome do cmdlet Descrição
Set-AzSqlServerActiveDirectoryAdministrator Provisiona um administrador do Azure Active Directory para o servidor que hospeda o banco de dados SQL ou o Azure Synapse. (Precisa ser da assinatura atual.)
Remove-AzSqlServerActiveDirectoryAdministrator Remove um administrador do Azure Active Directory do servidor que hospeda o banco de dados SQL ou o Azure Synapse.
Get-AzSqlServerActiveDirectoryAdministrator Retorna informações sobre um administrador do Azure Active Directory atualmente configurado para o servidor que hospeda o banco de dados SQL ou o Azure Synapse.

Use o comando get-help do PowerShell para ver mais informações sobre cada um desses comandos. Por exemplo, get-help Set-AzSqlServerActiveDirectoryAdministrator.

O seguinte script provisiona um grupo de administradores do Azure AD nomeado DBA_Group (ID de objeto 40b79501-b343-44ed-9ce7-da4c8cc7353f) para o servidor demo_server em um grupo de recursos nomeado Group-23:

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" -DisplayName "DBA_Group"

O parâmetro de entrada DisplayName aceita o nome de exibição do Azure AD ou o Nome UPN. Por exemplo, DisplayName="John Smith" e DisplayName="johns@contoso.com". Para grupos do AD do Azure, há suporte apenas para o nome de exibição do AD do Azure.

Observação

O comando Set-AzSqlServerActiveDirectoryAdministrator do Azure PowerShell não impede que você provisione administradores do Azure AD para usuários sem suporte. Um usuário para o qual não há suporte pode ser provisionado, mas não pode se conectar a um banco de dados.

O seguinte exemplo usa a ObjectIDopcional:

Set-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" `
    -DisplayName "DBA_Group" -ObjectId "40b79501-b343-44ed-9ce7-da4c8cc7353f"

Observação

A ObjectID do Azure AD é necessária quando o DisplayName não é exclusivo. Para recuperar os valores de ObjectID e DisplayName, use a seção do Active Directory do Portal Clássico do Azure e exiba as propriedades de um usuário ou grupo.

O exemplo a seguir retorna informações sobre o administrador atual do Azure AD para o servidor:

Get-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server" | Format-List

O seguinte exemplo remove um administrador do AD do Azure:

Remove-AzSqlServerActiveDirectoryAdministrator -ResourceGroupName "Group-23" -ServerName "demo_server"

Observação

Você também pode provisionar um administrador do Azure Active Directory usando as APIs REST. Para obter mais informações, confira Referência da API REST de Gerenciamento de Serviços e Operações do Banco de Dados SQL do Azure

Configurar os computadores cliente

Observação

O System.Data.SqlClient usa a ADAL (Biblioteca de Autenticação do Azure Active Directory), que será preterida. Se você estiver usando o namespace System.Data.SqlClient para autenticação do Azure Active Directory, migre os aplicativos para Microsoft.Data.SqlClient e para a MSAL (Biblioteca de Autenticação da Microsoft). Para obter mais informações sobre como usar a autenticação do Azure AD com o SqlClient, consulte Usar a autenticação do Azure Active Directory com o SqlClient.

SSMS e SSDT ainda usam a ADAL (Biblioteca de Autenticação do Azure Active Directory). Se quiser continuar usando ADAL.DLL em seus aplicativos, você poderá usar os links nesta seção para instalar os drivers SSMS, ODBC e OLE DB mais recentes que contêm a biblioteca ADAL.DLL mais recente.

Em todos os computadores cliente, a partir dos quais seus aplicativos ou usuários se conectam ao Banco de Dados SQL ou ao Azure Synapse usando identidades do Azure AD, você deve instalar o software a seguir:

Você pode atender a esses requisitos:

  • A instalação da versão mais recente do SQL Server Management Studio ou do SQL Server Data Tools atende aos requisitos do .NET Framework 4.6.
    • O SSMS instala a versão x86 do ADAL.DLL.
    • O SSDT instala a versão amd64 do ADAL.DLL.
    • O Visual Studio mais recente dos downloads do Visual Studio atende ao requisito do .NET Framework 4.6, mas não instala a versão amd64 necessária do ADAL.DLL.

Criar usuários contidos mapeados para identidades do Azure AD

Como a Instância Gerenciada de SQL dá suporte a entidades de segurança do servidor do Azure AD (logons), não é necessário o uso de usuários de banco de dados independente. As entidades de segurança do servidor do Azure AD (logons) permitem criar logons de usuários, grupos ou aplicativos do Azure AD. Isso significa que você pode autenticar com a Instância Gerenciada de SQL usando o logon de servidor do Azure AD, em vez de um usuário de banco de dados independente. Para obter mais informações, confira Visão geral da Instância Gerenciada de SQL. Para obter a sintaxe na criação de entidades de segurança do servidor do Azure AD (logons), consulte CREATE LOGIN.

No entanto, usar a autenticação do Azure Active Directory com o Banco de Dados SQL e o Azure Synapse requer o uso de usuários de banco de dados independente com base em uma identidade do Azure AD. Um usuário de banco de dados independente não tem um logon no banco de dados mestre e é mapeado para uma identidade no Azure AD associada ao banco de dados. A identidade do AD do Azure pode ser uma conta de usuário individual ou um grupo. Para saber mais sobre usuários de bancos de dados independentes, veja Usuários do bancos de dados independentes - Tornando seu banco de dados portátil.

Observação

Os usuários do banco de dados (com exceção dos administradores) não podem ser criados usando o portal do Azure. As funções do Azure não são propagadas para o banco de dados do Banco de Dados SQL, da Instância Gerenciada de SQL ou do Azure Synapse. As funções do Azure são usadas para gerenciar Recursos do Azure e não se aplicam às permissões de banco de dados. Por exemplo, a função Colaborador do SQL Server não concede acesso para a conexão ao banco de dados do Banco de Dados SQL, da Instância Gerenciada de SQL ou do Azure Synapse. A permissão de acesso deve ser concedida diretamente no banco de dados usando instruções Transact-SQL.

Aviso

Não há suporte para caracteres especiais, como dois-pontos : ou E comercial &, em nomes de usuário nas instruções de T-SQL CREATE LOGIN e CREATE USER.

Importante

Os usuários e as entidades de serviço do Azure Active Directory (aplicativos do Azure AD) que são membros de mais de 2048 grupos de segurança do Azure AD não podem fazer logon no banco de dados na Instância Gerenciada, no Banco de Dados SQL, nem no Azure Synapse.

Para criar um usuário de banco de dados independente baseado no Azure AD (que não seja o administrador do servidor proprietário do banco de dados), conecte-se ao banco de dados com uma identidade do Azure AD como um usuário com, no mínimo, a permissão ALTER ANY USER . Em seguida, use a sintaxe Transact-SQL a seguir:

CREATE USER [<Azure_AD_principal_name>] FROM EXTERNAL PROVIDER;

nome_UPN_Azure_AD pode ser o nome UPN de um usuário do Azure AD ou o nome de exibição de um grupo do Azure AD.

Exemplos: para criar um usuário de banco de dados independente que representa um usuário de domínio federado ou gerenciado pelo Azure AD:

CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;

Para criar um usuário de banco de dados independente que represente um grupo de domínio do AD do Azure AD ou federado, forneça o nome para exibição de um grupo de segurança:

CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;

Para criar um usuário de banco de dados independente que representa um aplicativo que se conectará usando um token do Azure AD:

CREATE USER [appName] FROM EXTERNAL PROVIDER;

Observação

Esse comando requer que o SQL acesse o Azure AD (o "provedor externo") em nome do usuário conectado. Às vezes, ocorrerão circunstâncias que farão com que o Azure AD retorne uma exceção para o SQL. Nesses casos, o usuário verá o erro 33134 do SQL, que deve conter a mensagem de erro específica do Azure AD. Na maioria das vezes, o erro dirá que o acesso foi negado ou que o usuário deve se inscrever na MFA para acessar o recurso, ou que o acesso entre aplicativos primários deve ser realizado por meio de uma autorização prévia. Nos dois primeiros casos, o problema geralmente é causado pelas políticas de Acesso condicional que são definidas no locatário do Azure AD do usuário: elas impedem que o usuário acesse o provedor externo. Atualizar as políticas de Acesso condicional para permitir o acesso ao aplicativo '00000003-0000-0000-c000-000000000000' (a ID de aplicativo da API do Microsoft Graph) deve resolver o problema. Caso o erro diga que o acesso entre os aplicativos primários deve ser realizado por meio de autorização, o problema ocorrerá porque o usuário está conectado como uma entidade de serviço. O comando deverá ter sucesso se for executado por um usuário.

Dica

Não é possível criar um usuário diretamente de um Azure Active Directory que não seja o Azure Active Directory associado à sua assinatura do Azure. No entanto, os membros de outros Active Directories que são os usuários importados no Active Directory associado (conhecidos como usuários externos) podem ser adicionados a um grupo do Active Directory no Active Directory locatário. Ao criar um usuário de banco de dados independente para esse grupo AD, os usuários do Active Directory externo podem obter acesso ao Banco de Dados SQL.

Para obter mais informações sobre como criar usuários de banco de dados independente baseados em identidades do Active Directory do Azure, consulte CRIAR USUÁRIO (Transact-SQL).

Observação

Remover o administrador do Azure Active Directory do servidor impede que qualquer usuário da autenticação do Azure AD se conecte ao servidor. Se for necessário, os usuários do Azure AD inutilizáveis poderão ser removidos manualmente por um administrador do Banco de Dados SQL.

Observação

Se você receber um Tempo Limite de Conexão Expirado, talvez seja necessário definir o parâmetro TransparentNetworkIPResolution da cadeia de conexão como falso. Para obter mais informações, consulte Problema de tempo limite de conexão com o .NET Framework 4.6.1 – TransparentNetworkIPResolution.

Quando você cria um usuário de banco de dados, o usuário recebe a permissão CONNECT e pode se conectar a esse banco de dados como membro da função PUBLIC. Inicialmente, as únicas permissões disponíveis para o usuário são as permissões concedidas à função PUBLIC ou as permissões concedidas a quaisquer grupos do Azure AD dos quais esse usuário é membro. A partir do momento que você provisionar um usuário de banco de dados independente baseado no AD do Azure, você pode conceder ao usuário permissões adicionais, do mesmo modo que você concede permissões para qualquer outro tipo de usuário. Normalmente, conceda permissões para funções de banco de dados e adicione usuários a funções. Para saber mais, confira Noções básicas sobre permissões do Mecanismo de Banco de Dados. Para obter mais informações sobre funções especiais do Banco de dados SQL, veja Gerenciando bancos de dados e logons no Banco de Dados SQL do Azure. Uma conta de usuário de domínio federado que é importado para um domínio gerenciado como um usuário externo deve usar a identidade do domínio gerenciado.

Observação

Usuários do AD do Azure são marcados nos metadados do banco de dados com tipo E (EXTERNAL_USER) e para grupos com o tipo X (EXTERNAL_GROUPS). Para obter mais informações, consulte sys.database_principals.

Conectar-se ao banco de dados usando o SSMS ou SSDT.

Para confirmar que o administrador do Azure AD está configurado corretamente, conecte-se ao banco de dados mestre usando a conta de administrador do Azure AD. Para provisionar um usuário de banco de dados independente com base no Azure AD (que não seja o administrador do servidor que é o proprietário do banco de dados), conecte-se ao banco de dados com uma identidade do Azure AD que tenha acesso ao banco de dados.

Importante

O suporte para autenticação do Azure Active Directory está disponível com SSMS (SQL Server Management Studio) a partir de 2016 e SQL Server Data Tools a partir de 2015. A versão de agosto de 2016 do SSMS também inclui suporte para Universal autenticação do Active Directory, que permite aos administradores exigir Autenticação Multifator utilizando uma chamada telefônica, mensagem de texto, os cartões inteligentes com PIN ou a notificação de aplicativo móvel.

Usando uma identidade do Azure AD para se conectar usando SSMS ou SSDT

Os procedimentos a seguir mostram como se conectar ao Banco de Dados SQL com uma identidade do Azure AD usando o SQL Server Management Studio ou o SQL Server Data Tools.

Autenticação integrada do Active Directory

Use este método se você estiver conectado ao Windows usando suas credenciais do Azure Active Directory de um domínio federado ou gerenciado, configurado para logon único contínuo para autenticação de passagem e de hash de senha. Para saber mais, confira Logon Único Contínuo do Azure Active Directory.

  1. Inicie o Management Studio ou o Data Tools e, na caixa de diálogo Conectar ao Servidor (ou Conectar ao Mecanismo de Banco de Dados), na caixa Autenticação, selecione Azure Active Directory - Integrado. Nenhuma senha é necessária ou pode ser inserida porque suas credenciais existentes serão apresentadas para a conexão.

    Select AD Integrated Authentication

  2. Selecione o botão Opções e, na página Propriedades de Conexão, na caixa Conectar ao banco de dados, digite o nome do banco de dados de usuário ao qual você deseja se conectar. Para obter mais informações, confira o artigo Autenticação multifator do Azure AD sobre as diferenças entre as propriedades de conexão para o SSMS 17.x e 18.x.

    Select the database name

Autenticação de senha do Active Directory

Use esse método ao se conectar com um nome de entidade do AD do Azure usando o domínio gerenciado pelo Azure AD. Você também pode usá-lo para contas federadas sem acesso ao domínio, por exemplo, ao trabalhar remotamente.

Use esse método para fazer a autenticação no banco de dados do Banco de Dados SQL ou da Instância Gerenciada de SQL com usuários de identidade somente na nuvem do Azure AD ou com aqueles que usam identidades híbridas do Azure AD. Esse método dá suporte a usuários que desejam usar suas credenciais do Windows, mas o computador local não está conectado ao domínio (por exemplo, usando acesso remoto). Nesse caso, um usuário do Windows pode indicar sua conta de domínio e senha e fazer a autenticação no banco de dados do Banco de Dados SQL, da Instância Gerenciada de SQL ou do Azure Synapse.

  1. Inicie o Management Studio ou o Data Tools e, na caixa de diálogo Conectar ao Servidor (ou Conectar ao Mecanismo de Banco de Dados), na caixa Autenticação, selecione Azure Active Directory - Senha.

  2. Na caixa Nome de usuário, digite seu nome de usuário do Azure Active Directory no formato username@domain.com. Os nomes de usuário devem ser uma conta do Azure Active Directory ou uma conta de um domínio gerenciado ou federado com o Azure Active Directory.

  3. Na caixa Senha, digite sua senha de usuário para a conta do Azure Active Directory ou conta de domínio gerenciado/federado.

    Select AD Password Authentication

  4. Selecione o botão Opções e, na página Propriedades de Conexão, na caixa Conectar ao banco de dados, digite o nome do banco de dados de usuário ao qual você deseja se conectar. (Confira o gráfico na opção anterior.)

Autenticação interativa do Active Directory

Use esse método para autenticação interativa com ou sem MFA (autenticação multifator), com a senha solicitada interativamente. Esse método pode ser usado para autenticar o banco de dados do Banco de Dados SQL, da Instância Gerenciada de SQL ou do Azure Synapse para usuários de identidade somente na nuvem do Azure AD ou para aqueles que usam identidades híbridas do Azure AD.

Para obter mais informações, confira Usar a autenticação multifator do Azure AD com o Banco de Dados SQL e o Azure Synapse (suporte de SSMS para MFA) .

Usando uma identidade do Azure AD para conectar-se de um aplicativo cliente

Os procedimentos a seguir mostram como se conectar a um Banco de Dados SQL com uma identidade do Azure AD de um aplicativo cliente.

Autenticação integrada do Active Directory

Para usar a autenticação integrada do Windows, o Active Directory do seu domínio deve ser federado com o Azure Active Directory, ou deve ser um domínio gerenciado, configurado para logon único contínuo para a autenticação de passagem ou de hash de senha. Para saber mais, confira Logon Único Contínuo do Azure Active Directory.

O aplicativo cliente (ou um serviço) que se conecta ao banco de dados deve estar em execução em um computador conectado ao domínio com as credenciais de domínio do usuário.

Para conectar-se a um banco de dados usando a autenticação integrada e uma identidade do AD do Azure, a palavra-chave de Autenticação na cadeia de conexão de banco de dados deve ser definida como Active Directory Integrated. O exemplo de código em C# a seguir usa ADO .NET.

string ConnectionString = @"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Integrated; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

Para a conexão ao Banco de Dados SQL do Azure, não há suporte para a palavra-chave de cadeia de conexão Integrated Security=True. Ao realizar uma conexão ODBC, você precisará remover espaços e configurar a autenticação para 'ActiveDirectoryIntegrated'.

Autenticação de senha do Active Directory

Para se conectar a um banco de dados usando contas de usuário de identidade somente na nuvem do Azure AD, ou aqueles que usam identidades híbridas do Azure AD, a palavra-chave de autenticação deve ser definida como Active Directory Password. A cadeia de conexão deve conter valores e palavras-chave de ID/UID de Usuário e Senha/PWD. O exemplo de código em C# a seguir usa ADO .NET.

string ConnectionString =
@"Data Source=n9lxnyuzhv.database.windows.net; Authentication=Active Directory Password; Initial Catalog=testdb;  UID=bob@contoso.onmicrosoft.com; PWD=MyPassWord!";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();

Saiba mais sobre métodos de autenticação do Azure AD usando os exemplos de código de demonstração disponíveis em Demonstração do GitHub de Autenticação do Azure AD.

Token do Azure AD

Esse método de autenticação permite que os serviços de nível intermediário obtenham JWT (tokens Web JSON) para se conectar ao banco de dados do Banco de Dados SQL, da Instância Gerenciada de SQL ou do Azure Synapse, obtendo um token do Azure AD. Esse método permite vários cenários de aplicativo, incluindo identidades de serviço, entidades de serviço e aplicativos que usam a autenticação baseada em certificado. Você precisa concluir quatro etapas básicas para usar a autenticação de token do Azure AD:

  1. Registre o aplicativo no Azure Active Directory e obtenha a ID do cliente para seu código.
  2. Criar um usuário de banco de dados que representa o aplicativo. (Concluída anteriormente na etapa 6).
  3. Crie um certificado no computador cliente que executa o aplicativo.
  4. Adicionar o certificado como uma chave para seu aplicativo.

Exemplo de cadeia de conexão:

string ConnectionString = @"Data Source=n9lxnyuzhv.database.windows.net; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.AccessToken = "Your JWT token";
conn.Open();

Para obter mais informações, confira Blog de segurança do SQL Server. Para obter informações sobre como adicionar um certificado, consulte Introdução à autenticação baseada em certificado no Azure Active Directory.

sqlcmd

As instruções a seguir, conexão usando a versão 13.1 do sqlcmd, que está disponível no Centro de Download.

Observação

sqlcmd com o comando -G não funciona com as identidades do sistema e requer um logon principal do usuário.

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G  
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -U bob@contoso.com -P MyAADPassword -G -l 30

Solucionar problemas de autenticação do Azure AD

A orientação sobre solução de problemas com a autenticação do Azure AD pode ser encontrada no seguinte blog: https://techcommunity.microsoft.com/t5/azure-sql-database/troubleshooting-problems-related-to-azure-ad-authentication-with/ba-p/1062991

Próximas etapas