Note
Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。
本文說明如何使用受控身分識別來設定與 Azure SQL Database 的索引器連線,而非在連接字串中提供認證資訊。
你可以使用系統指派的管理身份或使用者指派的管理身份。 管理身份是 Microsoft Entra 登入,並且需要 Azure 角色分配才能存取 Azure SQL 中的資料。
先決條件
為您的搜尋服務建立一個管理身份。
在 SQL 上指派 Azure 管理員角色。 索引器連線所使用的身份需要讀取權限。 你必須是 Microsoft Entra 管理員,且伺服器在 SQL 資料庫或 SQL 受管理執行個體 中,才能授予資料庫的讀取權限。
1 - 分配讀取資料庫的權限
請依照以下步驟指派搜尋服務或使用者指派的管理身份權限來讀取資料庫。
連接到 Visual Studio。
用你的 Microsoft Entra 帳號進行驗證。
認證執行以下指令:
請在搜尋服務名稱或使用者指定的管理身份名稱周圍加上括號。
CREATE USER [insert your search service name here or user-assigned managed identity name] FROM EXTERNAL PROVIDER; EXEC sp_addrolemember 'db_datareader', [insert your search service name here or user-assigned managed identity name];
若在分配權限後更改搜尋服務身份或使用者指派身份,必須移除角色成員資格並在 SQL 資料庫中移除使用者,然後重複權限指派。 移除角色成員身份與使用者可透過執行以下指令完成:
sp_droprolemember 'db_datareader', [insert your search service name or user-assigned managed identity name];
DROP USER IF EXISTS [insert your search service name or user-assigned managed identity name];
2 - 新增角色分配
在這個區塊中,你會授權你的 Azure AI 搜尋服務 服務讀取 SQL Server 的資料。 詳細步驟請參見 使用 Azure 入口網站 指派 Azure 角色。
在Azure入口網站,請前往您的Azure SQL Server頁面。
選擇存取控制(IAM)。
選擇 新增 > 角色分配。
在 角色 標籤中,選擇適當的 讀者 角色。
在 「成員 」標籤中,選擇 「管理身份」,然後選擇 「選擇成員」。
選擇您的 Azure 訂閱。
如果你使用系統指派的管理身份,請選擇 「系統指派的管理身份」,搜尋你的搜尋服務,然後再選擇它。
否則,如果你使用使用者指派的管理身份,請選擇 使用者指派的管理身份,搜尋該用戶指派的管理身份名稱,然後選擇它。
在 「Review + assign 」標籤中,選擇 Review + assign 來指派該角色。
3 - 建立資料來源
建立資料來源,並提供系統指派的管理身份或使用者指派的管理身份。
系統指派的管理識別
REST API、Azure 入口網站以及 Azure 軟體開發工具包支援系統分配的託管識別。
當你連接到系統指派的管理身份時,資料來源定義唯一的改變就是「憑證」屬性的格式。 你需要提供一個初始目錄或資料庫名稱,以及一個沒有帳號金鑰或密碼的 ResourceId。 ResourceId 必須包含 Azure SQL Database 的訂閱 ID、SQL 資料庫的資源群組,以及 SQL 資料庫的名稱。
這是一個範例,說明如何使用「Create Data Source」REST API 和「受控身份」連接字串,建立資料來源來對儲存帳戶的資料進行索引。 REST API、.NET SDK 和 Azure 入口的受控身份識別連接字串格式相同。
POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-datasource",
"type" : "azuresql",
"credentials" : {
"connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
},
"container" : {
"name" : "my-table"
}
}
使用者指派的管理身份
REST API 版本 2026-04-01 及以後支援基於使用者指派管理身份的連線。 當你連接到使用者指派的受控身分時,資料來源定義有兩項更動:
首先,「credentials」屬性的格式包括初始目錄或資料庫的名稱,以及一個不包含帳號金鑰或密碼的 ResourceId。 ResourceId 必須包含 Azure SQL Database 的訂閱 ID、SQL 資料庫的資源群組,以及 SQL 資料庫的名稱。 這與系統指派的管理身份格式相同。
其次,新增一個「身份」屬性,包含使用者指派的受管理身份集合。 建立資料來源時,應只提供一個由使用者指派的管理身份。 設定為類型「userAssignedIdentities」。
以下是一個使用資料來源建立索引器資料來源物件的範例 - 建立或更新:
POST https://[service name].search.windows.net/datasources?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-datasource",
"type" : "azuresql",
"credentials" : {
"connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Sql/servers/[SQL Server name];Connection Timeout=30;"
},
"container" : {
"name" : "my-table"
},
"identity" : {
"@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
"userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
}
}
4 - 建立索引
索引指定文件中的欄位、屬性及其他塑造搜尋體驗的結構。
這裡有一個可搜尋欄位的 booktitle REST API 呼叫:
POST https://[service name].search.windows.net/indexes?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "my-target-index",
"fields": [
{ "name": "id", "type": "Edm.String", "key": true, "searchable": false },
{ "name": "booktitle", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
]
}
5 - 建立索引器
索引器將資料來源與目標搜尋索引連結,並提供自動資料更新的排程。 一旦索引和資料來源建立完成,你就可以開始建立索引器了。 若索引器成功,則連接語法與角色指派有效。
這裡有一個 Create Indexer REST API 呼叫,並定義了 Azure SQL indexer。 索引器會在你提交請求時執行。
POST https://[service name].search.windows.net/indexers?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-indexer",
"dataSourceName" : "sql-datasource",
"targetIndexName" : "my-target-index"
}
如果索引器嘗試連接資料來源時出現錯誤,顯示客戶端無法存取伺服器,可以看看 常見的索引器錯誤。