Condividi tramite


Usare Microsoft Entra ID

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

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 al database SQL di Azure, a un'istanza gestita di SQL di Azure, a Azure Synapse Analytics e a Microsoft Fabric usando un'identità federata.

I metodi di autenticazione 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=SqlPassword; ID utente=[nomeutente]; Password=[password]; Usare la crittografia per Data=Obbligatorio

    • Deprecato:

      Provider=MSOLEDBSQL19; Origine dati=[server]; Initial Catalog=[database]; ID utente=[nomeutente]; Password=[password]; Usare la crittografia per Data=Obbligatorio

  • 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Uso della crittografia dei dati=Obbligatorio

    • Deprecato:

      Provider=MSOLEDBSQL19; Origine dati=[server]; Initial Catalog=[database]; Integrated Security=SSPI; Usare la crittografia per i dati=Obbligatorio

  • 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryPassword; ID utente=[nomeutente]; Password=[password]; Usare la crittografia per Data=Obbligatorio

  • 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Usare la crittografia dei dati=Obbligatorio

  • 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; Origine dati=[server]; Initial Catalog=[database]; Token di accesso=[token di accesso]; Usare la crittografia per Data=Obbligatorio

  • 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryInteractive; ID utente=[nomeutente]; Usare la crittografia per Data=Obbligatorio

  • 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; ID utente=[ID oggetto]; Usare la crittografia per Data=Obbligatorio

    • Identità gestita assegnata dal sistema:

      Provider=MSOLEDBSQL19; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Uso della crittografia per i dati=Obbligatorio

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

      Server=[server]; Database=[database]; Authentication=ActiveDirectoryMSI; UID=[ID oggetto]; Encrypt=Obbligatorio

    • 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; Origine dati=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryServicePrincipal; ID utente=[ID applicazione (client)]; Password=[Segreto applicazione (client)]; Usare la crittografia per Data=Obbligatorio

  • Usando: DBPROP_INIT_PROVIDERSTRING

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryServicePrincipal; UID=[ID applicazione (client)]; PWD=[Segreto applicazione (client)]; Encrypt=Obbligatorio

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