適用於: 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 儲存體資源的存取權。
建立資料庫範圍的認證
新增資料庫範圍憑證以支援受管理的識別。
允許伺服器範圍的資料庫認證。 執行下列 Transact-SQL 查詢:
EXECUTE sp_configure 'allow server scoped db credentials', 1; GO RECONFIGURE;建立資料庫限定的認證。 此範例使用名稱
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 外部的儲存體容器嗎?
- 檔案是否被獨佔鎖定?