共用方式為


使用 PolyBase 的受控識別連線到 Azure 儲存體

適用於: SQL Server 2025(17.x)及後續版本

從 SQL Server 2025(17.x)開始,您可以使用 管理身份 來存取以下 Azure 資源:

  • Azure Blob 儲存體
  • Azure Data Lake

先決條件

  • SQL Server 2025 (17.x)
  • 透過 Azure Arc 啟用的 SQL Server
  • 啟用 allow server scoped db credentials 伺服器組態選項
  • 授與受控識別 Azure Blob 儲存體資源的存取權。

建立資料庫範圍的認證

新增資料庫範圍憑證以支援受管理的識別。

  1. 允許伺服器範圍的資料庫認證。 執行下列 Transact-SQL 查詢:

    EXECUTE sp_configure 'allow server scoped db credentials', 1;
    GO
    RECONFIGURE;
    
  2. 建立資料庫限定的認證。 此範例使用名稱 managed_id

    CREATE DATABASE SCOPED CREDENTIAL [managed_id]
    WITH IDENTITY = 'Managed Identity';
    

建立外部資料來源

使用下列設定建立外部資料來源。

  • 連接器位置前置詞

    • abs
  • 位置路徑

    • abs://<container_name>@<storage_account_name>.blob.core.windows.net/
    • abs://<storage_account_name>.blob.core.windows.net/<container_name>
  • 依產品/服務支援的地點

    • SQL Server 2025 (17.x) 由 Azure Arc 啟用
    • SQL Server 2022 (16.x):支援階層式命名空間
  • 驗證

    • 共用存取簽章 (SAS),或
    • 受管理的識別

查詢 Azure Blob 儲存體中的 Parquet 檔案

SQL Server 2025 (17.x) 支援透過 Azure Arc 進行管理身份認證。相關說明請參見 Azure Arc 啟用的 SQL Server 管理身份

下列範例會查詢 Azure Blob 儲存體中的 Parquet 檔案:

EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE;
GO

CREATE DATABASE SCOPED CREDENTIAL [managed_id]
WITH IDENTITY = 'Managed Identity';

CREATE EXTERNAL DATA SOURCE [my_external_data_source]
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = managed_id
);

錯誤和解決方案

無法存取外部資料表 (錯誤 16562)

如果您遺漏必要條件,嘗試存取 Azure Blob 儲存體或 Azure Data Lake 時,可能會遇到錯誤 16562:

Msg 16562, Level 16, State 1, Line 79
External table <name> is not accessible because location does not exist or it is used by another process.

檢查以下項目:

  • SQL Server 實例已正確設定以支援 Azure Arc。欲了解更多資訊,請參閱由 Azure Arc 啟用的 SQL Server 管理身份

  • 必要的登錄項目存在。

  • 確認 allow server scoped db credentials 伺服器設定選項是否已啟用。

無法開啟檔案 (錯誤 13822)

當您存取 Azure Blob 儲存體或 Azure Data Lake 時,如果受控識別缺少儲存體帳戶的許可權,或儲存體的網路存取遭到封鎖,您可能會遇到錯誤 13822。

Msg 13822, Level 16, State 1, Line 9
File <file> cannot be opened because it does not exist or it is used by another process.

檢查以下項目:

  • 受控識別是否具有儲存體容器的許可權?
  • 受控識別可以存取 SQL Server 外部的儲存體容器嗎?
  • 檔案是否被獨佔鎖定?