Sdílet prostřednictvím


Použití ID Microsoft Entra

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Stáhnout ovladač OLE DB

Účel

Od verze 18.2.1 umožňuje ovladač Microsoft OLE DB pro SQL Server připojit aplikace OLE DB k Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics a Microsoft Fabric pomocí federované identity.

Mezi metody ověřování Microsoft Entra patří:

  • Uživatelské jméno a heslo
  • Token přístupu
  • Integrované ověřování

Verze 18.3.0 přidává podporu pro následující metody ověřování Microsoft Entra:

Verze 18.5.0 přidává podporu pro následující metodu ověřování:

  • Ověřování instančního objektu Microsoft Entra

Poznámka:

Použití následujících režimů autentizace s nastavením DataTypeCompatibility (nebo jeho odpovídající vlastností) na 80 není podporováno:

  • Ověřování Microsoft Entra pomocí uživatelského jména a hesla
  • Ověřování Microsoft Entra pomocí přístupového tokenu
  • Integrované ověřování Microsoft Entra
  • Interaktivní ověřování Microsoft Entra
  • Ověřování spravovaných identit Microsoft Entra
  • Ověřování objektu služby Microsoft Entra

Pokud chcete použít ověřování Microsoft Entra, musíte nakonfigurovat zdroj dat Azure SQL. Další informace najdete v tématu Konfigurace a správa ověřování Microsoft Entra pro Azure SQL.

Klíčová slova a vlastnosti připojovacího řetězce

Pro podporu ověřování Microsoft Entra jsme zavedli následující klíčová slova připojovacího řetězce:

Klíčové slovo připojovacího stringu Vlastnost připojení Description
Token přístupu SSPROP_AUTH_ACCESS_TOKEN Určuje přístupový token pro ověření v Microsoft Entra ID.
Autentizace SSPROP_AUTH_MODE Určuje metodu ověřování, která se má použít.

Další informace o nových klíčových slovech a vlastnostech najdete na následujících stránkách:

Ověřování šifrování a certifikátu

Další informace najdete v tématu Šifrování a ověření certifikátu .

Doplňky grafického uživatelského rozhraní

Grafické uživatelské rozhraní ovladače bylo vylepšeno tak, aby umožňovalo ověřování Microsoft Entra. Další informace najdete tady:

Příklady připojovacích řetězců

Tato část ukazuje příklady nových a existujících klíčových slov připojovacího řetězce, která se mají použít s IDataInitialize::GetDataSource a DBPROP_INIT_PROVIDERSTRING vlastností.

Ověřování SQL

  • Pomocí IDataInitialize::GetDataSource:
    • Nový:

      Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=SqlPassword; ID uživatele=[uživatelské_jméno]; Password=[password]; Použití šifrování pro data = povinné

    • Zastaralý

      Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; ID uživatele=[uživatelské_jméno]; Password=[password]; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:
    • Nový:

      Server=[server]; Database=[database]; Authentication=SqlPassword; UID=[uživatelské jméno]; PWD=[heslo]; Encrypt=Mandatory

    • Zastaralý

      Server=[server]; Database=[database]; UID=[uživatelské jméno]; PWD=[heslo]; Encrypt=Mandatory

Integrované ověřování systému Windows pomocí rozhraní SSPI (Security Support Provider Interface)

  • Pomocí IDataInitialize::GetDataSource:
    • Nový:

      Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Použití šifrování pro data = povinné

    • Označený jako zastaralý

      Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Integrated Security=SSPI; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:
    • Nový:

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

    • Zastaralý

      Server=[server];Database=[database];Trusted_Connection=ano;Encrypt=Povinné

Ověřování uživatelským jménem a heslem Microsoft Entra

  • Pomocí IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryPassword; ID uživatele=[uživatelské_jméno]; Password=[password]; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryPassword; UID=[uživatelské jméno]; PWD=[heslo]; Encrypt=Mandatory

Integrované ověřování Microsoft Entra

  • Pomocí IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryIntegrated; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:

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

Ověřování Microsoft Entra pomocí přístupového tokenu

  • Pomocí IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Přístupový token=[přístupový token]; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:

    Poskytnutí přístupového tokenu prostřednictvím DBPROP_INIT_PROVIDERSTRING není podporováno.

Interaktivní ověřování Microsoft Entra

  • Pomocí IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryInteractive; ID uživatele=[uživatelské_jméno]; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryInteractive; UID=[uživatelské jméno]; Encrypt=Mandatory

Ověřování identit spravovaných službou Microsoft Entra

  • Pomocí IDataInitialize::GetDataSource:
    • Spravovaná identita přiřazená uživatelem:

      Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; ID uživatele=[ID objektu]; Použití šifrování pro data = povinné

    • Spravovaná identita přiřazená systémem:

      Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryMSI; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:
    • Spravovaná identita přiřazená uživatelem:

      Server=[server]; Database=[database]; Authentication=ActiveDirectoryMSI; UID=[ID objektu]; Encrypt=Povinné

    • Spravovaná identita přiřazená systémem:

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

Ověřování objektu služby Microsoft Entra

  • Pomocí IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Zdroj dat=[server]; Initial Catalog=[database]; Authentication=ActiveDirectoryServicePrincipal; ID uživatele=[ID aplikace (klienta)]; Password=[Tajný kód aplikace (klienta)]; Použití šifrování pro data = povinné

  • Pomocí DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database]; Authentication=ActiveDirectoryServicePrincipal; UID=[ID aplikace (klienta)]; PWD=[Tajný kód aplikace (klienta)]; Encrypt=Mandatory

Ukázky kódu

Následující ukázky ukazují kód potřebný pro připojení k ID Microsoft Entra s klíčovými slovy připojení.

Token přístupu

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

Integrovaná služba Active Directory

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