Partilhar via


Usar o Microsoft Entra ID

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Baixar driver OLE DB

Propósito

A partir da versão 18.2.1, o Microsoft OLE DB Driver for SQL Server permite que aplicações OLE DB se liguem ao Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics e Microsoft Fabric usando uma identidade federada .

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

  • Nome de utilizador e palavra-passe
  • Token de acesso
  • Autenticação integrada

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

A versão 18.5.0 adiciona suporte para o seguinte método de autenticação:

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

Observação

Utilizar os seguintes modos de autenticação com DataTypeCompatibility (ou a sua propriedade correspondente) definido como 80não é suportado:

  • Autenticação Microsoft Entra usando nome de utilizador e palavra-passe
  • Autenticação do Microsoft Entra com token de acesso
  • Autenticação integrada do Microsoft Entra
  • Autenticação interativa Microsoft Entra
  • Autenticação de identidades geridas por Microsoft Entra
  • Autenticação do serviço principal Microsoft Entra

Para utilizar a autenticação Microsoft Entra, deve configurar a sua fonte de dados Azure SQL. Para obter mais informações, consulte Configurar e gerir a autenticação do Microsoft Entra com o Azure SQL.

Palavras-chave e propriedades da cadeia de ligação

As seguintes palavras-chave de cadeia de ligação foram introduzidas para suportar a autenticação Microsoft Entra:

Palavra-chave de cadeia de ligação Propriedade de Conexão Description
Token de Acesso SSPROP_AUTH_ACCESS_TOKEN Especifica um token de acesso para autenticação ao Microsoft Entra ID.
Authentication SSPROP_AUTH_MODE Especifica o método de autenticação a utilizar.

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

Criptografia e validação de certificado

Consulte Encriptação e validação de certificados para mais informações.

Adições à interface gráfica

A interface gráfica do driver foi melhorada para permitir a autenticação Microsoft Entra. Para obter mais informações, consulte:

Exemplo de cadeias de conexão

Esta secção mostra exemplos de palavras-chave de cadeias de conexão existentes e novas a serem usadas com as propriedades IDataInitialize::GetDataSource e DBPROP_INIT_PROVIDERSTRING.

Autenticação SQL

  • Usando IDataInitialize::GetDataSource:
    • Novo:

      Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=SQLPassword; ID de utilizador=[nome de utilizador]; Palavra-passe=[palavra-passe]; Usar Encriptação para Dados=Obrigatório

    • Descontinuado:

      Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; ID de utilizador=[nome de utilizador]; Palavra-passe=[palavra-passe]; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:
    • Novo:

      Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=SQLPassword; UID=[nome de utilizador]; PWD=[palavra-passe]; Encriptação=Obrigatório

    • Descontinuado:

      Servidor=[servidor]; Base de dados=[base de dados]; UID=[nome de utilizador]; PWD=[palavra-passe]; Encriptação=Obrigatório

Autenticação integrada do Windows usando a Interface do Provedor de Suporte de Segurança (SSPI)

  • Usando IDataInitialize::GetDataSource:
    • Novo:

      Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryIntegrated; Usar Encriptação para Dados=Obrigatório

    • Descontinuado:

      Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Segurança Integrada=SSPI; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:
    • Novo:

      Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryIntegrated; Encriptação=Obrigatório

    • Descontinuado:

      Servidor=[servidor]; Base de dados=[base de dados]; Trusted_Connection=sim; Encriptação=Obrigatório

Autenticação por nome de utilizador e palavra-passe Microsoft Entra

  • Usando IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryPassword; ID de utilizador=[nome de utilizador]; Palavra-passe=[palavra-passe]; Usar Encriptação para Dados=Obrigatória

  • Usando DBPROP_INIT_PROVIDERSTRING:

    Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryPassword; UID=[nome de utilizador]; PWD=[palavra-passe]; Encrypt=Mandatory

Autenticação integrada do Microsoft Entra

  • Usando IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryIntegrated; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:

    Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryIntegrated; Encriptação=Obrigatório

Autenticação Microsoft Entra usando um token de acesso

  • Usando IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Access Token=[access token]; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:

    Fornecer token de acesso através de DBPROP_INIT_PROVIDERSTRING não é suportado

Autenticação interativa Microsoft Entra

  • Usando IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryInteractive; ID de utilizador=[nome de utilizador]; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:

    Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryInteractive; UID=[nome de utilizador]; Encriptação=Obrigatório

Autenticação de identidade gerida pelo Microsoft Entra

  • Usando IDataInitialize::GetDataSource:
    • Identidade gerida atribuída pelo utilizador:

      Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryMSI; ID do utilizador=[ID do objeto]; Usar Encriptação para Dados=Obrigatório

    • Identidade gerida atribuída ao sistema:

      Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryMSI; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:
    • Identidade gerida atribuída pelo utilizador:

      Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryMSI; UID=[ID do objeto]; Encriptação=Obrigatório

    • Identidade gerida atribuída pelo sistema

      Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryMSI; Encriptação=Obrigatório

Autenticação do Microsoft Entra service principal

  • Usando IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Data Source=[servidor]; Catálogo Inicial=[base de dados]; Autenticação=ActiveDirectoryServicePrincipal; ID do utilizador=[ID da aplicação (cliente)]; Password=[Application (cliente) secreto]; Usar Encriptação para Dados=Obrigatório

  • Usando DBPROP_INIT_PROVIDERSTRING:

    Servidor=[servidor]; Base de dados=[base de dados]; Autenticação=ActiveDirectoryServicePrincipal; UID=[ID da aplicação (cliente]; PWD=[Secreto da aplicação (cliente)]; Encriptação=Obrigatório

Exemplos de código

Os exemplos seguintes mostram o código necessário para se ligar ao Microsoft Entra ID com palavras-chave de ligaçã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();
}

Active Directory Integrado

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