適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
目的
從 18.2.1 版開始,Microsoft OLE DB Driver for SQL Server 可讓 OLE DB 應用程式使用同盟身分識別,連線到 Azure SQL 資料庫、Azure SQL 受控執行個體、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 驗證,您必須設定 Azure SQL 資料來源。 如需詳細資訊,請參閱使用 Azure SQL 設定和管理 Microsoft Entra 驗證。
連接字串的關鍵字及屬性
已引入下列連接字串關鍵字來支援 Microsoft Entra 驗證:
| 連接字串關鍵字 | Connection 屬性 | 描述 |
|---|---|---|
| 存取權杖 | SSPROP_AUTH_ACCESS_TOKEN |
指定要向 Microsoft Entra ID 進行驗證的存取權杖。 |
| 驗證 | SSPROP_AUTH_MODE |
指定要使用的驗證方法。 |
如需有關新關鍵字/屬性的詳細資訊,請參閱下列頁面:
加密和憑證驗證
如需詳細資訊,請參閱加密和憑證驗證。
GUI 新增項目
驅動程式圖形化使用者介面已經過增強,可允許 Microsoft Entra 驗證。 如需詳細資訊,請參閱
範例連接字串
本節顯示新連接字串關鍵字和現有連接字串關鍵字的範例,以搭配 IDataInitialize::GetDataSource 和 DBPROP_INIT_PROVIDERSTRING 屬性使用。
SQL 驗證
- 使用:
IDataInitialize::GetDataSource- 新:
Provider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=SqlPassword;使用者 ID =[username];密碼=[password];使用加密資料=強制
- 取代:
Provider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];使用者 ID =[username];密碼=[password];使用加密資料=強制
- 新:
- 使用:
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) 進行整合式 Windows 驗證
- 使用:
IDataInitialize::GetDataSource- 新:
Provider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryIntegrated;使用加密資料=強制
- 取代:
Provider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];整合安全=SSPI;使用加密資料=強制
- 新:
- 使用:
DBPROP_INIT_PROVIDERSTRING- 新:
Server=[server];Database=[database];Authentication=ActiveDirectoryIntegrated;Encrypt=Mandatory
- 取代:
Server=[server];Database=[database];Trusted_Connection=yes;Encrypt=Mandatory
- 新:
Microsoft Entra 使用者名稱和密碼驗證。
注意
ActiveDirectoryPassword 驗證選項(Microsoft Entra ID 密碼驗證)已被棄用。
Microsoft Entra ID 密碼基於 OAuth 2.0 資源擁有者密碼憑證(ROPC)授權,允許應用程式直接操作使用者的密碼來登入。
Microsoft 建議你不要使用 ROPC 流程;它與多重驗證(MFA)不相容。 在大部分情況下,有更安全的替代方案可供使用,並建議使用。 這種流程需要對應用程式高度信任,且存在其他流程中不存在的風險。 只有當更安全的流程不可行時,才應該使用這個流程。 Microsoft 正逐步放棄這種高風險的認證流程,以保護使用者免受惡意攻擊。 欲了解更多資訊,請參閱 Azure 強制多重驗證的規劃。
當有使用者上下文時,請使用 ActiveDirectoryInteractive 認證。
當使用者上下文無法取得且你的應用程式運行在 Azure 基礎架構上時,請使用 ActiveDirectoryMSI(或某些驅動程式中的 ActiveDirectoryManagedIdentity)。 管理式身份消除了維護與輪換秘密與憑證的負擔。 如果你無法使用管理身份,請使用 ActiveDirectoryServicePrincipal 認證。
警告
當有使用者上下文可用時,不要使用服務主體認證。 僅應用程式的存取本質上屬於高權限,通常會授權整個租戶的存取權限,並可能讓惡意行為者存取任何使用者的客戶資料。
- 使用:
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryPassword;使用者 ID =[username];密碼=[password];使用加密資料=強制
- 使用:
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Authentication=ActiveDirectoryPassword;UID=[username];PWD=[password];Encrypt=Mandatory
Microsoft Entra 整合式驗證
- 使用:
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryIntegrated;使用加密資料=強制
- 使用:
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Authentication=ActiveDirectoryIntegrated;Encrypt=Mandatory
使用存取權杖進行 Microsoft Entra 驗證
- 使用:
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];存取令牌=[存取令牌];使用加密資料=強制
- 使用:
DBPROP_INIT_PROVIDERSTRING不支援透過
DBPROP_INIT_PROVIDERSTRING提供存取權杖
Microsoft Entra 互動式驗證
- 使用:
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryInteractive;使用者 ID =[username];使用加密資料=強制
- 使用:
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Authentication=ActiveDirectoryInteractive;UID=[username];Encrypt=Mandatory
Microsoft Entra 受控識別驗證。
- 使用:
IDataInitialize::GetDataSource- 使用者指派的受控識別:
Provider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryMSI;使用者 ID =[物件 ID];使用加密資料=強制
- 系統指派的受控識別:
Provider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryMSI;使用加密資料=強制
- 使用者指派的受控識別:
- 使用:
DBPROP_INIT_PROVIDERSTRING- 使用者指派的受控識別:
Server=[server];Database=[database];Authentication=ActiveDirectoryMSI;UID=[物件 ID];加密=強制
- 系統指派的受控識別:
Server=[server];Database=[database];Authentication=ActiveDirectoryMSI;Encrypt=Mandatory
- 使用者指派的受控識別:
Microsoft Entra 服務主體驗證
- 使用:
IDataInitialize::GetDataSourceProvider=MSOLEDBSQL19;資料來源=[伺服器];初始目錄=[資料庫];Authentication=ActiveDirectoryServicePrincipal;使用者 ID =[應用程式(用戶端)ID];密碼=[應用程式(用戶端)秘密];使用加密資料=強制
- 使用:
DBPROP_INIT_PROVIDERSTRINGServer=[server];Database=[database];Authentication=ActiveDirectoryServicePrincipal;UID=[應用程式(客戶端)ID];PWD=[應用程式(客戶端)秘密];加密=強制
程式碼範例
下列範例顯示使用連接關鍵字連線到 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();
}
相關內容
了解SQL Server 中的 Microsoft Entra 驗證。
使用 OLE DB 驅動程式支援的連接字串關鍵字,設定驅動程式連接。