Using Microsoft Entra ID

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

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 ou à Instância Gerenciada de SQL do Azure usando uma identidade federada. Os novos 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();
}

Próximas etapas