你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

使用托管标识设置与 Azure SQL 的索引器连接。

注释

Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。

本文介绍如何使用托管标识来设置与 Azure SQL 数据库的索引器连接,而不是在连接字符串中提供凭据。

可以使用系统分配的托管标识或用户分配的托管标识。 托管标识是 Microsoft Entra 登录名,需要 Azure 角色分配才能访问 Azure SQL 中的数据。

先决条件

  • 为搜索服务创建托管标识。

  • 在 SQL 上分配Azure管理员角色。 索引器连接上使用的标识需要读取权限。 要分配对数据库的读取权限,你必须是 SQL 数据库或 SQL 托管实例中服务器的 Microsoft Entra 管理员。

  • 应熟悉 索引器概念 和 配置。

1 - 分配读取数据库的权限

按照以下步骤分配读取数据库的搜索服务或用户分配的托管标识权限。

  1. 连接到Visual Studio。

    连接到 Visual Studio

  2. 使用Microsoft Entra帐户进行身份验证。

    验证

  3. 执行以下命令:

    在搜索服务名称或用户分配的托管标识名称周围包括括号。

    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 角色。

  1. 在Azure门户中,导航到Azure SQL Server页面。

  2. 选择“访问控制”(IAM)。

  3. 选择 添加 > 角色分配。

    显示“访问控制”(IAM)页的屏幕截图,其中“添加角色分配”菜单处于打开状态。

  4. 在“ 角色 ”选项卡上,选择相应的 “读取者 ”角色。

  5. 在“成员”选项卡上,选择“托管身份”,然后选择“选择成员”。

  6. 选择Azure订阅。

  7. 如果使用系统分配的托管标识,请选择 系统分配的托管标识,搜索搜索服务,然后选择它。

  8. 否则,如果使用用户分配的托管标识,请选择 “用户分配的托管标识”,搜索用户分配的托管标识的名称,然后选择它。

  9. 在“ 审阅 + 分配 ”选项卡上,选择“ 审阅 + 分配 ”以分配角色。

3 - 创建数据源

创建数据源并提供系统分配的托管标识或用户分配的托管标识。

系统分配的托管标识

REST API、Azure 门户和Azure SDK支持系统分配的托管标识。

使用系统分配的托管标识进行连接时,对数据源定义的唯一更改是“凭据”属性的格式。 你将提供初始目录或数据库名称,以及一个没有帐户密钥或密码的 ResourceId。 ResourceId 必须包括Azure SQL 数据库的订阅 ID、SQL 数据库的资源组和 SQL 数据库的名称。

以下示例演示如何使用 创建数据源 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”属性格式为 Initial Catalog(初始目录)或数据库名称,以及不包含帐户密钥或密码的 ResourceId。 ResourceId 必须包括Azure SQL 数据库的订阅 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 - 创建索引

索引指定文档、属性和其他构造中构成搜索体验的字段。

这是一个包含可搜索字段的创建索引 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 - 创建索引器

索引器将数据源与目标搜索索引连接,并提供自动执行数据刷新的计划。 创建索引和数据源后,即可创建索引器。 如果索引器成功,则连接语法和角色分配有效。

下面是具有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-indexer",
    "dataSourceName" : "sql-datasource",
    "targetIndexName" : "my-target-index"
}

如果在索引器尝试连接到数据源时收到错误,指出不允许客户端访问服务器,请查看 常见的索引器错误。

另请参阅

Azure SQL索引器