关于 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_ROLE 和 DEFAULT_SECONDARY_ROLES 正是他们的 Perplexity 会话所使用的内容。
在安全集成级别一次性设置此项:
OAUTH_USE_SECONDARY_ROLES = IMPLICIT
Snowflake 的 该参数的默认值为 NONE”,这意味着 OAuth 会话仅使用主角色处于激活状态。将其设置为 IMPLICIT 会通知 Snowflake 也为每位用户启用其 DEFAULT_SECONDARY_ROLES 自动地。没有它,用户只能看到通过他们的 DEFAULT_ROLE — 这很少是你想要的。
然后处理以下两种情况之一:
情况 A — 用户已经有角色默认设置。 “如果你的用户的” DEFAULT_ROLE 和 DEFAULT_SECONDARY_ROLES 如果已经按你的要求设置好了,就无需再做任何操作。The IMPLICIT 只需进行设置——每位用户现有的默认设置就是其 Perplexity 会话所使用的设置。
情况 B — 用户尚未设置角色默认值。 通过设置,为每个会话授予该用户所有已授予角色的并集 DEFAULT_ROLE 至 PUBLIC 和 DEFAULT_SECONDARY_ROLES 至 ALL:
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 仅授予 USAGE 和 SELECT 在你希望 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 USER和GRANT特权) -
已在本地安装 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:
|
查看 |
用途 |
|
|
查询元数据、性能和使用模式 |
|
|
对象级审计日志(仅限 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)”,管理员会看到一个三步面板:
-
管理 OAuth 应用 — 在你的 Snowflake 账户中将 Perplexity 注册为 OAuth 客户端。本文将指导你创建一个自定义的 Snowflake
SECURITY INTEGRATION并将生成的 Client ID 和 Client Secret 粘贴回 Perplexity。 -
使用 Snowflake 进行身份验证(用户 OAuth) — 管理员只需进行一次身份验证,以确认集成可端到端正常运行。
-
生成数据映射(可选) — 可选择为组织生成数据映射(见 了解数据地图)并添加补充上下文以提高准确性。
在第 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');
管理员设置完成后,个人用户可以按照以下步骤进行连接。
连接(所有用户)
用户只能看到与其管理员配置的连接器相匹配的身份验证方式。
-
前往 连接器 在设置中找到 Snowflake 或 Snowflake(用户 OAuth) connector.
-
点击 启用 → 添加连接器。
-
使用你已配置的方法进行身份验证(见下文)。
-
点击 允许 以完成设置。
密钥对身份验证(Snowflake 连接器)。 输入你的 Snowflake 账户标识符、用户名和私钥(snowflake_computer_key.p8).
OAuth(Snowflake(用户 OAuth)连接器) 您将被重定向到 Snowflake 进行登录。没有角色选择器——您的会话将使用您的 DEFAULT_ROLE 作为主要角色,与你的 DEFAULT_SECONDARY_ROLES 通过……激活 OAUTH_USE_SECONDARY_ROLES = IMPLICIT“.如果你的角色默认设置已配置,则无需执行任何操作。”
如果您的会话缺少您预期看到的数据,请让您的 Snowflake 管理员验证您的 DEFAULT_ROLE 和 DEFAULT_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_ROLE和DEFAULT_SECONDARY_ROLES— 该会话将严格使用其中配置的内容。 -
“如果用户没有按用户配置的角色设置,并且你希望他们访问分配给他们的所有内容,请设置”
DEFAULT_ROLE = PUBLIC和DEFAULT_SECONDARY_ROLES = ('ALL'). -
在更改这些设置中的任何一项后,让他们断开并重新连接连接器,以颁发新的令牌。
“ACCESS_HISTORY” 视图返回错误
确认您的 Snowflake 账户为 Enterprise Edition 或更高级别。
ACCOUNT_USAGE 视图权限不足
验证 GRANT IMPORTED PRIVILEGES 以……身份运行 ACCOUNTADMIN 以及 PERPLEXITY_ROLE 授予该用户。
密钥对身份验证失败
重新运行 DESC USER PERPLEXITY_USER 以确认公钥指纹已填充。
如果更新这些设置后问题仍然存在,请联系 Perplexity 支持以获取帮助。
