Menggunakan ID Microsoft Entra

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Unduh driver OLE DB

Tujuan

Dimulai dengan versi 18.2.1, Driver Microsoft OLE DB untuk SQL Server memungkinkan aplikasi OLE DB tersambung ke Azure SQL Database atau Azure SQL Managed Instance menggunakan identitas gabungan . Metode autentikasi Microsoft Entra baru meliputi:

  • Nama pengguna dan kata sandi

  • Token akses

  • Autentikasi terintegrasi

Versi 18.3.0 menambahkan dukungan untuk metode autentikasi Microsoft Entra berikut:

  • Autentikasi interaktif

  • Autentikasi identitas terkelola (hanya dari dalam Azure Virtual Machine yang dikonfigurasi dengan Identitas Terkelola)

Versi 18.5.0 menambahkan dukungan untuk metode autentikasi berikut:

  • Autentikasi perwakilan layanan Microsoft Entra

Catatan

Menggunakan mode autentikasi berikut dengan DataTypeCompatibility (atau properti yang sesuai) diatur ke 80tidak didukung:

  • Autentikasi Microsoft Entra menggunakan nama pengguna dan kata sandi
  • Autentikasi Microsoft Entra menggunakan token akses
  • Autentikasi terintegrasi Microsoft Entra
  • Autentikasi interaktif Microsoft Entra
  • Autentikasi identitas terkelola Microsoft Entra
  • Autentikasi perwakilan layanan Microsoft Entra

Untuk menggunakan autentikasi Microsoft Entra, Anda harus mengonfigurasi sumber data Azure SQL Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi dan mengelola autentikasi Microsoft Entra dengan Azure SQL.

kata kunci dan properti string Koneksi ion

Kata kunci string koneksi berikut telah diperkenalkan untuk mendukung autentikasi Microsoft Entra:

kata kunci string Koneksi ion Properti koneksi Deskripsi
access_token SSPROP_AUTH_ACCESS_TOKEN Menentukan token akses untuk mengautentikasi ke ID Microsoft Entra.
Autentikasi SSPROP_AUTH_MODE Menentukan metode autentikasi yang akan digunakan.

Untuk informasi selengkapnya tentang kata kunci/properti baru, lihat halaman berikut ini:

Validasi enkripsi dan sertifikat

Lihat Enkripsi dan validasi sertifikat untuk informasi selengkapnya.

Penambahan GUI

Antarmuka pengguna grafis driver telah ditingkatkan untuk memungkinkan autentikasi Microsoft Entra. Untuk informasi selengkapnya, lihat:

Contoh string koneksi

Bagian ini memperlihatkan contoh kata kunci string koneksi baru dan yang sudah ada untuk digunakan dengan IDataInitialize::GetDataSource properti dan DBPROP_INIT_PROVIDERSTRING .

Autentikasi SQL

  • Menggunakan IDataInitialize::GetDataSource:
    • Baru:

      Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=SqlPassword; ID Pengguna=[nama pengguna]; Kata sandi=[kata sandi]; Gunakan Enkripsi untuk Data=Wajib

    • Usang:

      Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database]; ID Pengguna=[nama pengguna]; Kata sandi=[kata sandi]; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:
    • Baru:

      Server=[server]; Database=[database];Authentication=SqlPassword; UID=[nama pengguna]; PWD=[kata sandi]; Enkripsi=Wajib

    • Usang:

      Server=[server]; Database=[database]; UID=[nama pengguna]; PWD=[kata sandi]; Enkripsi=Wajib

Autentikasi Windows terintegrasi menggunakan Antarmuka Penyedia Dukungan Keamanan (SSPI)

  • Menggunakan IDataInitialize::GetDataSource:
    • Baru:

      Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryIntegrated; Gunakan Enkripsi untuk Data=Wajib

    • Usang:

      Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Integrated Security=SSPI; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:
    • Baru:

      Server=[server]; Database=[database];Authentication=ActiveDirectoryIntegrated; Enkripsi=Wajib

    • Usang:

      Server=[server]; Database=[database];Trusted_Koneksi ion=ya; Enkripsi=Wajib

Autentikasi nama pengguna dan kata sandi Microsoft Entra

  • Menggunakan IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryPassword; ID Pengguna=[nama pengguna]; Kata sandi=[kata sandi]; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database];Authentication=ActiveDirectoryPassword; UID=[nama pengguna]; PWD=[kata sandi]; Enkripsi=Wajib

Autentikasi terintegrasi Microsoft Entra

  • Menggunakan IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryIntegrated; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database];Authentication=ActiveDirectoryIntegrated; Enkripsi=Wajib

Autentikasi Microsoft Entra menggunakan token akses

  • Menggunakan IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Token Akses=[token akses]; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:

    Menyediakan token akses melalui DBPROP_INIT_PROVIDERSTRING tidak didukung

Autentikasi interaktif Microsoft Entra

  • Menggunakan IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryInteractive; ID Pengguna=[nama pengguna]; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database];Authentication=ActiveDirectoryInteractive; UID=[nama pengguna]; Enkripsi=Wajib

Autentikasi identitas terkelola Microsoft Entra

  • Menggunakan IDataInitialize::GetDataSource:
    • Identitas terkelola yang ditetapkan pengguna:

      Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryMSI; ID Pengguna=[ID Objek]; Gunakan Enkripsi untuk Data=Wajib

    • Identitas terkelola yang ditetapkan sistem:

      Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryMSI; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:
    • Identitas terkelola yang ditetapkan pengguna:

      Server=[server]; Database=[database];Authentication=ActiveDirectoryMSI; UID=[ID Objek]; Enkripsi=Wajib

    • Identitas terkelola yang ditetapkan sistem:

      Server=[server]; Database=[database];Authentication=ActiveDirectoryMSI; Enkripsi=Wajib

Autentikasi perwakilan layanan Microsoft Entra

  • Menggunakan IDataInitialize::GetDataSource:

    Provider=MSOLEDBSQL19; Sumber Data=[server]; Katalog Awal=[database];Authentication=ActiveDirectoryServicePrincipal; ID Pengguna=[ID Aplikasi (klien)]; Password=[Rahasia aplikasi (klien)]; Gunakan Enkripsi untuk Data=Wajib

  • Menggunakan DBPROP_INIT_PROVIDERSTRING:

    Server=[server]; Database=[database];Authentication=ActiveDirectoryServicePrincipal; UID=[ID Aplikasi (klien) ]; PWD=[Rahasia aplikasi (klien)]; Enkripsi=Wajib

Sampel kode

Sampel berikut menunjukkan kode yang diperlukan untuk menyambungkan ke ID Microsoft Entra dengan kata kunci koneksi.

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

Direktori Aktif Terintegrasi

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

Langkah berikutnya