Usare Microsoft Entra ID

Si applica a:SQL Serverdatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Download del driver OLE DB

Scopo

A partire dalla versione 18.2.1, Microsoft OLE DB Driver per SQL Server consente alle applicazioni OLE DB di connettersi a un'istanza gestita di SQL di Azure usando un'identità federata. I nuovi metodi di autenticazione di Microsoft Entra includono:

  • Nome utente e password

  • Token di accesso

  • Autenticazione integrata

La versione 18.3.0 aggiunge il supporto dei seguenti metodi di autenticazione per Microsoft Entra:

La versione 18.5.0 aggiunge il supporto dei metodi di autenticazione seguenti:

  • Autenticazione dell’entità servizio di Microsoft Entra

Nota

L'uso delle modalità di autenticazione seguenti con DataTypeCompatibility (o la proprietà corrispondente) impostata su 80non è supportato:

  • Autenticazione Microsoft Entra con nome utente e password
  • Autenticazione Microsoft Entra ID con token di accesso
  • Autenticazione integrata di Microsoft Entra
  • Autenticazione interattiva di Microsoft Entra
  • Autenticazione delle identità gestite di Microsoft Entra
  • Autenticazione dell’entità servizio di Microsoft Entra

Per usare l'autenticazione di Microsoft Entra, è necessario configurare l'origine dati Azure SQL. Per altre informazioni, vedere Configurare e gestire l'autenticazione di Microsoft Entra con Azure SQL.

Parole chiave e proprietà delle stringhe di connessione

Per supportare l'autenticazione di Microsoft Entra Directory sono state introdotte le seguenti parole chiave della stringa di connessione:

Parola chiave stringa di connessione Proprietà di connessione Descrizione
Token di accesso SSPROP_AUTH_ACCESS_TOKEN Specifica un token di accesso per l'autenticazione in Microsoft Entra ID.
Autenticazione SSPROP_AUTH_MODE Specifica il metodo di autenticazione da usare.

Per altre informazioni sulle nuove parole chiave/proprietà, vedere le pagine seguenti:

Crittografia e convalida di certificati

Per altre informazioni, vedere Crittografia e convalida di certificati.

Aggiunte all'interfaccia utente grafica

L'interfaccia utente grafica del driver è stata migliorata per consentire l'autenticazione di Microsoft Entra. Per altre informazioni, vedi:

Esempi di stringhe di connessione

In questa sezione vengono illustrati esempi di parole chiave della stringa di connessione nuove ed esistenti da usare con la proprietà IDataInitialize::GetDataSource e DBPROP_INIT_PROVIDERSTRING.

Autenticazione SQL

  • Usando: IDataInitialize::GetDataSource
    • Nuovo:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=SqlPassword;User ID=[username];Password=[password];Use Encryption for Data=Mandatory

    • Deprecato:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];User ID=[username];Password=[password];Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING
    • Nuovo:

      Server=[server];Database=[database];Authentication=SqlPassword;UID=[username];PWD=[password];Encrypt=Mandatory

    • Deprecato:

      Server=[server];Database=[database];UID=[username];PWD=[password];Encrypt=Mandatory

Autenticazione integrata di Windows tramite Security Support Provider Interface (SSPI)

  • Usando: IDataInitialize::GetDataSource
    • Nuovo:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory

    • Deprecato:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Integrated Security=SSPI;Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING
    • Nuovo:

      Server=[server];Database=[database];Authentication=ActiveDirectoryIntegrated;Encrypt=Mandatory

    • Deprecato:

      Server=[server];Database=[database];Trusted_Connection=yes;Encrypt=Mandatory

Autenticazione con nome utente e password di Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryPassword;User ID=[username];Password=[password];Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Server=[server];Database=[database];Authentication=ActiveDirectoryPassword;UID=[username];PWD=[password];Encrypt=Mandatory

Autenticazione integrata di Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Server=[server];Database=[database];Authentication=ActiveDirectoryIntegrated;Encrypt=Mandatory

Autenticazione con token di accesso di Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Access Token=[access token];Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING

    L'invio del token di accesso tramite DBPROP_INIT_PROVIDERSTRING non è supportato

Autenticazione interattiva di Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryInteractive;User ID=[username];Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Server=[server];Database=[database];Authentication=ActiveDirectoryInteractive;UID=[username];Encrypt=Mandatory

Autenticazione dell’identità gestita di Microsoft Entra

  • Usando: IDataInitialize::GetDataSource
    • Identità gestita assegnata dall'utente:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryMSI;User ID=[Object ID];Use Encryption for Data=Mandatory

    • Identità gestita assegnata dal sistema:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryMSI;Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING
    • Identità gestita assegnata dall'utente:

      Server=[server];Database=[database];Authentication=ActiveDirectoryMSI;UID=[Object ID];Encrypt=Mandatory

    • Identità gestita assegnata dal sistema:

      Server=[server];Database=[database];Authentication=ActiveDirectoryMSI;Encrypt=Mandatory

Autenticazione dell’entità servizio di Microsoft Entra

  • Usando: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryServicePrincipal;User ID=[Application (client) ID];Password=[Application (client) secret];Use Encryption for Data=Mandatory

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Server=[server];Database=[database];Authentication=ActiveDirectoryServicePrincipal;UID=[Application (client) ID];PWD=[Application (client) secret];Encrypt=Mandatory

Esempi di codice

L'esempio seguente mostra il codice necessario per connettersi a Microsoft Entra ID con le parole chiave di connessione.

Token di accesso

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

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

Passaggi successivi