你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注释
Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它还支撑着 Foundry IQ——这是一个托管知识层,可将企业内容转化为供 Microsoft Foundry 门户中的代理使用的可复用、具备权限感知能力的知识库。
本文介绍如何使用托管标识设置 Azure AI 搜索 索引器与 SQL 托管实例 的连接,而无需在连接字符串中提供凭据。
可以使用系统分配的托管标识或用户分配的托管标识。 托管身份是 Microsoft Entra 的登录方式,并且需要在 Azure 中进行角色分配才能访问 SQL 托管实例中的数据。
在了解有关此功能的详细信息之前,应了解索引器是什么以及如何为数据源设置索引器。 有关详细信息,请参阅 Azure AI 搜索 中的索引器 和 从 Azure SQL 数据库索引数据。
先决条件
为搜索服务创建托管标识。
在 SQL 托管实例 中的 Microsoft Entra 管理员角色:
若要为SQL 托管实例分配读取权限,你必须是具有SQL 托管实例的Azure全局管理员。 请参阅 使用 SQL 托管实例配置和管理 Microsoft Entra 身份验证 并按照步骤预配 Microsoft Entra 管理员(SQL 托管实例)。
在 SQL 托管实例中配置公共终结点和网络安全组以允许来自 Azure AI 搜索 的连接。 目前不支持使用托管标识时通过共享专用链接进行连接。
分配读取数据库的权限
按照以下步骤分配搜索服务系统托管标识权限来读取 SQL 托管数据库。
使用以下方法之一通过 SQL Server Management Studio(SSMS)连接到SQL 托管实例:
使用Microsoft Entra帐户进行身份验证。
在左窗格中,找到用作数据源的 SQL 数据库进行索引,然后右键单击它。 选择 “新建查询”。
在 T-SQL 窗口中,复制以下命令,并包含搜索服务名称周围的括号。 选择“ 执行”。
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];
添加角色指派
在此步骤中,向Azure AI 搜索服务授予从SQL 托管实例读取数据的权限。
在Azure门户中,转到你的SQL托管实例页面。
选择“访问控制”(IAM)。
选择 添加>角色分配。
选择 “读取者 ”角色。
将“分配访问权限至”保留为“Microsoft Entra 用户、组或服务主体”。
如果使用的是系统分配的托管标识,请搜索你的搜索服务,然后选择它。 如果使用用户分配的托管标识,请搜索用户分配的托管标识的名称并选择它。 选择“ 保存”。
下面是一个使用系统分配的托管标识的 SQL 托管实例 示例:
创建数据源
创建数据源并提供系统分配的托管标识。
系统分配的托管标识
REST API、Azure 门户和 .NET SDK 支持系统分配的托管标识。
使用系统分配的托管标识进行连接时,对数据源定义的唯一更改是“凭据”属性的格式。 在这里,你将提供初始目录或数据库名称以及没有帐户密钥或密码的 ResourceId。
ResourceId必须包括SQL 托管实例的订阅 ID、SQL Managed instance资源组和 SQL 数据库的名称。
下面的示例演示如何使用创建数据源 REST API 和托管标识连接字符串创建数据源以索引 SQL 托管实例的数据。 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-mi-datasource",
"type" : "azuresql",
"credentials" : {
"connectionString" : "Database=[SQL database name];ResourceId=/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.Sql/managedInstances/[SQL Managed Instance name];Connection Timeout=100;"
},
"container" : {
"name" : "my-table"
}
}
创建索引
索引指定文档、属性和其他构造中构成搜索体验的字段。
这是一个包含可搜索字段的创建索引 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 }
]
}
创建索引器
索引器将数据源与目标搜索索引连接,并提供自动执行数据刷新的计划。 创建索引和数据源后,创建索引器。
下面是具有Azure SQL索引器定义的 Create Indexer REST API 调用。 提交请求时,索引器将运行。
POST https://[service name].search.windows.net/indexers?api-version=2026-04-01
Content-Type: application/json
api-key: [admin key]
{
"name" : "sql-mi-indexer",
"dataSourceName" : "sql-mi-datasource",
"targetIndexName" : "my-target-index"
}
故障 排除
如果在索引器尝试连接到表示不允许客户端访问服务器的数据源时收到错误,请参阅 常见的索引器错误。
还可以通过分别尝试在有和没有限制的情况下连接,来排除任何防火墙问题。