面向 Microsoft Teams 和 Microsoft 365 Copilot 的 Cortex Agents

简介

对于大多数团队而言,要获取及时的数据见解,往往需要在专业分析平台和通信工具之间来回切换,从而导致延迟和生产力降低。将代理 AI 系统集成到 Microsoft Teams 可以直接为对话和决策提供答案,从而加速企业内部的信息流转。但是,构建既强大又直观的安全聊天分析解决方案是一项艰巨的任务。幸运的是,Snowflake 已经替您做好了这件事。

面向 Microsoft Teams 和 Microsoft 365 Copilot 的 Snowflake Cortex Agents 集成将 Snowflake 的对话式 AI 代理嵌入到您的企业通信平台中。企业团队和非技术用户可以使用简单自然的语言与他们的 Snowflake 结构化数据进行交互,在不需要离开 Teams 聊天或更广泛的 Microsoft 365 生态系统的情况下,即可获得直接的答案和可视化效果。该集成可通过 Microsoft AppSource 获取,实现无缝部署。

主要功能

  • 通过自然语言进行无缝分析。 在 Microsoft Teams 和 Microsoft 365 Copilot 的界面中,让您的业务决策者能够自行获取见解,从而让他们感到高兴。用户可以通过对话方式提问,并即时获得由 LLM 驱动的准确答复,形式可为文本、表格或图表,从而显著加速数据驱动的决策过程。

  • 双重界面覆盖完整工作流程。 面向 Microsoft Teams 的 Cortex Agents 提供两种不同的交互界面,以支持不同的业务需求。使用标准 Teams Application 在 Teams Bot 应用程序聊天中进行专门的深入分析,或者利用 Microsoft 365 Copilot Agent 将有针对性的 Snowflake 见解带入 Microsoft 365 Copilot 生态系统中更广泛的对话工作流程。

  • 由 Snowflake Cortex Agents 提供支持。 此集成由 Snowflake Cortex Agents API 提供支持,它负责处理从您的数据中生成准确、可靠见解的复杂工作。代理系统可以智能地解释用户请求并生成响应,从而使您的团队不必构建复杂的对话 AI 模式或管理底层模型。

  • 企业级安全与治理。 基于 Snowflake 的“隐私优先”基础,该集成确保您能够放心探索由 AI 驱动的各类用例。这意味着:

    • 您的数据始终处于 Snowflake 的治理范围内。 用户提示会发送到 Cortex Agents API,但为生成答案而查询的底层数据不会离开 Snowflake 的安全环境。生成的 SQL 查询将在您的 Snowflake 虚拟仓库中执行。

    • 与 Snowflake 的隐私和治理功能无缝集成。 该集成完全遵守 Snowflake 基于角色的访问控制 (RBAC)。代表用户执行的所有查询都遵循其既定权限,从而确保用户只能看到他们有权访问的数据。

设置集成

Cortex Agent 的 Microsoft Teams 集成允许组织管理员将多个 Snowflake 账户连接到其组织中的 Teams 和 Copilot 工作区。设置该集成只需几个简单的步骤,具体如下:

  1. 由 Azure 管理员进行租户范围设置。 集成需要 Microsoft Azure 管理员进行一次性设置,才能在 Azure AD (AAD) 租户中授予对 Snowflake 应用程序的同意。这一步将启用集成所需的安全 OAuth 2.0 身份验证。

  2. Snowflake 安全集成。 Azure 管理员完成租户范围设置后,Snowflake 管理员必须为每个希望连接到 Microsoft Teams 或 M365 Copilot 应用的 Snowflake 账户配置安全集成。此步骤可确保集成可以安全地访问每个 Snowflake 账户中的必要数据。

  3. 将账户关联到机器人。 配置安全集成后,Snowflake 管理员就可以将 Snowflake 账户关联到 Microsoft Teams 或 M365 Copilot 机器人。此步骤允许机器人访问 Snowflake 账户的数据和功能,使用户能够直接在 Teams 或 Copilot 中与他们的数据进行交互。

先决条件

在开始集成过程之前,请确保已经具备以下条件:

  • 管理员访问权限。 设置需要同时具备 Snowflake 和 Microsoft 租户的管理访问权限。

  • Snowflake 账户区域: 您的 Snowflake 账户必须托管在 Azure 东部 US 2 区域。随着此预览版的推进,Snowflake 计划支持更多区域。

  • Snowflake 管理权限: 您的 Snowflake 用户必须具有 ACCOUNTADMIN 或 SECURITYADMIN 角色的访问权限。这些权限是在 Snowflake 账户中创建必要的安全集成对象所必需的。

  • Microsoft 管理权限: 您的 Azure 用户必须拥有 Microsoft Entra ID 租户的全局管理员权限(或等效角色)。这些权限是为应用程序授予必要的租户范围管理员许可所必需的。

  • Microsoft 租户ID: 您需要准备好组织的 Microsoft 租户 ID 来配置 Snowflake 安全集成。有关查找组织租户 ID 的更多信息,请参阅 在 Azure 门户中获取订阅和租户 IDs (https://learn.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id)。

  • 个人用户账户: 每个最终用户必须同时拥有自己的 Microsoft 用户账户和 Snowflake 用户账户。

  • 最终用户许可: 用户必须拥有相应的 Microsoft 许可证才能访问 Microsoft Teams。如果计划在 Microsoft 365 Copilot 中使用该集成,还需要 Copilot 许可证。

第 1 步:租户范围的 Entra ID 配置

要为 Cortex Agents 启用安全身份验证,Microsoft Azure 管理员必须同意托管在 Snowflake 租户中的两个应用程序,并为 Entra ID 租户中的每个应用程序创建 服务主体。这两个应用程序是:

  • Cortex Agents Bot OAuth Resource: 表示受保护的 Snowflake API,并定义客户端应用程序的访问权限(范围)。

  • Cortex Agents Bot Snowflake OAuth Client: 表示客户端应用程序,在本例中为 Teams 应用程序后端服务,它在请求访问令牌后调用 Snowflake API。

下面提供了对这些引用程序授予同意的说明。这两个应用程序的流程非常相似,但是具体的权限和范围略有不同。

确认权限授予

在对两个应用程序授予同意后,您可以通过查看 Microsoft Entra ID 门户的 Enterprise applications 部分来确认权限是否已成功授予。

  1. 如有必要,请登录到 Microsoft Entra 管理中心 (https://entra.microsoft.com/)。

  2. 在搜索框中输入“enterprise applications”导航到 Enterprise Applications,然后在结果中选择 Enterprise applications

  3. All applications 列表中,找到刚刚授予同意的两个应用程序:Snowflake Cortex Agents Bot OAuth Resource 和 Snowflake Cortex Agents Bot OAuth Client。一种简单的方法是搜索“Snowflake Cortex Agent”

    如果两个应用程序都出现在列表中,说明权限已正确授予。如果缺少一个或两个应用程序,请重新尝试授予同意。

第 2 步:Snowflake 安全集成

将 Snowflake 与 Microsoft Teams 集成需要进行安全集成,以便在您的 Snowflake 账户和 Entra ID 租户之间建立加密信任。此过程需要:

  • 在 Snowflake 中启用 Entra ID 作为外部 OAUth 提供商。

  • 准备 Cortex Agent 及其他所需对象的定义。

  • 确保将使用代理的用户有权访问代理的 Snowflake 对象。

启用 Entra ID 作为外部提供商 OAuth

Snowflake 安全集成对象表示与外部 OAuth 提供商(在本例中为 Microsoft Entra ID)的集成。此集成允许 Snowflake 对登录 Microsoft Teams 或 Copilot 的用户进行身份验证。

以下 SQL 语句是一个带注释的模板,用于创建此集成。此命令必须由具有 ACCOUNTADMIN 权限的角色执行。请将其中的 tenant-id 占位符替换为您的 Microsoft 租户 ID。

CREATE OR REPLACE SECURITY INTEGRATION entra_id_cortex_agents_integration
    TYPE = EXTERNAL_OAUTH
    ENABLED = TRUE
    EXTERNAL_OAUTH_TYPE = AZURE
    EXTERNAL_OAUTH_ISSUER = 'https://login.microsoftonline.com/<tenant-id>/v2.0'
    EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys'
    EXTERNAL_OAUTH_AUDIENCE_LIST = ('5a840489-78db-4a42-8772-47be9d833efe')
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = ('email', 'upn')
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'email_address'
    EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE'
Copy

有关此命令可用参数的完整参考,请参阅 CREATE SECURITY INTEGRATION (External OAuth)

EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 和 EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 参数共同将 Entra ID 身份与 Snowflake 身份关联起来。要使身份验证成功,JWT 中指定声明的值必须与 Snowflake 用户对象上指定属性的值完全匹配。Snowflake 推荐的两种主要配置是:

  • 按用户主体名称映射 (UPN):将 EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 参数设置为 “upn”,并将 EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 参数设置为“LOGIN_NAME”。

  • 按电子邮件地址映射:将 EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 参数设置为“email”,并将 EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 参数设置为“EMAIL_ADDRESS”。

上面的示例语句使用了电子邮件地址映射配置,但同时在 EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 参数中指定了 UPN,允许您通过仅更改 EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 来更改映射方法。

该示例语句还启用了 EXTERNAL_OAUTH_ANY_ROLE_MODE,因此会使用用户的默认角色。

有关 OAuth 范围的更多信息,请参阅 范围

准备 Cortex Agent 定义

配置安全集成后,您必须在 Snowflake 中准备代理的环境和定义。这包括创建必要的数据库对象并在单个 JSON 对象中定义代理的逻辑。该定义会指定代理的指令、其工具(如 Cortex Analyst 和 Cortex Search)以及这些工具的资源。架构定义遵循 Cortex Agent API 请求正文架构,并在此基础上有所扩展。以下是 JSON 对象的顶层结构:

{
    "model": ...,
    "response_instruction": ...,
    "experimental": ...
    "tools": ...
    "tool_resources": ...
    "tool_choice": ...
    "starter_prompts": ...
}
Copy

将代理定义上传到 Snowflake 暂存区,并确保将使用该代理的所有最终用户都可以访问该定义。

您可以通过为搜索结果和对话指导设置两个可选字段来增强用户体验:

  • 通过在搜索工具的 tool_resources 定义中提供两个可选字段,可以为搜索引用来源提供人类可读的标题和指向源文档的直接链接:

    • title_column 是包含人类可读的文档标题的列。

    • id_column 是包含文档唯一标识符的列,Cortex Search 会使用该标识符来构建指向文档的链接。

  • 您可以在代理定义的顶层 starter_prompts 字段中提供入门提示,来指导用户提出问题。

    {
        ....
        "starter_prompts": ["prompt #1", "prompt #2", ...],
        ...
    }
    
    Copy

向最终用户授予所需权限

为了使最终用户成功在 Teams 中与 Cortex Agent 进行交互,他们的默认 Snowflake 角色(或其他指定角色)必须拥有所有底层对象的权限授予:

  • Cortex Agents 主题的 访问控制要求 部分中列出的所有授权

  • 包含代理 JSON 定义的暂存区 READ 访问权限

  • 在分配给代理的仓库的 USAGE

第 3 步:设置 Teams 应用程序并连接 Snowflake 账户

集成过程的最后一步,是设置 Microsoft Teams 应用程序并将其与将要使用的 Snowflake 用户连接。这一步需要完成以下任务:

  • 从 Teams 商店安装 Cortex Agents 应用程序

  • 将您的 Snowflake 账户连接到 Teams 应用程序

从 Teams 商店安装应用程序

所有用户都必须从 Microsoft Teams 商店安装 Cortex Agents 应用程序。要安装该应用程序,请在 Teams 应用商店中搜索 “Snowflake Cortex Agents”,然后点击 Add 即可安装该应用程序。

备注

根据贵组织的 Microsoft Teams 政策,Teams 管理员可能需要批准该应用程序才能提供给用户。有关说明,请参阅 Teams 管理中心中的应用程序管理和治理概述 (https://learn.microsoft.com/en-us/microsoftteams/manage-apps)。

将 Snowflake 账户连接到 Teams 应用程序

系统会提示在 Teams 中与 Cortex Agents 应用程序进行交互的第一个用户将其 Snowflake 账户连接到该应用程序。此用户必须在 Snowflake 中拥有 ACCOUNTADMIN 或 SECURITYADMIN 角色才能成功完成此步骤。

总而言之,每个用户在 Snowflake 中的默认角色都必须具有访问代理对象所需的权限,如 Cortex Agents 主题的 访问控制要求部分 所述,还必须具有访问包含代理 JSON 定义的暂存区和 USAGE 代理仓库的 READ 访问权限。(用户的默认角色由用户配置文件中的 DEFAULT_ROLE 设置指定。)

默认情况下,安全集成会阻止 Snowflake 的主要管理角色。因此,像 ACCOUNTADMIN 这样的管理角色,不能作为设置 Teams Bot 用户的默认角色。有关此限制的信息,请参阅 CREATE SECURITY INTEGRATION 主题中的 BLOCKED_ROLES_LIST

Snowflake 建议您创建一个具有所需权限的专用非管理角色,并将其设置为设置用户的默认角色。或者,使用 SECONDARY ROLES 机制在不更改用户的主要默认角色的情况下授予额外权限,如下所示:

GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('<integration_specific_role>');
Copy

要设置 Teams Bot,请按照以下步骤操作:

  1. 在提示“管理员需要为 Teams 激励功能配置 Snowflake”的通知下方,点击 I'm the Snowflake administrator 开始配置流程。

  2. 按提示提供 Snowflake 账户 URL。

    要查找此 URL,请登录 Snowsight,点击页面左下角的账户选择器。菜单顶部会显示 URL 的主机名部分,格式为 your-organization-your-account。完整 URL 格式为 your-organization-your-account.snowflakecomputing.cn

    配置向导会验证 URL 是否指向 Azure US 东部 2 区域的有效 Snowflake 实例,并确认您的用户是否有访问权限,以及是否具有所需的管理权限。

    备注

    您可能会看到一条警告,提示需要确保安全集成使用 “Microsoft 身份平台访问令牌 v2.0”。您可以放心地忽略此警告;因为 Snowflake 的安全集成令牌格式是兼容的。

  3. 验证通过后,此时将显示一个表单,要求提供以下配置详细信息:

    • 账户别名: 此 Snowflake 账户的易读名称,显示在 Teams 界面中,例如“销售分析”。

    • 代理定义路径: Snowflake 暂存区代理 JSON 定义文件的完全限定路径,格式为 @stage_name/path_to_definition_file,例如 @my_cortex_agents/my_agent.json

    • 默认仓库: 代理用来运行查询的 Snowflake 仓库的名称。

    输入此信息,然后点击 Finalize account configuration

设置通过最终验证后,Teams 应用程序将连接到您的 Snowflake 账户,代理即可使用。

小技巧

将 Snowflake 账户连接到 Cortex Teams 应用程序后,您可以使用具有必要权限的用户登录 Teams 应用程序及在聊天中执行“add new account”命令,即可将其他 Snowflake 账户连接到同一个应用程序。

使用 Cortex Agent

在完成集成设置后,该机器人将显示在 Microsoft Teams 界面中,用户可以通过私聊直接与其交互。用户只需使用自然语言提出问题,机器人便会基于 Snowflake 数据返回答案。

在 Microsoft 365 Copilot 中,用户可以在更广泛的工作流程中与代理进行交互,在 Copilot 界面内就能直接提问并获取与 Snowflake 数据相关的回答。

安全注意事项

Snowflake 为 Microsoft Teams 提供的 Cortex Agents 集成在设计上充分考虑了安全性,结合了 Snowflake 现有的安全功能以及 Microsoft Entra ID 的身份验证能力。该集成可确保用户数据的安全,同时通过 Snowflake 基于角色的访问控制 (RBAC) 系统控制访问权限。

端到端身份验证流程

要了解在 Microsoft Teams 中使用 Cortex Agents 集成的安全性影响,了解端到端身份验证流程非常重要。此过程涉及以下步骤:

  • 用户交互: 用户在 Microsoft Teams 中向 Snowflake Cortex Agents 机器人发送消息。

  • 身份验证触发: 机器人的后端服务(“客户端”应用程序)启动 OAuth 2.0 流程,将用户重定向到 Microsoft Entra ID。

  • 用户身份验证: 用户使用公司凭据登录其 Microsoft 账户,满足租户强制执行的任何 MFA 或条件访问策略。

  • 令牌签发: Entra ID 提供短期授权码。该机器人的后端安全地将此代码交换为 JWT 访问令牌。

  • 对 Snowflake 的 API 调用: 机器人后端调用 Snowflake Cortex Agents API,并在 Authorization: Bearer 标头中包含该访问令牌。

  • Snowflake 令牌验证: Snowflake 服务接收请求,并根据在 Snowflake 安全集成对象中定义的策略验证 JWT。

基于角色的访问控制

由于 Teams 集成在特定用户角色下使用 Cortex Agents API,因此所有 Cortex Agents 请求都会严格在用户 Snowflake 指定角色的权限范围内执行。该代理会继承现有的所有数据治理控制,包括:

  • 基于角色的访问控制: 代理只能访问用户角色允许的数据库、架构、表和仓库。

  • 动态数据掩码策略: 代理遵守动态数据掩码策略,仅在用户角色允许时才授予访问权限。

  • 行级访问策略: 代理强制执行行级安全策略。

该代理无法绕过任何现有的 Snowflake 安全控制,用户也无法访问其未获授权查看的数据。

当前限制

以下限制适用于 Microsoft Teams 预览版的 Cortex Agents 集成。Snowflake 计划在未来的版本中解决这些问题。

OAuth 身份提供商必须是 Entra ID

该集成仅支持 Microsoft Entra ID 作为身份验证提供商,并且需要在 Entra ID 用户和 Snowflake 用户之间存在一对一直接映射。使用其他 IdPs(例如 Snowflake 或 Okta)的组织目前无法使用此集成。

依赖默认用户角色

由于 Cortex Agents API 中的架构限制,集成的功能与每个用户的默认 Snowflake 角色相关联,Cortex Agents 根据身份验证期间建立的角色上下文来确定会话权限。因此,必须向用户的默认角色授予底层对象的所有必要权限,才能使代理正常运行。虽然 Snowflake 的 SECONDARY ROLES 功能可以帮助扩大数据访问权限,但主要执行上下文仍由用户的默认角色治理。

每个 Snowflake 账户仅支持一个代理定义

该集成提供了 Teams 集成实例和每个 Snowflake 账户的单个 Cortex Agent 定义之间的一对一映射。目前,您无法从一个 Snowflake 账户中公开多个不同的代理。

不支持多轮对话上下文

该集成目前不支持多轮对话上下文。来自 Teams 用户的每个查询都是独立的无状态事务。代理不会记住之前问题的上下文,用户需要在每次请求中明确表达需求。

故障排除

如果您在 Microsoft Teams 的 Cortex Agents 集成中遇到问题,请查看以下部分以获取可能的解决方案。

权限和访问权限问题

用户的默认角色必须具有访问代理使用或访问的对象所需的权限。由于访问问题导致的错误消息通常包含“database object does not exist or not authorized”。

对此类问题进行故障排除包括检查以下内容:

  • 用户的默认角色设置为具有所需权限的角色。

  • 用户的默认角色对代理的对象具有所需的权限,包括包含代理 JSON 定义的暂存区,以及分配给代理的仓库。

默认角色设置

故障排除访问问题的第一步是检查用户的默认角色设置。要验证此设置,请运行 DESCRIBE USER 命令并检查输出中的 DEFAULT_ROLE 属性。如果用户的默认角色不正确,请使用 ALTER USER 命令进行更改。

ALTER USER <user_name> SET DEFAULT_ROLE = '<correct_role>';
Copy

如果更改用户的主要 DEFAULT_ROLE 角色不可行,则可以使用 Snowflake 的次要角色机制。用户可以使用其主要角色和活动次要角色的组合权限执行操作。这允许为用户额外授予集成专用的角色,而不必更改主要角色。

要为 Cortex Agents 集成添加次要角色,请使用如下 SQL 命令。为确保您不会移除已分配给用户的任何次要角色,请在 DESCRIBE USER 的输出中记下 DEFAULT_SECONDARY_ROLES 属性。在添加特定于集成的角色时包括这些先前存在的角色。

DESCRIBE USER <user_name>;  -- take note of DEFAULT_SECONDARY_ROLES
GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('<pre_existing_role_1>', ....,
    '<integration_specific_role>');
Copy

所需权限

用户的默认角色(或默认的次要角色)必须拥有下述权限。

  • 通过 SNOWFLAKE.CORTEX_USER 角色访问 Cortex AI 函数。默认情况下,此角色会被授予 PUBLIC 角色,因此所有用户都可以访问 Cortex AI 函数。如果您的组织已从 PUBLIC 移除 SNOWFLAKE.CORTEX_USER,则必须将其明确授予代理运行的角色。

  • 如果代理使用 Cortex Analyst 工具,则该角色还必须具有以下权限:

    • 对语义模型涉及的所有数据库和架构具备 USAGE 权限

    • 对语义模型引用的所有表和视图具备 SELECT 权限

    • 对包含语义模型的暂存区具备 READ 访问权限

  • 如果代理使用 Cortex Search 服务,则该角色必须对所使用的特定服务具备 USAGE 权限。

安全集成问题

Snowflake 安全集成将 Microsoft Entra ID 租户连接到 Snowflake 账户。本节中的问题与安全集成有关。

OAuth 访问令牌无效(错误代码 390303)

此错误可能表示安全集成中的一个或多个属性值不正确,从而导致 Snowflake 无法验证从 Entra ID 收到的访问令牌。要纠正此问题,请检查安全集成中的以下字段。特别是,请确保租户 ID 在 URLs 中是正确的。

  • EXTERNAL_OAUTH_ISSUER: 必须将其设置为正确的 Entra ID 签发方 URL,格式为 https://login.microsoftonline.com/<tenant-id>/v2.0,其中 tenant-id 是贵组织的 Microsoft 租户 ID。

  • EXTERNAL_OAUTH_JWS_KEYS_URL: 必须将其设置为正确的 JWS 密钥 URL,格式为 https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys,其中 tenant-id 是贵组织的 Microsoft 租户 ID。

  • EXTERNAL_OAUTH_AUDIENCE_LIST: 这必须包括 Cortex Agents Bot OAuth Resource 应用程序(即应用程序 ID 5a840489-78db-4a42-8772-47be9d833efe)的正确受众。

使用 ALTER SECURITY INTEGRATION 命令更新任何不正确的值。

用户名或密码不正确(错误代码 390304)

此错误消息表明 Entra ID 发送的用户标识符与 Snowflake 中相应的用户记录不匹配,这通常是因为 Entra ID 没有精确映射到某个 Snowflake 用户。当 Snowflake 用户不存在(或者映射 UPN 或电子邮件地址不正确),或者映射解析为多个 Snowflake 用户时(例如,如果使用电子邮件地址执行映射且多个用户共享同一个地址),就会发生这种情况。

错误消息包括尝试登录的用户的 UPN 和电子邮件地址。使用此信息可使用 DESCRIBE USER 命令验证受影响用户的配置。确保用户 NAME 或 EMAIL 属性与 Entra ID 中相应用户的相同属性的值相匹配。如果使用电子邮件地址映射,请确保 Snowflake 账户中所有用户的电子邮件地址是唯一的。

角色未在访问令牌中列出或已被过滤掉(错误代码 390317)

当 Snowflake 无法根据 OAuth 访问令牌中的信息向用户分配角色时,就会发生此错误。访问令牌使用 session:role-any 范围进行配置,允许用户代入 Snowflake 中的任何分配角色。但是,必须明确配置安全集成才能允许这种行为。

使用 DESCRIBE SECURITY INTEGRATION 命令检查 EXTERNAL_OAUTH_ANY_ROLE_MODE 属性的值,然后将其更改为 ENABLEENABLE_FOR_LOGIN

DESCRIBE SECURITY INTEGRATION entra_id_cortex_agents_integration;

ALTER SECURITY INTEGRATION entra_id_cortex_agents_integration
    SET EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
Copy

未向此用户授予连接字符串中指定的角色(错误代码 390186)

当 Snowflake 安全集成不允许用户的默认角色使用安全集成时,就会出现此错误。

要解决此问题,请检查 DESCRIBE SECURITY INTEGRATION 输出中的以下属性:

  • EXTERNAL_OAUTH_ALLOWED_ROLES_LIST:如果已启用该参数,请验证它是否包含用户的默认角色。

  • EXTERNAL_OAUTH_BLOCKED_ROLES_LIST:如果已启用该参数,请验证它是否不包含用户的默认角色。

语言: 中文