Microsoft Entra ID 사용

적용 대상:SQL ServerAzure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

OLE DB 드라이버 다운로드

목적

버전 18.2.1부터 Microsoft OLE DB Driver for SQL Server를 사용하면 OLE DB 애플리케이션이 페더레이션 ID를 사용하여 Azure SQL 데이터베이스 또는 Azure SQL Managed Instance에 연결할 수 있습니다. 새로운 Microsoft Entra 인증 방법에는 다음이 포함됩니다.

  • 사용자 이름 및 암호

  • 액세스 토큰

  • 통합 인증

버전 18.3.0에는 다음 Microsoft Entra 인증 방법에 대한 지원이 추가되었습니다.

버전 18.5.0에는 다음 인증 방법에 대한 지원이 추가되었습니다.

  • Microsoft Entra 서비스 주체 인증

참고 항목

DataTypeCompatibility(또는 해당 속성)를 80으로 설정하면 다음 인증 모드가 지원되지 않습니다.

  • 사용자 이름 및 비밀번호를 사용한 Microsoft Entra 인증
  • 액세스 토큰을 사용한 Microsoft Entra 인증
  • Microsoft Entra 통합 인증
  • Microsoft Entra 대화형 인증
  • Microsoft Entra 관리 ID 인즌
  • Microsoft Entra 서비스 주체 인증

Microsoft Entra 인증을 사용하려면 Azure SQL 데이터 원본을 구성해야 합니다. 자세한 내용은 Azure SQL에서 Microsoft Entra 인증 구성 및 관리를 참조하세요.

연결 문자열 키워드 및 속성

Microsoft Entra 인증을 지원하기 위해 다음과 같은 연결 문자열 키워드가 도입되었습니다.

연결 문자열 키워드 Connection 속성 설명
액세스 토큰 SSPROP_AUTH_ACCESS_TOKEN Microsoft Entra ID에 인증할 액세스 토큰을 지정합니다.
인증 SSPROP_AUTH_MODE 사용할 인증 방법을 지정합니다.

새 키워드/속성에 대한 자세한 내용은 다음 페이지를 참조하세요.

암호화 및 인증서 유효성 검사

자세한 내용은 암호화 및 인증서 유효성 검사를 참조하세요.

GUI 추가

Microsoft Entra 인증을 허용하도록 드라이버 그래픽 사용자 인터페이스가 향상되었습니다. 자세한 내용은 다음을 참조하세요.

연결 문자열 예

이 섹션에서는 IDataInitialize::GetDataSourceDBPROP_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

SSPI(Security Support Provider Interface)를 사용하는 Windows 통합 인증

  • 사용: 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 관리 ID 인증

  • 사용: IDataInitialize::GetDataSource
    • 사용자가 할당한 관리 ID:

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

    • 시스템이 할당한 관리 ID:

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

  • 사용: DBPROP_INIT_PROVIDERSTRING
    • 사용자가 할당한 관리 ID:

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

    • 시스템이 할당한 관리 ID:

      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 ID에 연결하는 데 필요한 코드를 보여줍니다.

액세스 토큰

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

다음 단계