Använda Microsoft Entra-ID

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Microsoft Fabric

Ladda ned OLE DB-drivrutins

Avsikt

Från och med version 18.2.1 tillåter Microsoft OLE DB-drivrutin för SQL Server OLE DB-program att ansluta till Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics och Microsoft Fabric med hjälp av en federerad identitet.

Microsoft Entra-autentiseringsmetoder inkluderar:

  • Användarnamn och lösenord
  • Åtkomsttoken
  • Integrerad autentisering

Version 18.3.0 lägger till stöd för följande Microsoft Entra-autentiseringsmetoder:

Version 18.5.0 lägger till stöd för följande autentiseringsmetod:

  • Microsoft Entra-tjänstens huvudnamnsautentisering

Anmärkning

Det går DataTypeCompatibility att använda följande autentiseringslägen med 80 (eller motsvarande egenskap) inställda på:

  • Microsoft Entra-autentisering med användarnamn och lösenord
  • Microsoft Entra-autentisering med hjälp av åtkomsttoken
  • Microsoft Entra-integrerad autentisering
  • Interaktiv Microsoft Entra-autentisering
  • Microsoft Entra-hanterad identitetsautentisering
  • Microsoft Entra-tjänsthuvudnamnsautentisering

Om du vill använda Microsoft Entra-autentisering måste du konfigurera din Azure SQL-datakälla. Mer information finns i Konfigurera och hantera Microsoft Entra-autentisering med Azure SQL.

Nyckelord och egenskaper för anslutningssträngar

Följande nyckelord för anslutningssträngar har införts för att stödja Microsoft Entra-autentisering:

Nyckelord för anslutningssträng Anslutningsegenskap Description
Åtkomsttoken SSPROP_AUTH_ACCESS_TOKEN Anger en åtkomsttoken som ska autentiseras mot Microsoft Entra-ID.
Authentication SSPROP_AUTH_MODE Anger den autentiseringsmetod som ska användas.

Mer information om de nya nyckelorden/egenskaperna finns på följande sidor:

Kryptering och certifikatverifiering

Mer information finns i Kryptering och certifikatverifiering .

GUI-tillägg

Det grafiska användargränssnittet för drivrutinen har förbättrats för att tillåta Microsoft Entra-autentisering. Mer information finns i:

Exempel på anslutningssträngar

Det här avsnittet visar exempel på nya och befintliga nyckelord för anslutningssträngar som ska användas med IDataInitialize::GetDataSource och DBPROP_INIT_PROVIDERSTRING egenskap.

SQL-autentisering

  • Användning av IDataInitialize::GetDataSource:
    • Ny:

      Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=SqlPassword; Användar-ID=[användarnamn]; Password=[password]; Använda kryptering för data=obligatoriskt

    • Avrådd:

      Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Användar-ID=[användarnamn]; Password=[password]; Använda kryptering för data=obligatoriskt

  • Använd DBPROP_INIT_PROVIDERSTRING:
    • Ny:

      Server=[server]; Database=[database]; Authentication=SqlPassword; UID=[användarnamn]; PWD=[lösenord]; Encrypt=Mandatory

    • Föråldrad:

      Server=[server]; Database=[database]; UID=[användarnamn]; PWD=[lösenord]; Encrypt=Mandatory

Integrerad Windows-autentisering med hjälp av SSPI (Security Support Provider Interface)

  • Använda IDataInitialize::GetDataSource:
    • Ny:

      Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Använda kryptering för data=obligatoriskt

    • Föråldrad:

      Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Integrated Security=SSPI; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:
    • Ny:

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

    • Föråldrad:

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

Microsoft Entra-autentisering med användarnamn och lösenord

  • Använda IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryPassword; Användar-ID=[användarnamn]; Password=[password]; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryPassword; UID=[användarnamn]; PWD=[lösenord]; Encrypt=Mandatory

Microsoft Entra-integrerad autentisering

  • Använda IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:

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

Microsoft Entra-autentisering med hjälp av en åtkomsttoken

  • Använda IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Åtkomsttoken=[åtkomsttoken]; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:

    Det går inte att tillhandahålla åtkomsttoken via DBPROP_INIT_PROVIDERSTRING

Interaktiv Microsoft Entra-autentisering

  • Använda IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryInteractive; Användar-ID=[användarnamn]; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryInteractive; UID=[användarnamn]; Encrypt=Mandatory

Microsoft Entra-hanterad identitetsautentisering

  • Använda IDataInitialize::GetDataSource:
    • Användartilldelad hanterad identitet:

      Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Användar-ID=[Objekt-ID]; Använda kryptering för data=obligatoriskt

    • Systemtilldelad hanterad identitet:

      Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:
    • Användartilldelad hanterad identitet:

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

    • Systemtilldelad hanterad identitet:

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

Microsoft Entra-tjänsthuvudnamnsautentisering

  • Använda IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datakälla=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryServicePrincipal; User ID=[Application (client) ID]; Password=[Application (client) secret]; Använda kryptering för data=obligatoriskt

  • Använda DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryServicePrincipal; UID=[Applikation (klient) ID]; PWD=[Applikation (klient) hemlighet]; Encrypt=Obligatoriskt

Kodexempel

Följande exempel visar den kod som krävs för att ansluta till Microsoft Entra-ID med anslutningsnyckelord.

Åtkomsttoken

#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 integrerad

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