Поделиться через


Использование идентификатора Microsoft Entra

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Скачать драйвер OLE DB

Характер использования

Начиная с версии 18.2.1 Microsoft OLE DB Driver for SQL Server позволяет приложениям OLE DB подключаться к База данных SQL Azure, Управляемый экземпляр SQL Azure, Azure Synapse Analytics и Microsoft Fabric с помощью федеративного удостоверения.

К методам проверки подлинности Microsoft Entra относятся:

  • Имя пользователя и пароль
  • Маркер доступа
  • Встроенная проверка подлинности

Версия 18.3.0 добавляет поддержку следующих методов проверки подлинности Microsoft Entra:

  • Интерактивная проверка подлинности

  • Проверка подлинности управляемого удостоверения (только из виртуальной машины Azure, настроенной с помощью управляемого удостоверения)

В версии 18.5.0 добавлена поддержка следующего способа проверки подлинности:

  • Проверка подлинности субъекта-службы Microsoft Entra

Примечание.

Использование следующих режимов проверки подлинности с параметром DataTypeCompatibility (или соответствующего свойства этого элемента) со значением 80 не поддерживается:

  • Проверка подлинности Microsoft Entra с помощью имени пользователя и пароля
  • Проверка подлинности Microsoft Entra с помощью маркера доступа
  • Встроенная проверка подлинности Microsoft Entra
  • Интерактивная проверка подлинности Microsoft Entra
  • Проверка подлинности управляемых удостоверений Microsoft Entra
  • Проверка подлинности субъекта-службы Microsoft Entra

Чтобы использовать проверку подлинности Microsoft Entra, необходимо настроить источник данных SQL Azure. Дополнительные сведения см. в разделе о настройке и администрировании проверки подлинности Microsoft Entra с помощью Azure SQL.

Ключевые слова и свойства строки подключения

Ниже приведены ключевые слова строка подключения для поддержки проверки подлинности Microsoft Entra:

Ключевое слово строки подключения Свойства подключения Description
Маркер доступа SSPROP_AUTH_ACCESS_TOKEN Указывает маркер доступа для проверки подлинности в идентификаторе Microsoft Entra.
Проверка подлинности SSPROP_AUTH_MODE Указывает используемый метод проверки подлинности.

Дополнительные сведения о новых ключевых словах и свойствах см. на следующих страницах:

Шифрование и проверка сертификатов

Дополнительные сведения см. в разделе Шифрование и проверка сертификатов.

Добавление графических пользовательских интерфейсов

Графический пользовательский интерфейс драйвера был улучшен, чтобы разрешить проверку подлинности Microsoft Entra. Дополнительные сведения см. в разделе:

Примеры строк подключения

В этом разделе приведены примеры новых и существующих ключевых слов строки подключения для использования со свойствами IDataInitialize::GetDataSource и DBPROP_INIT_PROVIDERSTRING.

Проверка подлинности SQL

  • Использование: IDataInitialize::GetDataSource
    • Новые функции:

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

    • Устаревшие:

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

  • Использование: DBPROP_INIT_PROVIDERSTRING
    • Новые функции:

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

    • Устаревшие:

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

Встроенная проверка подлинности в Windows с помощью интерфейса поставщика поддержки безопасности (SSPI)

  • Использование: IDataInitialize::GetDataSource
    • Новые функции:

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

    • Устаревшие:

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

  • Использование: DBPROP_INIT_PROVIDERSTRING
    • Новые функции:

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

    • Устаревшие:

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

Проверка подлинности имени пользователя и пароля Microsoft Entra

  • Использование: IDataInitialize::GetDataSource

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

  • Использование: DBPROP_INIT_PROVIDERSTRING

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

Встроенная проверка подлинности Microsoft Entra

  • Использование: IDataInitialize::GetDataSource

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

  • Использование: DBPROP_INIT_PROVIDERSTRING

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

Проверка подлинности Microsoft Entra с помощью маркера доступа

  • Использование: IDataInitialize::GetDataSource

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

  • Использование: DBPROP_INIT_PROVIDERSTRING

    Предоставление маркера доступа через DBPROP_INIT_PROVIDERSTRING не поддерживается.

Интерактивная проверка подлинности Microsoft Entra

  • Использование: IDataInitialize::GetDataSource

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

  • Использование: DBPROP_INIT_PROVIDERSTRING

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

Проверка подлинности управляемого удостоверения Microsoft Entra

  • Использование: IDataInitialize::GetDataSource
    • Управляемое удостоверение, назначаемое пользователем:

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

    • Управляемое удостоверение, назначаемое системой:

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

  • Использование: DBPROP_INIT_PROVIDERSTRING
    • Управляемое удостоверение, назначаемое пользователем:

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

    • Управляемое удостоверение, назначаемое системой:

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

Проверка подлинности субъекта-службы Microsoft Entra

  • Использование: 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

  • Использование: DBPROP_INIT_PROVIDERSTRING

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

Примеры кода

В следующих примерах показан код, необходимый для подключения к идентификатору Microsoft Entra с ключевыми словами подключения.

Маркер доступа

#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

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