Microsoft Entra ID を使用する

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

OLE DB ドライバーのダウンロード

目的

バージョン 18.2.1 から、Microsoft OLE DB Driver for SQL Server では、フェデレーション ID を使用して OLE DB アプリケーションが Azure SQL データベース または Azure SQL Managed Instance に接続できるようになりました。 新しい Microsoft Entra 認証方法には次が含まれます。

  • ユーザー名とパスワード

  • アクセス トークン

  • 統合認証

バージョン 18.3.0 では、次の Microsoft Entra 認証方法のサポートが追加されています。

バージョン 18.5.0 では、次の認証方法のサポートが追加されています。

  • Microsoft Entra サービス プリンシパル認証

Note

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 プロパティ 説明
Access Token SSPROP_AUTH_ACCESS_TOKEN Microsoft Entra ID に対して認証するアクセス トークンを指定します。
認証 SSPROP_AUTH_MODE 使用する認証方法を指定します。

新しいキーワード/プロパティの詳細については、次のページを参照してください。

暗号化と証明書の検証

詳細については、暗号化と証明書の検証に関する記事を参照してください。

GUI の追加

ドライバーのグラフィカル ユーザー インターフェイスが拡張され、Microsoft Entra 認証が可能になりました。 詳細については、以下を参照してください:

接続文字列の例

このセクションでは、IDataInitialize::GetDataSource および DBPROP_INIT_PROVIDERSTRING プロパティで使用される新規および既存の接続文字列キーワードの例を示します。

SQL 認証

  • 使用法: IDataInitialize::GetDataSource
    • 新:

      Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=SqlPassword;User ID=[ユーザー名];Password=[パスワード];Use Encryption for Data=Mandatory

    • 非推奨:

      Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];User ID=[ユーザー名];Password=[パスワード];Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING
    • 新:

      Server=[サーバー];Database=[データベース];Authentication=SqlPassword;UID=[ユーザー名];PWD=[パスワード];Encrypt=Mandatory

    • 非推奨:

      Server=[サーバー];Database=[データベース];UID=[ユーザー名];PWD=[パスワード];Encrypt=Mandatory

セキュリティ サポート プロバイダー インターフェイス (SSPI) を使用する統合 Windows 認証

  • 使用法: IDataInitialize::GetDataSource
    • 新:

      Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory

    • 非推奨:

      Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Integrated Security=SSPI;Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING
    • 新:

      Server=[サーバー];Database=[データベース];Authentication=ActiveDirectoryIntegrated;Encrypt=Mandatory

    • 非推奨:

      Server=[サーバー];Database=[データベース];Trusted_Connection=yes;Encrypt=Mandatory

Microsoft Entra ユーザー名とパスワードによる認証

  • 使用法: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryPassword;User ID=[ユーザー名];Password=[パスワード];Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING

    Server=[サーバー];Database=[データベース];Authentication=ActiveDirectoryPassword;UID=[ユーザー名];PWD=[パスワード];Encrypt=Mandatory

Microsoft Entra 統合認証

  • 使用法: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryIntegrated;Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING

    Server=[サーバー];Database=[データベース];Authentication=ActiveDirectoryIntegrated;Encrypt=Mandatory

アクセス トークンを使用した Microsoft Entra 認証

  • 使用法: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Access Token=[アクセス トークン] ;Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING

    DBPROP_INIT_PROVIDERSTRING を使用したアクセス トークンの提供はサポートされていません

Microsoft Entra 対話型認証

  • 使用法: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryInteractive;User ID=[ユーザー名];Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING

    Server=[サーバー];Database=[データベース];Authentication=ActiveDirectoryInteractive;UID=[ユーザー名];Encrypt=Mandatory

Microsoft Entra マネージド ID 認証

  • 使用法: IDataInitialize::GetDataSource
    • ユーザー割り当てマネージド ID:

      Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryMSI;User ID=[オブジェクト ID];Use Encryption for Data=Mandatory

    • システム割り当てマネージド ID:

      Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryMSI;Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING
    • ユーザー割り当てマネージド ID:

      Server=[サーバー];Database=[データベース];Authentication=ActiveDirectoryMSI;UID=[オブジェクト ID];Encrypt=Mandatory

    • システム割り当てマネージド ID:

      Server=[サーバー];Database=[データベース];Authentication=ActiveDirectoryMSI;Encrypt=Mandatory

Microsoft Entra サービス プリンシパル認証

  • 使用法: IDataInitialize::GetDataSource

    Provider=MSOLEDBSQL19;Data Source=[サーバー];Initial Catalog=[データベース];Authentication=ActiveDirectoryServicePrincipal;User ID=[アプリケーション (クライアント) ID];Password=[アプリケーション (クライアント) シークレット];Use Encryption for Data=Mandatory

  • 使用法: DBPROP_INIT_PROVIDERSTRING

    Server=[サーバー];Database=[データベースj];Authentication=ActiveDirectoryServicePrincipal;UID=[アプリケーション (クライアント) ID];PWD=[アプリケーション (クライアント) シークレット];Encrypt=Mandatory

コード サンプル

次のサンプルは、接続キーワードによって Microsoft Entra に接続するために必要なコードを示しています。

Access Token

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

次のステップ