Compartilhar via


Usar a ID do Microsoft Entra

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise de SQL no Microsoft FabricDepósito no Microsoft FabricBanco de dados SQL no Microsoft Fabric

Baixar o driver do OLE DB

Finalidade

Na versão 18.2.1, o Driver do Microsoft OLE DB para SQL Server permite que aplicativos OLE DB se conectem ao Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Azure Synapse Analytics e Microsoft Fabric usando uma identidade federada.

Os métodos de autenticação do Microsoft Entra incluem:

  • Nome de usuário e senha
  • Token de acesso
  • Autenticação integrada

A versão 18.3.0 adiciona suporte para os seguintes métodos de autenticação do Microsoft Entra:

A versão 18.5.0 adiciona suporte para os seguintes métodos de autenticação:

  • Autenticação de entidade de serviço do Microsoft Entra

Observação

O uso dos seguintes modos de autenticação DataTypeCompatibility é compatível com o uso de 80 (ou sua propriedade correspondente) definida como :

  • Autenticação do Microsoft Entra usando nome de usuário e senha
  • Autenticação do Microsoft Entra usando token de acesso
  • Autenticação integrada do Microsoft Entra
  • Autenticação interativa do Microsoft Entra
  • Autenticação de identidades gerenciadas pelo Microsoft Entra
  • Autenticação de entidade de serviço do Microsoft Entra

Para usar a autenticação do Microsoft Entra, você precisa configurar sua fonte de dados do SQL do Azure. Para obter mais informações, consulte Configurar e gerenciar a autenticação do Microsoft Entra com o SQL do Azure.

Palavras-chave e propriedades da cadeia de conexão

As seguintes palavras-chave da cadeia de conexão foram introduzidas para dar suporte à autenticação do Microsoft Entra:

Palavras-chave da cadeia de conexão Propriedade Connection Descrição
Token de acesso SSPROP_AUTH_ACCESS_TOKEN Especifica um token de acesso para autenticar no Microsoft Entra ID.
Autenticação SSPROP_AUTH_MODE Especifica método de autenticação a ser usado.

Para obter mais informações sobre as novas palavras-chave/propriedades, confira as seguintes páginas:

Criptografia e validação de certificado

Para obter mais informações, confira Criptografia e validação de certificado.

Adições de GUI

A interface gráfica do usuário do driver foi aprimorada para permitir a autenticação do Microsoft Entra. Para saber mais, veja:

Cadeias de conexão de exemplo

Esta seção mostra exemplos de palavras-chave de cadeia de conexão novas e existentes que serão usadas com IDataInitialize::GetDataSource e a propriedade DBPROP_INIT_PROVIDERSTRING.

Autenticação SQL

  • Usando: IDataInitialize::GetDataSource
    • Novo:

      Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticaação=SqlPassword;ID do usuário=[username];Senha=[password];Usar criptografia para dados=obrigatório

    • Preterido:

      Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];ID do usuário=[username];Senha=[password];Usar criptografia para dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING
    • Novo:

      Servidor=[server];Banco de dados=[database];Autenticação=SqlPassword;UID=[username];Senha=[password];Criptografia=obrigatório

    • Preterido:

      Servidor=[server];Banco de dados=[database];UID=[username];Senha=[password];Criptografia=obrigatório

Autenticação Integrada do Windows usando a interface SSPI

  • Usando: IDataInitialize::GetDataSource
    • Novo:

      Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticação=ActiveDirectoryIntegrated;Usar criptografia para dados=obrigatório

    • Preterido:

      Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Segurança integrada=SSPI;Usar criptografia para dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING
    • Novo:

      Servidor=[server];Banco de dados=[database];Autenticação=ActiveDirectoryIntegrated;Criptografia=obrigatório

    • Preterido:

      Servidor=[server];Banco de dados=[database];Conexão_Confiável=sim;Criptografia=obrigatório

Autenticação por nome de usuário e senha do Microsoft Entra

Observação

A opção de autenticação ActiveDirectoryPassword (Autenticação de Senha Microsoft Entra ID) foi descontinuada.

A senha do Microsoft Entra ID baseia-se na concessão ROPC (Credenciais de Senha do Proprietário do Recurso do OAuth 2.0), que permite que um aplicativo faça login para o usuário manipulando diretamente sua senha.

A Microsoft recomenda que você não use o fluxo ROPC; é incompatível com a MFA (autenticação multifator). Na maioria dos cenários, alternativas mais seguras estão disponíveis e recomendadas. Esse fluxo requer um alto grau de confiança no aplicativo e traz riscos que não estão presentes em outros fluxos. Você só deve usar esse fluxo quando fluxos mais seguros não forem viáveis. A Microsoft está se afastando desse fluxo de autenticação de alto risco para proteger os usuários contra ataques mal-intencionados. Para obter mais informações, consulte Planning for mandatory multifactor authentication for Azure.

Quando o contexto do usuário estiver disponível, use a autenticação ActiveDirectoryInteractive.

Quando o contexto do usuário não estiver disponível e seu aplicativo estiver em execução na infraestrutura do Azure, use ActiveDirectoryMSI (ou ActiveDirectoryManagedIdentity em alguns drivers). A Identidade Gerenciada elimina a sobrecarga de manutenção e rotação de segredos e certificados. Se você não puder usar uma Identidade Gerenciada, use a autenticação do ActiveDirectoryServicePrincipal.

Aviso

Não use a autenticação do Principal de Serviço quando um contexto de usuário estiver disponível. O acesso somente ao aplicativo é inerentemente de alto privilégio, geralmente concedendo acesso a todo o locatário e potencialmente permitindo que um ator incorreto acesse os dados do cliente para qualquer usuário.

  • Usando: IDataInitialize::GetDataSource

    Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticação=ActiveDirectoryPassword;ID do usuário=[username];Senha=[password];Usar criptografia para dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Servidor=[server];Banco de dados=[database];Autenticação=ActiveDirectoryPassword;UID=[username];Senha=[password];Criptografia=obrigatório

Autenticação integrada do Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticação=ActiveDirectoryIntegrated;Usar criptografia para dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Servidor=[server];Banco de dados=[database];Autenticação=ActiveDirectoryIntegrated;Criptografia=obrigatório

Autenticação do Microsoft Entra usando um token de acesso

  • Usando: IDataInitialize::GetDataSource

    Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Token de acesso=[access token] ;Usar criptografia para dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING

    O fornecimento de um token de acesso por meio de DBPROP_INIT_PROVIDERSTRING não é um procedimento compatível

Autenticação interativa do Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticaçaõ=ActiveDirectoryInteractive;ID do usuário=[username];Usar criptografia para dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Servidor=[servidor];Banco de dados=[banco de dados];Autenticação=ActiveDirectoryInteractive;UID=[nome de usuário];Criptografia=sim

Autenticação de identidade gerenciada pelo Microsoft Entra

  • Usando: IDataInitialize::GetDataSource
    • Identidade gerenciada atribuída pelo usuário:

      Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticação=ActiveDirectoryMSI;ID do usuário=[Object ID];Usar criptografia de dados=obrigatório

    • Identidade gerenciada atribuída pelo sistema:

      Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticação=ActiveDirectoryMSI;Usar criptografia de dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING
    • Identidade gerenciada atribuída pelo usuário:

      Servidor=[servidor];Banco de dados=[banco de dados];Autenticação=ActiveDirectoryMSI;UID=[ID do Objeto];Criptografia=obrigatório

    • Identidade gerenciada atribuída pelo sistema:

      Servidor=[server];Banco de dados=[database];Autenticação=ActiveDirectoryMSI;Criptografia=obrigatório

Autenticação de entidade de serviço do Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provedor=MSOLEDBSQL19;Fonte de dados=[server];Catálogo inicial=[database];Autenticação=ActiveDirectoryServicePrincipal;ID do usuário=[Application (client) ID];Senha=[Application (client) secret];Usar criptografia de dados=obrigatório

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Servidor=[server];Banco de dados=[database];Autenticação=ActiveDirectoryServicePrincipal;UID=[Application (client) ID];Senha=[Application (client) secret];Criptografia=obrigatório

Exemplos de código

Os exemplos a seguir mostram o código necessário para se conectar ao Microsoft Entra ID com palavras-chave de conexão.

Token de acesso

#include <string>
#include <iostream>
#include <msdasc.h>

int main()
{
    wchar_t azureServer[] = L"server";
    wchar_t azureDatabase[] = L"mydatabase";
    wchar_t accessToken[] = L"eyJ0eXAiOi...";
    IDBInitialize *pIDBInitialize = nullptr;
    IDataInitialize* pIDataInitialize = nullptr;
    HRESULT hr = S_OK;

    CoInitialize(nullptr);

    // Construct the connection string.
    std::wstring connString = L"Provider=MSOLEDBSQL19;Data Source=" + std::wstring(azureServer) + L";Initial Catalog=" + 
                              std::wstring(azureDatabase) + L";Access Token=" + accessToken + L";Use Encryption for Data=Mandatory;";
    hr = CoCreateInstance(CLSID_MSDAINITIALIZE, nullptr, CLSCTX_INPROC_SERVER, 
                          IID_IDataInitialize, reinterpret_cast<LPVOID*>(&pIDataInitialize));
    if (FAILED(hr))
    {
        std::cout << "Failed to create an IDataInitialize instance." << std::endl;
        goto Cleanup;
    }
    hr = pIDataInitialize->GetDataSource(nullptr, CLSCTX_INPROC_SERVER, connString.c_str(), 
                                         IID_IDBInitialize, reinterpret_cast<IUnknown**>(&pIDBInitialize));
    if (FAILED(hr))
    {
        std::cout << "Failed to get data source object." << std::endl;
        goto Cleanup;
    }
    hr = pIDBInitialize->Initialize();
    if (FAILED(hr))
    {
        std::cout << "Failed to establish connection." << std::endl;
        goto Cleanup;
    }

Cleanup:
    if (pIDBInitialize)
    {
        pIDBInitialize->Uninitialize();
        pIDBInitialize->Release();
    }
    if (pIDataInitialize)
    {
        pIDataInitialize->Release();
    }

    CoUninitialize();
}

Integrado ao Active Directory

#include <string>
#include <iostream>
#include <msdasc.h>

int main()
{
    wchar_t azureServer[] = L"server";
    wchar_t azureDatabase[] = L"mydatabase";
    IDBInitialize *pIDBInitialize = nullptr;
    IDataInitialize* pIDataInitialize = nullptr;
    HRESULT hr = S_OK;

    CoInitialize(nullptr);

    // Construct the connection string.
    std::wstring connString = L"Provider=MSOLEDBSQL19;Data Source=" + std::wstring(azureServer) + L";Initial Catalog=" + 
                              std::wstring(azureDatabase) + L";Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory;";

    hr = CoCreateInstance(CLSID_MSDAINITIALIZE, nullptr, CLSCTX_INPROC_SERVER, 
                          IID_IDataInitialize, reinterpret_cast<LPVOID*>(&pIDataInitialize));
    if (FAILED(hr)) 
    {
        std::cout << "Failed to create an IDataInitialize instance." << std::endl;
        goto Cleanup;
    }
    hr = pIDataInitialize->GetDataSource(nullptr, CLSCTX_INPROC_SERVER, connString.c_str(), 
                                         IID_IDBInitialize, reinterpret_cast<IUnknown**>(&pIDBInitialize));
    if (FAILED(hr))
    {
        std::cout << "Failed to get data source object." << std::endl;
        goto Cleanup;
    }
    hr = pIDBInitialize->Initialize();
    if (FAILED(hr))
    {
        std::cout << "Failed to establish connection." << std::endl;
        goto Cleanup;
    }

Cleanup:
    if (pIDBInitialize)
    {
        pIDBInitialize->Uninitialize();
        pIDBInitialize->Release();
    }
    if (pIDataInitialize)
    {
        pIDataInitialize->Release();
    }

    CoUninitialize();
}