Usar a ID do Microsoft Entra

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse 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 não é compatível com o uso de DataTypeCompatibility (ou sua propriedade correspondente) definida como 80:

  • 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

  • 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();
}