Dela via


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änstens huvudnamnsautentisering

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ändning av DBPROP_INIT_PROVIDERSTRING:
    • Ny:

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

    • Avrådd:

      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ändning av IDataInitialize::GetDataSource:
    • Ny:

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

    • Avrådd:

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

  • Användning av DBPROP_INIT_PROVIDERSTRING:
    • Ny:

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

    • Avrådd:

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

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

Anmärkning

Alternativet ActiveDirectoryPassword-autentisering (Microsoft Entra ID-lösenordsautentisering) är inaktuellt.

Microsoft Entra-ID-lösenordet baseras på OAuth 2.0 Resource Owner Password Credentials (ROPC), som gör att ett program kan logga in användaren genom att direkt hantera sitt lösenord.

Microsoft rekommenderar att du inte använder ROPC-flödet. den är inte kompatibel med multifaktorautentisering (MFA). I de flesta scenarier är säkrare alternativ tillgängliga och rekommenderas. Det här flödet kräver en hög grad av förtroende för programmet och medför risker som inte finns i andra flöden. Du bör bara använda det här flödet när säkrare flöden inte är livskraftiga. Microsoft flyttar från det här högriskautentiseringsflödet för att skydda användare från skadliga attacker. Mer information finns i Planera för obligatorisk multifaktorautentisering för Azure.

När användarkontexten är tillgänglig använder du ActiveDirectoryInteractive-autentisering.

När användarkontexten inte är tillgänglig och appen körs i Azure-infrastrukturen använder du ActiveDirectoryMSI (eller ActiveDirectoryManagedIdentity i vissa drivrutiner). Hanterad identitet eliminerar kostnaderna för att underhålla och rotera hemligheter och certifikat. Om du inte kan använda hanterad identitet använder du ActiveDirectoryServicePrincipal-autentisering.

Varning

Använd inte autentisering med tjänstens huvudnamn när en användarkontext är tillgänglig. Endast appåtkomst har i sig hög privilegienivå, vilket ofta ger åtkomst över hela hyresgästen och potentiellt tillåter en dålig aktör att komma åt kunddata för vilken användare som helst.

  • Användning av 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ändning av DBPROP_INIT_PROVIDERSTRING:

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

Microsoft Entra-integrerad autentisering

  • Användning av IDataInitialize::GetDataSource:

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

  • Användning av DBPROP_INIT_PROVIDERSTRING:

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

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

  • Användning av IDataInitialize::GetDataSource:

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

  • Användning av DBPROP_INIT_PROVIDERSTRING:

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

Interaktiv Microsoft Entra-autentisering

  • Användning av 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ändning av DBPROP_INIT_PROVIDERSTRING:

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

Microsoft Entra-hanterad identitetsautentisering

  • Användning av 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ändning av 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änstens huvudnamnsautentisering

  • Användning av 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ändning av 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();
}