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í instančního objektu 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é

    • 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

Poznámka:

Možnost ověřování ActiveDirectoryPassword (ověřování hesla Microsoft Entra ID) je zastaralá.

Heslo Microsoft Entra ID je založené na udělení přihlašovacích údajů vlastníka prostředku OAuth 2.0 (ROPC), které aplikaci umožňuje přihlásit se uživatele přímo zpracováním hesla.

Microsoft doporučuje nepoužívat tok ROPC; není kompatibilní s vícefaktorovým ověřováním (MFA). Ve většině scénářů jsou k dispozici a doporučeny bezpečnější alternativy. Tento tok vyžaduje vysokou míru důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok byste měli použít jenom v případě, že nejsou možné bezpečnější toky. Microsoft odchází od tohoto vysoce rizikového toku ověřování, aby chránil uživatele před škodlivými útoky. Další informace najdete v tématu Plánování povinného vícefaktorového ověřování pro Azure.

Pokud je k dispozici kontext uživatele, použijte ověřování ActiveDirectoryInteractive.

Pokud kontext uživatele není dostupný a vaše aplikace běží v infrastruktuře Azure, použijte ActiveDirectoryMSI (nebo ActiveDirectoryManagedIdentity v některých ovladačích). Spravovaná identita eliminuje režii při údržbě a obměně tajných kódů a certifikátů. Pokud nemůžete použít spravovanou identitu, použijte ověřování ActiveDirectoryServicePrincipal.

Výstraha

Nepoužívejte ověřování pomocí Service Principal, pokud je k dispozici kontext uživatele. Přístup pouze pro aplikace má ze své podstaty vysokou úroveň oprávnění, často uděluje přístup k celé doméně nájemníka a potenciálně umožňuje škodlivému aktérovi přístup k datům zákazníků pro libovolného uživatele.

  • 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í instančního objektu 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();
}