Freigeben über


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-Authentifizierung mit Dienstprinzipal

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-Authentifizierung mit Dienstprinzipal

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 bei Verbindungszeichenfolgen

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

Verbindungszeichenfolgen-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

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

  • Syntax: 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=Mandatory

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

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

  • Syntax: DBPROP_INIT_PROVIDERSTRING
    • Neu:

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

    • Veraltet:

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

Microsoft Entra-Authentifizierung mit Benutzername und Kennwort

Hinweis

Die ActiveDirectoryPassword-Authentifizierungsoption (Microsoft Entra ID-Kennwortauthentifizierung) ist veraltet.

Das Kennwort von Microsoft Entra ID basiert auf dem OAuth 2.0 Resource Owner Password Credentials (ROPC) Grant, das es einer Anwendung ermöglicht, den Benutzer anzumelden, indem es das Passwort direkt verarbeitet.

Microsoft empfiehlt, den ROPC-Fluss nicht zu verwenden; sie ist nicht mit mehrstufiger Authentifizierung (MFA) kompatibel. 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. Sie sollten diesen Fluss nur verwenden, 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 der Benutzerkontext verfügbar ist, verwenden Sie die ActiveDirectoryInteractive-Authentifizierung.

Wenn der Benutzerkontext nicht verfügbar ist und Ihre App in der Azure-Infrastruktur ausgeführt wird, verwenden Sie ActiveDirectoryMSI (oder ActiveDirectoryManagedIdentity in einigen Treibern). Verwaltete Identität beseitigt den Aufwand für das Verwalten und regelmäßige Aktualisieren von Geheimnissen und Zertifikaten. Wenn Sie verwaltete Identität nicht verwenden können, verwenden Sie die ActiveDirectoryServicePrincipal-Authentifizierung.

Warnung

Verwenden Sie keine Service Principal-Authentifizierung, wenn ein Benutzerkontext verfügbar ist. App-exklusiver Zugriff ist inhärent hochprivilegiert, gewährt häufig mandantenweiten Zugriff und ermöglicht möglicherweise einem böswilligen Akteur, auf Kundendaten sämtlicher Benutzer zuzugreifen.

  • Syntax: IDataInitialize::GetDataSource

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

  • Syntax: DBPROP_INIT_PROVIDERSTRING

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

Integrierte Microsoft Entra-Authentifizierung

  • Syntax: IDataInitialize::GetDataSource

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

  • Syntax: DBPROP_INIT_PROVIDERSTRING

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

Microsoft Entra-Authentifizierung mit Zugriffstoken

  • Syntax: IDataInitialize::GetDataSource

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

  • Syntax: DBPROP_INIT_PROVIDERSTRING

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

Interaktive Microsoft Entra-Authentifizierung

  • Syntax: IDataInitialize::GetDataSource

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

  • Syntax: DBPROP_INIT_PROVIDERSTRING

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

Microsoft Entra-Authentifizierung mit verwalteter Identität

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

  • Syntax: 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-Authentifizierung mit Dienstprinzipal

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

  • Syntax: 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();
}