Utilisation de Microsoft Entra ID

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Télécharger le pilote OLE DB

Objectif

À partir de la version 18.2.1, Microsoft OLE DB Driver pour SQL Server permet aux applications OLE DB de se connecter à une base de données Azure SQL ou à Azure SQL Managed Instance à l’aide d’une identité fédérée. Les nouvelles méthodes d’authentification Microsoft Entra incluent ce qui suit :

  • Nom d’utilisateur et mot de passe

  • Access token (Jeton d’accès)

  • Authentification intégrée

La version 18.3.0 ajoute la prise en charge des méthodes d’authentification Microsoft Entra suivantes :

La version 18.5.0 ajoute le support des méthodes d’authentification suivantes :

  • Authentification avec principal de service Microsoft Entra

Remarque

L’utilisation des modes d’authentification suivants avec la DataTypeCompatibility (ou la propriété correspondante) définie sur 80 n’est pas prise en charge :

  • Authentification Microsoft Entra à l’aide du nom d’utilisateur et du mot de passe.
  • Authentification Microsoft Entra à l’aide d’un jeton d’accès
  • Authentification intégrée Microsoft Entra
  • Authentification interactive Microsoft Entra
  • Authentification par identités managées Microsoft Entra
  • Authentification avec principal de service Microsoft Entra

Pour utiliser l’authentification Microsoft Entra, vous devez configurer votre source de données Azure SQL. Pour plus d’informations, consultez Configurer et gérer l’authentification Microsoft Entra avec Azure SQL.

Mots clés et propriétés de chaîne de connexion

Les mots clés de chaîne de connexion suivants ont été introduits pour prendre en charge l’authentification Microsoft Entra :

Mot clé de chaîne de connexion Propriété de connexion Description
Jeton d'accès SSPROP_AUTH_ACCESS_TOKEN Spécifie un jeton d’accès pour s’authentifier auprès de Microsoft Entra ID.
Authentification SSPROP_AUTH_MODE Spécifie la méthode d’authentification à utiliser.

Pour plus d’informations sur les nouveaux mots clés/propriétés, consultez les pages suivantes :

Chiffrement et validation de certificat

Pour plus d’informations, consultez Chiffrement et validation des certificats.

Ajouts d’interface graphique utilisateur

L’interface graphique utilisateur du pilote a été améliorée pour permettre l’authentification Microsoft Entra. Pour plus d’informations, consultez l’article suivant :

Exemples de chaîne de connexion

Cette section présente des exemples de mots clés de chaîne de connexion nouveaux et existants à utiliser avec IDataInitialize::GetDataSource et la propriété DBPROP_INIT_PROVIDERSTRING.

Authentification SQL

  • Utilisation : IDataInitialize::GetDataSource
    • Nouveau :

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

    • Dépréciation :

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING
    • Nouveau :

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

    • Dépréciation :

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

Authentification Windows intégrée à l’aide de l’interface SSPI (Security Support Provider Interface)

  • Utilisation : IDataInitialize::GetDataSource
    • Nouveau :

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

    • Dépréciation :

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING
    • Nouveau :

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

    • Dépréciation :

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

Authentification par nom d’utilisateur et mot de passe Microsoft Entra

  • Utilisation : IDataInitialize::GetDataSource

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING

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

Authentification intégrée Microsoft Entra

  • Utilisation : IDataInitialize::GetDataSource

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING

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

Authentification Microsoft Entra à l’aide d’un jeton d’accès

  • Utilisation : IDataInitialize::GetDataSource

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING

    La fourniture d’un jeton d’accès via DBPROP_INIT_PROVIDERSTRING n’est pas prise en charge

Authentification interactive Microsoft Entra

  • Utilisation : IDataInitialize::GetDataSource

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING

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

Authentification à l’aide d’une identité managée Microsoft Entra

  • Utilisation : IDataInitialize::GetDataSource
    • Identité managée affectée par l’utilisateur :

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

    • Identité managée affectée par le système :

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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING
    • Identité managée affectée par l’utilisateur :

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

    • Identité managée affectée par le système :

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

Authentification avec principal de service Microsoft Entra

  • Utilisation : 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

  • Utilisation : DBPROP_INIT_PROVIDERSTRING

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

Exemples de code

Les exemples suivants montrent le code requis pour se connecter à Microsoft Entra ID avec les mots clés de connexion.

Jeton d'accès

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

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

Étapes suivantes