Verwenden von Microsoft Entra ID

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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 oder Azure SQL Managed Instance herstellen. Zu den neuen Microsoft Entra-Authentifizierungsmethoden gehören:

  • 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
Access Token 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;Data Source=[server];Initial Catalog=[database];Authentication=SqlPassword;User ID=[username];Password=[password];Use Encryption for Data=Mandatory

    • Veraltet:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];User ID=[username];Password=[password];Use Encryption for Data=Mandatory

  • 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;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory

    • Veraltet:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Integrated Security=SSPI;Use Encryption for Data=Mandatory

  • 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

  • Syntax: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryPassword;User ID=[username];Password=[password];Use Encryption for Data=Mandatory

  • 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;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory

  • 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;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryInteractive;User ID=[username];Use Encryption for Data=Mandatory

  • 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;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryMSI;User ID=[Object ID];Use Encryption for Data=Mandatory

    • Systemseitig zugewiesene verwaltete Identität:

      Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryMSI;Use Encryption for Data=Mandatory

  • Syntax: DBPROP_INIT_PROVIDERSTRING
    • Benutzerseitig zugewiesene verwaltete Identität:

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

    • Systemseitig zugewiesene verwaltete Identität:

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

Microsoft Entra-Authentifizierung mit Dienstprinzipal

  • Syntax: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[server];Initial Catalog=[database];Authentication=ActiveDirectoryServicePrincipal;User ID=[Application (client) ID];Password=[Application (client) secret];Use Encryption for Data=Mandatory

  • Syntax: DBPROP_INIT_PROVIDERSTRING

    Server=[server];Database=[database];Authentication=ActiveDirectoryServicePrincipal;UID=[Application (client) ID];PWD=[Application (client) secret];Encrypt=Mandatory

Codebeispiele

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

Access Token

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

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

Nächste Schritte