跳到主要内容

将 Perplexity 与 Snowflake 连接

将您的 Snowflake 数据仓库与 Perplexity 集成,实现跨数据库、模式、表和视图的即时搜索

撰写者 Emilio Morales

关于 Snowflake 连接器

Snowflake 连接器让您可以直接在 Perplexity 中查询 Snowflake 数据仓库中的数据。您可以跨 Snowflake 数据库、其他已连接的应用以及网页搜索并整合信息——无需手动编写 SQL,也无需切换到 Snowflake 控制台。

 

可在以下平台使用 Perplexity Pro, Perplexity Max, Enterprise Pro,以及 Enterprise Max“. 连接 Snowflake 是按用户进行的——除非你将数据同步到共享项目,否则组织中的其他任何人都无法查询你的数据。”

 

本指南介绍该连接器的工作方式、如何选择身份验证方法、如何配置角色和只读访问,以及分步设置流程。如果你只想走最快路径:大多数组织应使用 用户 OAuth — 跳转到 设置指南

 

连接器可以访问的内容

启用后,连接器会安全地连接到你的 Snowflake 账户,并允许你搜索你有权查看的数据库、模式、表和视图。当你的 Snowflake 数据发生变化时,连接器会在你下次查询时自动反映这些变化。

 

支持的数据对象:

  • 表格

  • 视图和物化视图

  • 模式

  • 数据库

  • 结构化数据(由 CSV、JSON 和 Parquet 支持的表格)

不支持非结构化数据(存储在 Snowflake stage 中的图片、音频和视频)。

 

选择身份验证方式

Snowflake 身份验证有两个独立维度: 查询以(身份)运行,并 如何 该身份通过凭据进行验证。Perplexity 在目录中提供了两个连接器,每个都对应一组推荐的组合:

  • Snowflake(用户 OAuth) — 每位 Perplexity 用户都使用各自的 Snowflake 账户登录(TYPE = PERSON通过 OAuth。 适用于大多数组织。

  • Snowflake — 所有 Perplexity 用户都通过一个共享服务帐户进行查询(TYPE = SERVICE)使用密钥对。对于没有各自 Snowflake 账户的终端用户,请使用此方式。

 

推荐:用户 OAuth

使用用户 OAuth 后,每个人都会使用自己的凭据进行身份验证,查询会在其原生 Snowflake 权限下运行,并且你可以获得清晰的按用户审计轨迹——无需共享服务账号,也无需在 Perplexity 中重新创建你的基于角色的访问控制(RBAC)。这也与 Snowflake 自身的方向一致:其托管 MCP server 仅支持 OAuth 2.0 today.

“注意:” 使用 OAuth 时,访问令牌在登录时会绑定到一个主角色——用户的 DEFAULT_ROLE”。为确保用户能够访问其已获授权的所有内容,请配置次要角色(参见 用户 OAuth 角色配置).

 

备用方案:服务账户(密钥对)

共享服务账户(TYPE = SERVICE + 键对)适用于以下情况:

  • 你的终端用户没有各自的 Snowflake 账户(例如,通过 Perplexity 进行查询但没有直接 Snowflake 访问权限的企业用户)。

  • 您希望所有 Perplexity 查询都以单一共享身份运行,以便更轻松地进行审计。

  • 您正在设置内部或测试环境,在此环境中不需要按用户身份进行识别。

使用专用的、范围受限的角色配置服务账户——请参见 服务账号角色配置

关于程序访问令牌(PAT)的说明: Snowflake 也支持 PAT 凭据,并且连接器可以接受这些凭据。我们 为新配置推荐使用 PAT —— 令牌会按较短周期过期,并且在创建时就硬绑定到单一角色,因此本指南中的所有示例都使用密钥对。如果必须使用 PAT,请设置 ROLE_RESTRICTION 在创建时分配给您的专属 Perplexity 角色。

 

配置角色和访问权限

用户 OAuth 角色配置

OAuth 会话以用户的…开始 DEFAULT_ROLE 作为主要角色;当前会话内不支持切换角色,且 Perplexity 不会显示角色选择器。因此,无论每位用户已设置了什么 DEFAULT_ROLEDEFAULT_SECONDARY_ROLES 正是他们的 Perplexity 会话所使用的内容。

 

在安全集成级别一次性设置此项:

OAUTH_USE_SECONDARY_ROLES = IMPLICIT

Snowflake 的 该参数的默认值为 NONE”,这意味着 OAuth 会话仅使用主角色处于激活状态。将其设置为 IMPLICIT 会通知 Snowflake 也为每位用户启用其 DEFAULT_SECONDARY_ROLES 自动地。没有它,用户只能看到通过他们的 DEFAULT_ROLE — 这很少是你想要的。

 

然后处理以下两种情况之一:

 

情况 A — 用户已经有角色默认设置。 “如果你的用户的” DEFAULT_ROLEDEFAULT_SECONDARY_ROLES 如果已经按你的要求设置好了,就无需再做任何操作。The IMPLICIT 只需进行设置——每位用户现有的默认设置就是其 Perplexity 会话所使用的设置。

 

情况 B — 用户尚未设置角色默认值。 通过设置,为每个会话授予该用户所有已授予角色的并集 DEFAULT_ROLEPUBLICDEFAULT_SECONDARY_ROLESALL:

ALTER USER <username> SET DEFAULT_ROLE = PUBLIC, DEFAULT_SECONDARY_ROLES = ('ALL');

“注意:” 自 Snowflake 于 2024 年 8 月的变更以来, DEFAULT_SECONDARY_ROLES = ('ALL') 是新创建用户的默认设置,因此许多组织已经将其设为此项。运行 DESC USER <username> 在更改任何内容之前先检查。

 

服务账号角色配置

服务账号是一个专用用户,运行在某个特定角色下——通常 PERPLEXITY_ROLE"。The PUBLIC + ('ALL') OAuth 使用的模式 在此处应用。相反,请设置服务用户的 DEFAULT_ROLE 将您分配到专属角色,并仅授予该角色 Perplexity 所需的权限。这遵循 Snowflake 的 服务账号最佳实践

 

用于创建此用户的完整 SQL 位于 设置指南 below.

 

(可选)通过 OAuth 限制可使用的角色

要限制用户可通过 Perplexity OAuth 集成进行身份验证的 Snowflake 角色,请在安全集成级别进行范围控制:

  • PRE_AUTHORIZED_ROLES_LIST — 通过此集成允许的角色白名单。

  • BLOCKED_ROLES_LIST — 此集成中被阻止的角色黑名单。

ALTER SECURITY INTEGRATION PERPLEXITY_OAUTH
SET PRE_AUTHORIZED_ROLES_LIST = ('ANALYST_ROLE', 'READ_ONLY_ROLE');

使用此功能可保留敏感角色(例如 ACCOUNTADMIN") 完全移出 OAuth 流程。

 

控制 Perplexity 可执行的操作

连接器通过工具界面执行 SQL(来源于 合并 Snowflake 连接器"). The Snowflake(用户 OAuth) 连接器提供细粒度的命名工具——包括一个专用的只读查询工具(execute_sql_readonly)只接受 SELECT, WITH, SHOW, DESCRIBE, EXPLAIN, VALUES,以及 LIST”,并拒绝 DDL/DML 以及多语句输入。该服务账号 Snowflake 连接器提供一个通用的 execute_sql 可接受任意 SQL 的工具,包括 DDL 和 DML。

 

Snowflake RBAC 是权威控制机制。 无论调用哪个工具,查询都会在您配置允许的角色下运行,因此在 Snowflake 角色级别强制只读是可靠的最后防线——也是服务账户连接器的唯一强制边界。

 

推荐模式——使用专用角色强制只读。 提供诸如以下角色: PERPLEXITY_READ_ONLY 仅授予 USAGESELECT 在你希望 Perplexity 查询的数据库、模式和表上,并且会 授权 INSERT, UPDATE, DELETE, CREATE, DROP, OWNERSHIP”,或仓库 MODIFY”。然后确保用户以该角色进行身份验证:

  • 将其设为用户的 DEFAULT_ROLE",或

  • 将 OAuth 集成的作用范围限定为 PRE_AUTHORIZED_ROLES_LIST 和/或排除具有写入权限的角色,使用 BLOCKED_ROLES_LIST (见 通过 OAuth 限制可使用的角色).

采用这种方式配置 RBAC 后,Snowflake 会拒绝 Perplexity 的任何写入尝试,无论调用的是哪种工具。

“注意:” 连接器设置包括一个 工具权限 可用工具列表面板。在 Snowflake(用户 OAuth) connector,您可以缩小可暴露的工具范围——对于只读设置,请仅启用读取工具(例如 execute_sql_readonly, list_*, describe_*, get_*") 以将写入/DDL 工具从界面中移除。请将其视为纵深防御,而不是权威边界:真正可靠地强制访问控制的是 Snowflake RBAC(如上)。”

 

隐私和数据安全

连接后,Snowflake 连接器可以代表您执行以下操作:

  • 在你的 Snowflake 数据上执行 SQL 查询

  • 查询 Cortex Search 和 Cortex Analyst

  • 运行自定义 UDF 和存储过程

如果您在 Snowflake 中撤销访问权限或移除角色,这些数据将立即无法从 Perplexity 访问。如果您在 Perplexity 中断开 Snowflake 连接,您可以选择保留或删除任何缓存数据。

 

企业级安全与控制

对于 Enterprise 组织,Perplexity 提供 SOC 2 Type II 认证、端到端加密、严格的数据隐私措施以及精细的用户访问控制。您的 Snowflake 数据绝不会用于 AI 训练。

 

连接 Snowflake 是按用户进行的——组织中的其他任何人都无法查询你的数据。不过,如果你将数据同步到共享项目,任何有该项目访问权限的人都可以搜索这些数据。

 

组织管理员可以从以下位置为所有用户启用或禁用该连接器: 权限 组织设置中的屏幕。读/写强制由 Snowflake 角色级别处理(参见 控制 Perplexity 可执行的操作).

 

设置指南

选择与您的身份验证方式匹配的路径:

  • 用户 OAuth(推荐): 组织管理员只需配置一次 OAuth 应用,然后用户各自单独登录。直接跳转到 将 Snowflake 连接到 Perplexity — 步骤 1–6 中的 SQL 仅适用于服务账号设置。

  • 服务账号(密钥对): 按照步骤 1–6 运行 SQL 设置,然后在第 7 步连接。

 

前提条件

  • ACCOUNTADMIN 角色(或具有 CREATE USERGRANT 特权)

  • 已在本地安装 OpenSSL(macOS 预装)— 仅适用于服务账号设置

 

步骤 1:生成密钥对(服务账号)

在终端中生成 RSA 私钥:

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out snowflake_computer_key.p8 -nocrypt

然后生成对应的公钥:

openssl rsa -in snowflake_computer_key.p8 -pubout -out snowflake_computer_key.pub

 

第 2 步:创建角色和仓库

USE ROLE ACCOUNTADMIN;

-- Create a dedicated role
CREATE ROLE IF NOT EXISTS PERPLEXITY_ROLE
COMMENT = 'Role for Perplexity service account';

-- Create a warehouse (or use an existing one)
CREATE WAREHOUSE IF NOT EXISTS PERPLEXITY_WAREHOUSE
WAREHOUSE_SIZE = 'XSMALL'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE
COMMENT = 'Warehouse for Perplexity queries';

-- Grant warehouse usage to the role
GRANT USAGE ON WAREHOUSE PERPLEXITY_WAREHOUSE TO ROLE PERPLEXITY_ROLE;

 

步骤 3:创建服务账号用户

以以下身份运行 ACCOUNTADMIN。替换 RSA_PUBLIC_KEY 你的内容中的值 snowflake_computer_key.pub 文件(不包括页眉和页脚行)。

USE ROLE ACCOUNTADMIN;

CREATE USER PERPLEXITY_USER
TYPE = SERVICE
DEFAULT_ROLE = PERPLEXITY_ROLE
DEFAULT_WAREHOUSE = PERPLEXITY_WAREHOUSE
COMMENT = 'Service account for Perplexity'
RSA_PUBLIC_KEY = 'MIIBIjANBgkqhki...your_public_key_here...IDAQAB';

-- Grant the dedicated role to the service account
GRANT ROLE PERPLEXITY_ROLE TO USER PERPLEXITY_USER;

“注意:” TYPE = SERVICE 这会将其标记为非人工账户——请不要设置密码。 DEFAULT_ROLE = PERPLEXITY_ROLE 将其限定为一个专用角色,仅授予 Perplexity 所需的权限。

 

第 4 步:授予对您数据的访问权限

-- Grant access to a specific database
GRANT USAGE ON DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;

-- Grant access to all schemas in a database (current and future)
GRANT USAGE ON ALL SCHEMAS IN DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;
GRANT USAGE ON FUTURE SCHEMAS IN DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;

-- Grant read access to all tables and views (current and future)
GRANT SELECT ON ALL TABLES IN DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;
GRANT SELECT ON FUTURE TABLES IN DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;
GRANT SELECT ON ALL VIEWS IN DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;
GRANT SELECT ON FUTURE VIEWS IN DATABASE MY_DATABASE TO ROLE PERPLEXITY_ROLE;

如需更有选择性的访问,请参阅 Snowflake GRANT 文档

 

第 5 步:授予查询历史和访问历史的权限

Perplexity 在以下两个视图中使用 SNOWFLAKE.ACCOUNT_USAGE 用于构建 Data Map 以实现准确查询生成的 schema:

查看

用途

QUERY_HISTORY

查询元数据、性能和使用模式

ACCESS_HISTORY

对象级审计日志(仅限 Enterprise 版)

USE ROLE ACCOUNTADMIN;
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO ROLE PERPLEXITY_ROLE;

“注意:” ACCESS_HISTORY 仅适用于 Snowflake Enterprise Edition 或更高级别;Perplexity 会回退到 QUERY_HISTORY 在 Standard Edition 上自动执行。跳过此步骤会降低查询准确性。有关 Perplexity 如何使用这些视图,请参见 了解数据地图

验证访问权限

USE ROLE ACCOUNTADMIN;
GRANT ROLE PERPLEXITY_ROLE TO USER <your_username>;
USE ROLE PERPLEXITY_ROLE;
USE WAREHOUSE PERPLEXITY_WAREHOUSE;
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY LIMIT 5;
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY LIMIT 5;

 

第 6 步:(可选)允许列入白名单的 IP 地址

如果你的 Snowflake 账户按 IP 限制入站连接,请将来自以下来源的 IP 加入允许列表: 此页面:

USE ROLE ACCOUNTADMIN;
CREATE NETWORK POLICY PERPLEXITY_COMPUTER_POLICY
ALLOWED_IP_LIST = (...US IPs from the link above...);
ALTER USER PERPLEXITY_USER SET NETWORK_POLICY = PERPLEXITY_COMPUTER_POLICY;

 

第 7 步:将 Snowflake 连接到 Perplexity

对于用户 OAuth:请先完成管理员设置

如果您的组织使用 OAuth,则由组织管理员配置 Snowflake(用户 OAuth) connector 连接一次,之后各个用户才能进行身份验证。在 组织设置 → 连接器 → Snowflake(用户 OAuth)”,管理员会看到一个三步面板:

  1. 管理 OAuth 应用 — 在你的 Snowflake 账户中将 Perplexity 注册为 OAuth 客户端。本文将指导你创建一个自定义的 Snowflake SECURITY INTEGRATION 并将生成的 Client ID 和 Client Secret 粘贴回 Perplexity。

  2. 使用 Snowflake 进行身份验证(用户 OAuth) — 管理员只需进行一次身份验证,以确认集成可端到端正常运行。

  3. 生成数据映射(可选) — 可选择为组织生成数据映射(见 了解数据地图)并添加补充上下文以提高准确性。

在第 1 步,在 Snowflake 端创建安全集成。请按以下方式运行: ACCOUNTADMIN:

USE ROLE ACCOUNTADMIN;
CREATE SECURITY INTEGRATION PERPLEXITY_OAUTH
TYPE = OAUTH
ENABLED = TRUE
OAUTH_CLIENT = CUSTOM
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://ah.merge.dev/oauth/callback'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000
OAUTH_USE_SECONDARY_ROLES = IMPLICIT
COMMENT = 'OAuth security integration for Perplexity';

检索客户端 ID 和客户端密钥并粘贴回 Perplexity:

SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('PERPLEXITY_OAUTH');

管理员设置完成后,个人用户可以按照以下步骤进行连接。

 

连接(所有用户)

用户只能看到与其管理员配置的连接器相匹配的身份验证方式。

  1. 前往 连接器 在设置中找到 SnowflakeSnowflake(用户 OAuth) connector.

  2. 点击 启用 → 添加连接器

  3. 使用你已配置的方法进行身份验证(见下文)。

  4. 点击 允许 以完成设置。

密钥对身份验证(Snowflake 连接器)。 输入你的 Snowflake 账户标识符、用户名和私钥(snowflake_computer_key.p8).

 

OAuth(Snowflake(用户 OAuth)连接器) 您将被重定向到 Snowflake 进行登录。没有角色选择器——您的会话将使用您的 DEFAULT_ROLE 作为主要角色,与你的 DEFAULT_SECONDARY_ROLES 通过……激活 OAUTH_USE_SECONDARY_ROLES = IMPLICIT“.如果你的角色默认设置已配置,则无需执行任何操作。”

如果您的会话缺少您预期看到的数据,请让您的 Snowflake 管理员验证您的 DEFAULT_ROLEDEFAULT_SECONDARY_ROLES (见 用户 OAuth 角色配置).

 

使用你的 Snowflake 数据

连接后,即可在以下位置引用你的 Snowflake 数据: Computer 对话。提及数据库、模式或表,Perplexity 就会将它们作为多步骤工作流的一部分进行查询——全部在安全的云沙盒中异步执行。可以尝试如下查询:

  • “总结第四季度销售表中的收入趋势并突出关键指标”

  • “查找过去 30 天内更新的所有客户记录”

  • “根据分析 schema,哪些产品表现最佳?”

  • “将本季度的销售漏斗数据与上季度的数据进行对比”

 

故障排除

你的组织未启用 Snowflake

如果你所在的 Enterprise 组织中无法启用该连接器,可能是管理员已将其禁用。请联系你们组织的管理员,或联系 Perplexity support。

连接和身份验证问题

  • 验证 Perplexity 的 IP 地址已被加入 Snowflake 网络策略的允许列表。

  • 确认该角色拥有 USAGE 所需仓库、数据库和架构的权限。

  • 在任何策略变更后,请用户重新连接该连接器。

“私钥无效”错误

请确保你粘贴的是私钥(snowflake_computer_key.p8),而不是公钥。文件应以 -----BEGIN PRIVATE KEY-----.

当前身份验证策略拒绝了身份验证

运行 SHOW AUTHENTICATION POLICIES 作为 ACCOUNTADMIN 并确保 PERPLEXITY_USER 受包含以下内容的保单保障 KEYPAIR“. 如有需要:

CREATE AUTHENTICATION POLICY PERPLEXITY_AUTH_POLICY
AUTHENTICATION_METHODS = ('KEYPAIR')
CLIENT_TYPES = ('DRIVERS');
ALTER USER PERPLEXITY_USER SET AUTHENTICATION POLICY PERPLEXITY_AUTH_POLICY;

OAuth:用户在连接后只能看到有限数据

OAuth 会话使用用户的 DEFAULT_ROLE 作为主角色,辅以通过以下方式激活的次级角色 OAUTH_USE_SECONDARY_ROLES = IMPLICIT。如果用户缺少预期的访问权限:

  • 确认安全集成已 OAUTH_USE_SECONDARY_ROLES = IMPLICIT.

  • 运行 DESC USER <username> 并检查 DEFAULT_ROLEDEFAULT_SECONDARY_ROLES — 该会话将严格使用其中配置的内容。

  • “如果用户没有按用户配置的角色设置,并且你希望他们访问分配给他们的所有内容,请设置” DEFAULT_ROLE = PUBLICDEFAULT_SECONDARY_ROLES = ('ALL').

  • 在更改这些设置中的任何一项后,让他们断开并重新连接连接器,以颁发新的令牌。

“ACCESS_HISTORY” 视图返回错误

确认您的 Snowflake 账户为 Enterprise Edition 或更高级别。

ACCOUNT_USAGE 视图权限不足

验证 GRANT IMPORTED PRIVILEGES 以……身份运行 ACCOUNTADMIN 以及 PERPLEXITY_ROLE 授予该用户。

密钥对身份验证失败

重新运行 DESC USER PERPLEXITY_USER 以确认公钥指纹已填充。

 

如果更新这些设置后问题仍然存在,请联系 Perplexity 支持以获取帮助。