Delen via


Microsoft Entra-id gebruiken

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

OLE DB-stuurprogramma downloaden

Purpose

Vanaf versie 18.2.1 kunnen OLE DB-stuurprogramma's van Microsoft OLE DB voor SQL Server verbinding maken met Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics en Microsoft Fabric met behulp van een federatieve identiteit.

Microsoft Entra-verificatiemethoden zijn onder andere:

  • Gebruikersnaam en wachtwoord
  • Toegangstoken
  • Geïntegreerde verificatie

Versie 18.3.0 voegt ondersteuning toe voor de volgende Microsoft Entra-verificatiemethoden:

Versie 18.5.0 voegt ondersteuning toe voor de volgende verificatiemethode:

  • Verificatie van Microsoft Entra service principal

Opmerking

Het gebruik van de volgende verificatiemodi waarvoor DataTypeCompatibility (of de bijbehorende eigenschap) is ingesteld op 80 wordt niet ondersteund.

  • Microsoft Entra-verificatie met behulp van gebruikersnaam en wachtwoord
  • Microsoft Entra-verificatie met behulp van toegangstoken
  • Geïntegreerde Microsoft Entra-verificatie
  • Interactieve Verificatie van Microsoft Entra
  • Verificatie van door Microsoft Entra beheerde identiteiten
  • Verificatie van Microsoft Entra service principal

Als u Microsoft Entra-verificatie wilt gebruiken, moet u uw Azure SQL-gegevensbron configureren. Zie Microsoft Entra-verificatie configureren en beheren met Azure SQLvoor meer informatie.

Trefwoorden en eigenschappen van connectiestring.

De volgende trefwoorden voor verbindingsreeksen zijn geïntroduceerd ter ondersteuning van Microsoft Entra-verificatie:

Verbindingsreeks trefwoord Eigenschap van de verbinding Description
Toegangstoken SSPROP_AUTH_ACCESS_TOKEN Hiermee geeft u een toegangstoken op voor verificatie bij Microsoft Entra ID.
Authenticatie SSPROP_AUTH_MODE Hiermee geeft u de verificatiemethode op die moet worden gebruikt.

Zie de volgende pagina's voor meer informatie over de nieuwe trefwoorden/eigenschappen:

Versleuteling en certificaatvalidatie

Zie Versleuteling en certificaatvalidatie voor meer informatie.

GUI-toevoegingen

De grafische gebruikersinterface van het stuurprogramma is verbeterd om Microsoft Entra-verificatie toe te staan. Voor meer informatie, zie:

Voorbeeld van verbindingsreeksen

In deze sectie ziet u voorbeelden van nieuwe en bestaande trefwoorden voor verbindingsreeksen die moeten worden gebruikt met IDataInitialize::GetDataSource en DBPROP_INIT_PROVIDERSTRING eigenschap.

SQL-verificatie

  • Met behulp van IDataInitialize::GetDataSource:
    • Nieuw:

      Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Verificatie=SqlPassword; Gebruikers-id=[gebruikersnaam]; Password=[password]; Versleuteling gebruiken voor gegevens=verplicht

    • Verouderd:

      Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Gebruikers-id=[gebruikersnaam]; Password=[password]; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:
    • Nieuw:

      Server=[server]; Database=[database]; Verificatie=SqlPassword; UID=[gebruikersnaam]; PWD=[wachtwoord]; Versleutelen=Verplicht

    • Verouderd:

      Server=[server]; Database=[database]; UID=[gebruikersnaam]; PWD=[wachtwoord]; Versleutelen=Verplicht

Geïntegreerde Windows-verificatie met behulp van SSPI (Security Support Provider Interface)

  • Met behulp van IDataInitialize::GetDataSource:
    • Nieuw:

      Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Verificatie=ActiveDirectoryIntegrated; Versleuteling gebruiken voor gegevens=verplicht

    • Verouderd:

      Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Geïntegreerde beveiliging=SSPI; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:
    • Nieuw:

      Server=[server]; Database=[database]; Verificatie=ActiveDirectoryIntegrated; Versleutelen=Verplicht

    • Verouderd:

      Server=[server]; Database=[database]; Trusted_Connection=ja; Versleutelen=Verplicht

Gebruikersnaam en wachtwoordverificatie van Microsoft Entra

Opmerking

De optie ActiveDirectoryPassword-verificatie (Wachtwoordverificatie voor Microsoft Entra-id) is afgeschaft.

Het Wachtwoord voor Microsoft Entra-id is gebaseerd op de OAuth 2.0 ROPC-toekenning (Resource Owner Password Credentials), waarmee een toepassing de gebruiker kan aanmelden door het wachtwoord rechtstreeks te verwerken.

Microsoft raadt u aan de ROPC-stroom niet te gebruiken; dit is niet compatibel met meervoudige verificatie (MFA). In de meeste scenario's zijn veiligere alternatieven beschikbaar en aanbevolen. Deze stroom vereist een hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. U moet deze stroom alleen gebruiken wanneer veiligere stromen niet haalbaar zijn. Microsoft gaat weg van deze verificatiestroom met een hoog risico om gebruikers te beschermen tegen schadelijke aanvallen. Zie Planning voor verplichte meervoudige verificatie voor Azure voor meer informatie.

Wanneer gebruikerscontext beschikbaar is, gebruikt u ActiveDirectoryInteractive-verificatie.

Wanneer de gebruikerscontext niet beschikbaar is en uw app wordt uitgevoerd in de Azure-infrastructuur, gebruikt u ActiveDirectoryMSI (of ActiveDirectoryManagedIdentity in sommige stuurprogramma's). Beheerde identiteit elimineert de overhead van het onderhouden en roteren van geheimen en certificaten. Als u beheerde identiteit niet kunt gebruiken, gebruikt u ActiveDirectoryServicePrincipal-verificatie.

Waarschuwing

Gebruik geen service-principalverificatie wanneer er een gebruikerscontext beschikbaar is. Alleen-app-toegang heeft inherente hoge bevoegdheid, wat vaak leidt tot tenantbrede toegang en mogelijkerwijs een kwaadwillende de toegang verschaft tot klantgegevens van elke gebruiker.

  • Met behulp van IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryPassword; Gebruikers-id=[gebruikersnaam]; Password=[password]; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryPassword; UID=[gebruikersnaam]; PWD=[wachtwoord]; Versleutelen=Verplicht

Geïntegreerde Microsoft Entra-verificatie

  • Met behulp van IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Verificatie=ActiveDirectoryIntegrated; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Verificatie=ActiveDirectoryIntegrated; Versleutelen=Verplicht

Microsoft Entra-verificatie met behulp van een toegangstoken

  • Met behulp van IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Toegangstoken=[toegangstoken]; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:

    Het verlenen van toegangstoken via DBPROP_INIT_PROVIDERSTRING wordt niet ondersteund

Interactieve Verificatie van Microsoft Entra

  • Met behulp van IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Verificatie=ActiveDirectoryInteractive; Gebruikers-id=[gebruikersnaam]; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Verificatie=ActiveDirectoryInteractive; UID=[gebruikersnaam]; Versleutelen=Verplicht

Door Microsoft Entra beheerde identiteitsverificatie

  • Met behulp van IDataInitialize::GetDataSource:
    • Door de gebruiker toegewezen beheerde identiteit:

      Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Verificatie=ActiveDirectoryMSI; Gebruikers-id=[Object-id]; Versleuteling gebruiken voor gegevens=verplicht

    • Door het systeem toegewezen beheerde identiteit:

      Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Verificatie=ActiveDirectoryMSI; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:
    • Door de gebruiker toegewezen beheerde identiteit:

      Server=[server]; Database=[database]; Verificatie=ActiveDirectoryMSI; UID=[Object-id]; Versleutelen=Verplicht

    • Door het systeem toegewezen beheerde identiteit:

      Server=[server]; Database=[database]; Verificatie=ActiveDirectoryMSI; Versleutelen=Verplicht

Verificatie van Microsoft Entra service principal

  • Met behulp van IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Gegevensbron=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryServicePrincipal; Gebruikers-id=[Toepassings-id (client)]; Password=[Toepassingsgeheim (client)]; Versleuteling gebruiken voor gegevens=verplicht

  • Met behulp van DBPROP_INIT_PROVIDERSTRING:

    Server=[server];Database=[database];Authentication=ActiveDirectoryServicePrincipal;UID=[Client-id];PWD=[Client-geheim];Versleutelen=Verplicht

Codevoorbeelden

In de volgende voorbeelden ziet u de code die is vereist om verbinding te maken met Microsoft Entra-id met verbindingstrefwoorden.

Toegangstoken

#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 Geïntegreerd

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