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

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

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

Назначение

Начиная с версии 18.2.1 Microsoft OLE DB Driver for SQL Server позволяет приложениям OLE DB подключаться к базе данных Azure SQL, SQL Managed Instance 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:

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

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

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

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

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

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

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

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

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

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

      Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=SqlPassword; Идентификатор пользователя=[имя_пользователя]; Password=[password]; Использование шифрования для Data=Обязательно

    • Устарело:

      Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Идентификатор пользователя=[имя_пользователя]; Password=[password]; Использование шифрования для Data=Обязательно

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

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

    • Устарело:

      Server=[server];Database=[database];UID=[username];PWD=[password];Encrypt=Обязательно

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

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

      Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryIntegrated; Использование шифрования для Data=Обязательно

    • Устарело:

      Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Встроенная безопасность=SSPI; Использование шифрования для Data=Обязательно

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

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

    • Устарело:

      Server=[server];Database=[database];Trusted_Connection=да;Encrypt=Обязательно

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

Important

Параметр аутентификации ActiveDirectoryPassword (аутентификация по паролю Microsoft Entra ID) устарел в драйверах Microsoft SQL. Этот высокорисковый сценарий аутентификации несовместим с обязательной многофакторной аутентификацией Microsoft Entra (MFA) и может не работать в арендаторах, где требуется MFA. Запланируйте переход на другой метод аутентификации Microsoft Entra.

Microsoft Entra ID проверка подлинности паролей основана на предоставлении учетных данных владельца ресурса OAuth 2.0 ( ROPC), что позволяет приложению войти в систему, напрямую обрабатывая пароль.

Microsoft рекомендует не использовать поток ROPC, так как он несовместим с MFA. В большинстве случаев более безопасные альтернативные варианты доступны и рекомендуется. Этот поток требует высокой степени доверия к приложению и несет риски, которые не присутствуют в других потоках. Используйте этот поток только в том случае, если более безопасные потоки не являются жизнеспособными. Корпорация Майкрософт отойдет от этого потока проверки подлинности с высоким риском, чтобы защитить пользователей от вредоносных атак. Дополнительные сведения см. в статье "Планирование обязательной многофакторной проверки подлинности для Azure".

Когда пользователь присутствует при входе в систему, используйте аутентификацию ActiveDirectoryInteractive или ActiveDirectoryIntegrated, чтобы записи в журнале аудита относились к вошедшему пользователю и применялись политики условного доступа.

Для сценариев взаимодействия между службами без участия пользователя следуйте рекомендациям по использованию служебной учетной записи Microsoft Entra:

  • Если приложение работает в инфраструктуре Azure, используйте ActiveDirectoryMSI (или ActiveDirectoryManagedIdentity в некоторых драйверах). Управляемые удостоверения устраняют затраты на обслуживание и смену секретов и сертификатов.
  • Если управляемое удостоверение недоступно (например, приложение работает вне Azure), используйте ActiveDirectoryServicePrincipal. Если драйвер это поддерживает, предпочтительнее использовать клиентский сертификат вместо секрета клиента. При использовании сертификата закрытый ключ остается на клиенте, и только подписанное утверждение отправляется в Microsoft Entra для проверки подлинности клиента. Если ключ хранится в аппаратном модуле (например, TPM или HSM) или помечен как неэкспортируемый, его нельзя экспортировать в виде строки, как это можно сделать с секретом клиента.
  • Не используйте Microsoft Entra учетную запись пользователя в качестве учетной записи службы.
  • Использование: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryPassword; Идентификатор пользователя=[имя_пользователя]; Password=[password]; Использование шифрования для Data=Обязательно

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

    Server=[server];Database=[database];Authentication=ActiveDirectoryPassword;UID=[username];PWD=[password];Шифрование=Обязательно

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

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

    Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryIntegrated; Использование шифрования для Data=Обязательно

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

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

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

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

    Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Access Token=[маркер доступа]; Использование шифрования для Data=Обязательно

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

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

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

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

    Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryInteractive; Идентификатор пользователя=[имя_пользователя]; Использование шифрования для Data=Обязательно

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

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

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

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

      Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryMSI; Идентификатор пользователя=[идентификатор объекта]; Использование шифрования для Data=Обязательно

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

      Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryMSI; Использование шифрования для Data=Обязательно

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

      Server=[сервер]; Database=[база данных]; Authentication=ActiveDirectoryMSI; UID=[Идентификатор объекта]; Encrypt=Обязательный

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

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

Проверка подлинности служебного принципала Microsoft Entra

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

    Provider=MSOLEDBSQL19; Источник данных=[сервер]; Первоначальный каталог=[база данных]; Authentication=ActiveDirectoryServicePrincipal; Идентификатор пользователя=[идентификатор приложения (клиент)]; Password=[Application (client) secret]; Использование шифрования для Data=Обязательно

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

    Server=[сервер]; Database=[база данных]; Authentication=ActiveDirectoryServicePrincipal; UID=[Идентификатор приложения (клиента)]; PWD=[Секрет приложения (клиента)]; Encrypt=Обязательно

Примеры кода

В следующих примерах показан код, необходимый для подключения к идентификатору 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();
}