Verwenden Sie Microsoft Entra ID

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

OLE DB-Treiber herunterladen

Zweck

Ab Version 18.2.1 ermöglicht der Microsoft OLE DB-Treiber für SQL Server, dass OLE DB-Anwendungen über einen Identitätsverbund eine Verbindung mit einer Azure SQL-Datenbank, Azure SQL Managed Instance, Azure Synapse Analytics und Microsoft Fabric herstellen.

Microsoft Entra Authentifizierungsmethoden beinhalten:

  • Benutzername und Kennwort
  • Zugriffstoken
  • Integrierte Authentifizierung

Mit Version 18.3.0 kommt Unterstützung für die folgenden Microsoft Entra-Authentifizierungsmethoden hinzu:

Mit Version 18.5.0 wird Unterstützung für die folgenden Authentifizierungsmethoden hinzugefügt:

  • Microsoft Entra-Dienstprinzipal-Authentifizierung

Hinweis

Die Verwendung der folgenden Authentifizierungsmodi, wenn DataTypeCompatibility (oder eine entsprechende Eigenschaft) auf 80 festgelegt ist, wird nicht unterstützt:

  • Microsoft Entra-Authentifizierung mit Benutzername und Kennwort
  • Microsoft Entra-Authentifizierung mit Zugriffstoken
  • Integrierte Microsoft Entra-Authentifizierung
  • Interaktive Microsoft Entra-Authentifizierung
  • Microsoft Entra-Authentifizierung mit verwalteten Identitäten
  • Microsoft Entra-Dienstprinzipal-Authentifizierung

Um die Microsoft Entra-Authentifizierung verwenden zu können, müssen Sie Ihre Azure SQL-Datenquelle konfigurieren. Weitere Informationen finden Sie unter Konfigurieren und Verwalten der Microsoft Entra-Authentifizierung mit Azure SQL.

Schlüsselwörter und Eigenschaften von Verbindungsstrings

Zur Unterstützung der Microsoft Entra-Authentifizierung wurden die folgenden Schlüsselwörter für Verbindungszeichenfolgen eingeführt:

Verbindungsparameter-Schlüsselwort Verbindungseigenschaft BESCHREIBUNG
Zugriffstoken SSPROP_AUTH_ACCESS_TOKEN Gibt ein Zugriffstoken für die Authentifizierung bei Microsoft Entra ID an.
Authentifizierung SSPROP_AUTH_MODE Gibt die zu verwendende Authentifizierungsmethode an.

Weitere Informationen zu den neuen Schlüsselwörtern/Eigenschaften finden Sie auf den folgenden Seiten:

Verschlüsselung und Zertifikatüberprüfung

Weitere Informationen finden Sie unter Verschlüsselung und Zertifikatüberprüfung.

GUI-Ergänzungen

Die grafische Benutzeroberfläche des Treibers wurde erweitert, um die Microsoft Entra-Authentifizierung zu ermöglichen. Weitere Informationen finden Sie unter:

Exemplarische Verbindungszeichenfolgen

Dieser Abschnitt enthält Beispiele für neue und vorhandene Schlüsselwörter in Verbindungszeichenfolgen, die mit den Eigenschaften IDataInitialize::GetDataSource und DBPROP_INIT_PROVIDERSTRING verwendet werden können.

SQL-Authentifizierung

  • Verwendung von IDataInitialize::GetDataSource:
    • Neu:

      Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=SqlPassword; Benutzer-ID=[Benutzername]; Password=[password]; Verschlüsselung für Data=Obligatorisch verwenden

    • Veraltet:

      Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Benutzer-ID=[Benutzername]; Password=[password]; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:
    • Neu:

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

    • Veraltet:

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

Integrierte Windows-Authentifizierung unter Verwendung der Security Support Provider-Schnittstelle (SSPI)

  • Verwendung von IDataInitialize::GetDataSource:
    • Neu:

      Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Verschlüsselung für Data=Obligatorisch verwenden

    • Veraltet:

      Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Integrierte Sicherheit=SSPI; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:
    • Neu:

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

    • Veraltet:

      Server=[server];Database=[database];Trusted_Connection=yes;Verschlüsselung=Erforderlich

Microsoft Entra-Authentifizierung mit Benutzername und Kennwort

Important

Die ActiveDirectoryPassword-Authentifizierungsoption (Microsoft Entra ID Kennwortauthentifizierung) ist in den Microsoft SQL-Treibern veraltet. Dieser Hochrisiko-Authentifizierungsfluss ist mit der verpflichtenden Microsoft Entra-Mehrstufigen Authentifizierung (MFA) nicht kompatibel und funktioniert möglicherweise nicht in Mandanten, in denen MFA erzwungen wird. Planen Sie die Migration zu einer anderen Microsoft Entra Authentifizierungsmethode.

Microsoft Entra ID Kennwortauthentifizierung basiert auf der OAuth 2.0 Resource Owner Password Credentials (ROPC)-Erteilung, die es einer Anwendung ermöglicht, sich beim Benutzer direkt anzumelden, indem es sein Kennwort direkt verarbeitet.

Microsoft empfiehlt, den ROPC-Fluss nicht zu verwenden, da er nicht mit MFA kompatibel ist. In den meisten Szenarien sind sicherere Alternativen verfügbar und empfohlen. Dieser Fluss erfordert ein hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Flüsse nicht lebensfähig sind. Microsoft entfernt sich von diesem Authentifizierungsfluss mit hohem Risiko, um Benutzer vor böswilligen Angriffen zu schützen. Weitere Informationen finden Sie unter Planung für die obligatorische mehrstufige Authentifizierung für Azure.

Wenn ein Benutzer bei der Anmeldung vorhanden ist, verwenden Sie die ActiveDirectoryInteractive- oder ActiveDirectoryIntegrated-Authentifizierung, sodass die Attribute des Überwachungspfads für den angemeldeten Benutzer und die Richtlinien für bedingten Zugriff gelten.

Befolgen Sie für unbeaufsichtigte Dienst-zu-Dienst-Szenarien die Microsoft Entra Richtlinien für das Dienstkonto:

  • Wenn Ihre Anwendung in Azure Infrastruktur ausgeführt wird, verwenden Sie ActiveDirectoryMSI (oder ActiveDirectoryManagedIdentity in einigen Treibern). Verwaltete Identitäten beseitigen den Aufwand für die Verwaltung und Rotation von Geheimnissen und Zertifikaten.
  • Wenn verwaltete Identität nicht verfügbar ist (z. B. wird die Anwendung außerhalb Azure ausgeführt), verwenden Sie ActiveDirectoryServicePrincipal. Wo der Treiber dies unterstützt, bevorzugen Sie ein Clientzertifikat über einen geheimen Clientschlüssel. Bei einem Zertifikat bleibt der private Schlüssel auf dem Client, und nur eine signierte Assertion wird an Microsoft Entra gesendet, um den Client zu authentifizieren. Wenn der Schlüssel in Hardware gespeichert ist (z. B. in einem TPM oder HSM) oder als nicht exportierbar gekennzeichnet ist, kann er nicht wie ein Clientgeheimnis als Zeichenfolge extrahiert werden.
  • Verwenden Sie kein Microsoft Entra Benutzerkonto als Dienstkonto.
  • Verwendung von IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryPassword; Benutzer-ID=[Benutzername]; Password=[password]; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:

    Server=[server];Database=[database];Authentication=ActiveDirectoryPassword;UID=[username];PWD=[password];Verschlüsseln=Verpflichtend

Integrierte Microsoft Entra-Authentifizierung

  • Verwendung von IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:

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

Microsoft Entra-Authentifizierung mit Zugriffstoken

  • Verwendung von IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Access Token=[access token];Verbindungssicherheit erzwingen=Vorgeschrieben

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:

    Die Bereitstellung von Zugriffstoken über DBPROP_INIT_PROVIDERSTRING wird nicht unterstützt.

Interaktive Microsoft Entra-Authentifizierung

  • Verwendung von IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryInteractive; Benutzer-ID=[Benutzername]; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:

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

Microsoft Entra-Authentifizierung mit verwalteter Identität

  • Verwendung von IDataInitialize::GetDataSource:
    • Benutzerseitig zugewiesene verwaltete Identität:

      Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Benutzer-ID=[Objekt-ID]; Verschlüsselung für Data=Obligatorisch verwenden

    • Systemseitig zugewiesene verwaltete Identität:

      Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:
    • Benutzerseitig zugewiesene verwaltete Identität:

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

    • Systemseitig zugewiesene verwaltete Identität:

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

Microsoft Entra-Dienstprinzipal-Authentifizierung

  • Verwendung von IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Datenquelle=[Server]; Initial Catalog=[database]; Authentication=ActiveDirectoryServicePrincipal; Benutzer-ID=[Anwendungs-ID (Client)]; Password=[Application (Client) secret]; Verschlüsselung für Data=Obligatorisch verwenden

  • Verwendung von DBPROP_INIT_PROVIDERSTRING:

    Server=[Server]; Database=[Datenbank]; Authentication=ActiveDirectoryServicePrincipal; UID=[Anwendungs-ID (Client)]; PWD=[Anwendungsgeheimnis (Client)]; Encrypt=Erforderlich

Codebeispiele

Die folgenden Beispiele zeigen den erforderlichen Code, um über Verbindungsschlüsselwörter eine Verbindung mit Microsoft Entra ID herzustellen.

Zugriffstoken

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

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