管理 Snowflake 连接¶
在使用 Snowflake CLI 之前,必须定义连接,指定 Snowflake CLI 如何连接到 Snowflake。在多个位置定义连接参数时,Snowflake CLI 会使用以下优先级层次来决定使用哪个值:
命令行参数
环境变量会覆盖特定的
config.toml参数,如SNOWFLAKE_CONNECTIONS_MYCONNECTION_PASSWORD手动或使用
snow connection add命令在config.toml文件中定义连接通用环境变量,如
SNOWFLAKE_USER。
您也可以使用 --temporary-connection 选项,该选项无需在 config.toml 中定义。
小心
为提高安全性,Snowflake 强烈建议使用 SNOWFLAKE_CONNECTIONS_<NAME>_PASSWORD 或 SNOWFLAKE_PASSWORD 环境变量。
定义连接¶
Connection definitions are stored in the [connections] section of the config.toml file, similar to the following block of code:
连接定义支持的配置选项与 Snowflake Connector for Python 中提供的相同。此外,还可以在文件顶部的 default_connection_name 变量中指定默认连接。不能将其包含在连接定义中。例如:
备注
对于 MacOS 和 Linux 系统,Snowflake CLI 要求 config.toml 文件将其文件权限限制为仅限文件所有者读写。要设置文件所需的文件权限,请执行以下命令:
备用配置文件¶
备注
对于 Snowflake CLI,Snowflake 建议您将 config.toml 文件用于配置定义。但是,如果需要,您可以使用 connections.toml 文件。
Snowflake CLI 还支持 connections.toml 配置文件。文件应该与 config.toml 文件放在同一个目录中,并且应该只包含连接。connections.toml 中的配置需要不同的部分名称,而不需要 connections。例如,[connections.myconnection] 将只是 [myconnection]。
备注
如果 config.toml 和 connections.toml 配置都包含连接,则 Snowflake CLI 仅使用来自 connections.toml 的配置。
使用 snow connection 命令管理连接或将其添加到 Snowflake¶
通过 snow connection 命令,您可以创建、管理和测试 Snowflake 连接。
添加连接¶
备注
如果您需要为 Snowflake Open Catalog 添加连接,请参阅 Open Catalog 文档中的 为 Open Catalog 创建 Snowflake CLI 连接。您可能需要为任务(例如配置 Open Catalog)添加此连接,才能使用 SSO。
要创建新连接并将其添加到 配置文件,请执行以下操作:
执行
snow connection add命令:When prompted, supply the required connection, account, and username parameters, as well as any other desired optional parameters. Note that additional parameters might be required depending on the authentication method you choose.
您还可以在命令行中为特定参数添加值,如下所示:
备注
如果命令结束时出现错误,例如 --private_key_file 选项引用了一个不存在的文件,则连接不会保存在 config.toml 配置文件中。
默认情况下,如果命令行未指定可选参数,snow connection add 命令会提示输入这些参数。如果想添加连接而不指定一些可选参数(如 account),并跳过交互式提示,则可以使用 --no-interactive 选项,如下所示:
添加连接后,您可以 测试连接,以确保其正常运行。
列出已定义的连接¶
要列出可用的连接,请输入 snow connection list 命令,如下所示:
测试和诊断连接¶
要测试连接是否能成功连接到 Snowflake,请输入 snow connection test 命令,类似于以下内容:
如果遇到连接问题,您可以直接在 Snowflake CLI 内运行诊断。Snowflake 支持部门也可能要求您提供此信息以帮助您解决连接问题。
诊断集合使用以下 snow connection test 命令选项:
--enable-diag,用于生成诊断报告。--diag-log-path,用于指定生成的报告的绝对路径。--diag-allowlist-path,用于指定包含 SYSTEM$ALLOWLIST() 或 SYSTEM$ALLOWLIST_PRIVATELINK() SQL 命令输出的 JSON 文件的绝对路径。只有在连接中定义的用户没有权限运行系统允许列表功能或连接账户 URL 失败时,才需要此选项。
以下示例为 myconnection2 连接生成诊断报告,并存储在 ~/report/SnowflakeConnectionTestReport.txt 文件中:
您可以查看报告以了解所有连接问题,并与网络团队讨论这些问题。您还可以向 Snowflake 支持部门提供报告以获得其他帮助。
添加连接¶
You can use the snow connection remove command to delete a specific connection, similar to the following:
设置默认连接¶
您可以使用 snow connection set-default 命令指定应使用哪个配置 Snowflake CLI 作为默认配置,如果已设置,则覆盖 default_connection_name 配置文件和 SNOWFLAKE_DEFAULT_CONNECTION_NAME 变量。
以下示例会将默认连接设置为 myconnection2:
备注
如果同时存在 connections.toml 和 config.toml 文件,Snowflake CLI 只会使用 connections.toml 中定义的连接。
为 Snowflake 凭据使用环境变量¶
您可以在系统环境变量而不是配置文件中指定 Snowflake 凭据。只能使用以下通用环境变量指定连接参数:
SNOWFLAKE_ACCOUNTSNOWFLAKE_USERSNOWFLAKE_PASSWORDSNOWFLAKE_DATABASESNOWFLAKE_SCHEMASNOWFLAKE_ROLESNOWFLAKE_WAREHOUSESNOWFLAKE_AUTHENTICATORSNOWFLAKE_PRIVATE_KEY_PATHSNOWFLAKE_PRIVATE_KEY_RAWSNOWFLAKE_SESSION_TOKENSNOWFLAKE_MASTER_TOKENSNOWFLAKE_TOKENSNOWFLAKE_TOKEN_FILE_PATHSNOWFLAKE_OAUTH_CLIENT_IDSNOWFLAKE_OAUTH_CLIENT_SECRETSNOWFLAKE_OAUTH_AUTHORIZATION_URLSNOWFLAKE_OAUTH_TOKEN_REQUEST_URLSNOWFLAKE_OAUTH_REDIRECT_URISNOWFLAKE_OAUTH_SCOPESNOWFLAKE_OAUTH_DISABLE_PKCESNOWFLAKE_OAUTH_ENABLE_REFRESH_TOKENSSNOWFLAKE_OAUTH_ENABLE_SINGLE_USE_REFRESH_TOKENSSNOWFLAKE_CLIENT_STORE_TEMPORARY_CREDENTIALSNOWFLAKE_WORKLOAD_IDENTITY_PROVIDER
向 snow 命令传递连接参数¶
您可以在需要连接的每条 snow 命令中直接传递连接参数。有关连接配置参数的完整列表,请执行 snow sql --help 命令,如下所示。请注意,输出结果只会显示连接配置选项部分。
小心
为提高安全性,Snowflake 强烈建议使用 SNOWFLAKE_CONNECTIONS_<NAME>_PASSWORD 或 SNOWFLAKE_PASSWORD 环境变量。
从 SnowSQL 导入连接¶
Snowflake CLI is an open-source command-line tool explicitly designed for developer-centric workloads in addition to SQL operations. Snowflake CLI is a more modern, robust, and efficient CLI client than legacy SnowSQL. In addition to executing SQL commands with Snowflake CLI, you can also execute commands for other Snowflake products like Streamlit in Snowflake, Snowpark Container Services, and Snowflake Native App Framework. Because new features and enhancements will be added only to Snowflake CLI, Snowflake recommends that you begin transitioning from SnowSQL to Snowflake CLI.
To import any existing connections defined in SnowSQL into your Snowflake CLI config.toml configuration file, use the snow helpers import-snowsql-connections command.
To import SnowSQL connections, enter the snow helpers import-snowsql-connections command similar to the following code block that imports SnowSQL connections from the standard configuration file locations:
该命令在处理 SnowSQL 配置文件时,会显示进度,并在 Snowflake CLI config.toml 文件中已经定义了同名连接时提示确认:
For more information about this command, see the snow helpers import-snowsql-connections command reference.
For help with migrating from SnowSQL to Snowflake CLI, see Migrating from SnowSQL to Snowflake CLI.
使用临时连接¶
You can also specify connection parameters from the command line using the --temporary-connection [-x] option. It ignores all definitions from the config.toml, using ones specified by command-line options instead. This approach can be helpful for CI/CD use cases when you don't want to use a configuration file. When you use a temporary connection, Snowflake CLI ignores any connection variables defined in the config.toml file, but does still use any of the following environment variables you set:
SNOWFLAKE_ACCOUNTSNOWFLAKE_USERSNOWFLAKE_PASSWORDSNOWFLAKE_DATABASESNOWFLAKE_SCHEMASNOWFLAKE_ROLESNOWFLAKE_WAREHOUSESNOWFLAKE_AUTHENTICATORSNOWFLAKE_PRIVATE_KEY_FILESNOWFLAKE_PRIVATE_KEY_RAWSNOWFLAKE_PRIVATE_KEY_PATHSNOWFLAKE_SESSION_TOKENSNOWFLAKE_MASTER_TOKENSNOWFLAKE_TOKEN_FILE_PATHSNOWFLAKE_AUTHENTICATOR
以下示例显示如何使用用户名和密码创建临时连接。此示例假设您将密码存储在 SNOWFLAKE_PASSWORD 环境变量中。
小心
为提高安全性,Snowflake 强烈建议使用 SNOWFLAKE_CONNECTIONS_<NAME>_PASSWORD 或 SNOWFLAKE_PASSWORD 环境变量。
为了提高安全性,您可以使用 私钥文件 并将私钥文件的路径存储在 SNOWFLAKE_PRIVATE_KEY_FILE 环境变量中,如下所示:
然后,您可以在不指定选项的情况下创建临时连接,如下所示:
使用 CI/CD 管道和密钥对身份验证时,您可能无法访问本地私钥文件 (SNOWFLAKE_PRIVATE_KEY_FILE)。在这种情况下,您可以将私钥存储在 SNOWFLAKE_PRIVATE_KEY_RAW 环境变量中,如下所示:
然后,您可以在不指定选项的情况下创建临时连接,如下所示:
备注
如果您使用 SNOWFLAKE_PRIVATE_KEY_RAW 环境变量,则不得同时定义 SNOWFLAKE_PRIVATE_KEY_FILE。
对连接进行身份验证的其他方法¶
您还可以使用以下方法对您与 Snowflake 的连接进行身份验证:
使用私钥文件进行身份验证¶
要使用私钥文件进行身份验证,连接配置需要将 authenticator 参数设置为 SNOWFLAKE_JWT,并提供包含私钥的文件路径,类似于以下内容:
在
snow connection add命令中指定--private_key-file选项,如下所示:使用配置文件:
有关配置密钥对身份验证的详细信息,请参阅 密钥对身份验证和密钥对轮换。
Snowflake CLI 按以下顺序在连接参数中查找私钥:
如果已指定
private_key_file,则 Snowflake CLI 从指定的文件路径读取密钥。如果已指定
private_key_path,则 Snowflake CLI 从指定的文件路径读取密钥。如果未指定
private_key_file或private_key_path,则 Snowflake CLI 直接从private_key_raw参数读取密钥。
小心
如果您在 private_key_raw 参数中指定私钥,Snowflake 建议使用 SNOWFLAKE_CONNECTIONS_<NAME>_PRIVATE_KEY_RAW 或 SNOWFLAKE_PRIVATE_KEY_RAW 环境变量,以提高安全性。
备注
如果私钥受加密短语保护,请将 PRIVATE_KEY_PASSPHRASE 环境变量设置为该加密短语。
使用 OAuth 身份验证¶
要使用 OAuth 进行连接,您可以执行以下任一操作:
在
snow connection add命令中指定--token-file-path选项,如下所示:In the
config.tomlfile, setauthenticator = "OAUTH", and add thetoken_file_pathparameter to the connection definition, as shown:
使用 OAuth 2.0 客户端凭据流程¶
OAuth 2.0 客户端凭据流程为机器对机器 (M2M) 身份验证提供了一种安全的方式,例如连接后端服务的 Snowflake Connector for Python。与 OAuth 2.0 授权码流程不同,此方法不依赖于任何用户特定的数据。有关此流程及其参数的更多信息,请参阅 Snowflake Connector for Python 文档中的 启用 OAuth 2.0 客户端凭据流程。
要使用 OAuth 2.0 客户端凭据流程,请在 config.toml 文件中添加类似于以下内容的连接定义:
使用多重身份验证 (MFA)¶
要使用 MFA,请执行以下步骤:
Set up multi-factor authentication in Snowflake and set the
authenticatorparameter toSNOWFLAKE(which is a default value).如果您想使用 Duo 生成的密码来代替推送机制,可以使用
--mfa-passcode <passcode>选项,或者在config.toml文件中设置passcode_in_password = true,并在密码中包含通过代码,如 将 MFA 与 Python 配合使用 中所述。备注
如果要使用密码中的通过代码进行身份验证,在执行第一条
snow命令后,只要令牌有效,就无法再提供通过代码。您必须执行以下操作:从密码中移除通过代码。
删除
config.toml文件中的passcode_in_password = true或向其添加注释。
使用 MFA 缓存¶
MFA 缓存是一项安全功能,可降低登录期间多重身份验证 (MFA) 提示的频率。频繁 MFA 提示可能会干扰工作流程并降低工作效率。MFA 缓存通过在指定时间段内安全存储 MFA 会话信息来解决此问题。使用 MFA 缓存让您在缓存会话时间范围内无需重复输入 MFA 代码即可进行身份验证。
要启用 MFA 缓存,请执行以下操作:
为您的账户设置
ALLOW_CLIENT_MFA_CACHING = true。In your
config.tomlfile, addauthenticator = "USERNAME_PASSWORD_MFA"to your connection.
有关更多信息,请参阅 使用 MFA 令牌缓存,最大限度地减少身份验证过程中的提示次数 – 可选。
使用 SSO(单点登录)¶
如果 已将 Snowflake 配置为使用单点登录 (SSO),则可将客户端应用程序配置为使用 SSO 进行身份验证。有关详细信息,请参阅 为连接到 Snowflake 的客户端应用程序使用 SSO,并根据 Python 说明配置您的连接。
使用外部浏览器¶
您可以使用您的浏览器,通过任何符合 SAML 2.0 的身份提供商 (IdP)(例如 Okta 或 Active Directory 联合身份验证服务)对您的 Snowflake CLI 连接进行身份验证。
备注
externalbrowser 身份验证器仅在具有 Web 浏览器访问权限的终端窗口中受支持。例如,通过 SSH (Secure Shell) 会话访问的远程计算机上的终端窗口可能需要额外的设置才能打开 Web 浏览器。
如果您无权访问 Web 浏览器,但您的 IdP 是 Okta,则可以将身份验证器设置为 https://<okta_account_name>.okta.com,以使用原生 Okta。
要使用外部浏览器身份验证,请使用以下方法之一:
使用
snow connection add --authenticator命令选项:Set
authenticatortoEXTERNALBROWSERin yourconfig.tomlfile:
使用 PAT(编程访问令牌)¶
编程访问令牌 (PAT) 是特定于 Snowflake 的身份验证方法。必须先为账户启用该功能,然后才能使用(有关更多信息,请参阅 先决条件)。使用 PAT 进行身份验证不涉及任何人类交互。
要在连接中使用 PAT,请将 authenticator 设置为 PROGRAMMATIC_ACCESS_TOKEN 并将 token_file_path 设置为指向包含令牌的文件,如下所示:
有关 PATs 的更多信息,请参阅 用于身份验证的编程访问令牌。
Use workload identity federation (WIF)¶
Workload identity federation (WIF) is a feature that allows you to use your CI/CD environment's identity to authenticate to Snowflake without the need for static credentials. This is particularly useful in automated workloads, where you want to minimize the risk of credential exposure.
有关 PATs 的更多信息,请参阅 用于身份验证的编程访问令牌。
设置默认连接¶
To set up a WIF connection, you need to create a service account in Snowflake using the following steps:
Create a service user in Snowflake with the proper WORKLOAD_IDENTITY:
Configure a connection in Snowflake CLI using either of the following methods
Add the connection to the
config.tomlfile执行
snow connection add命令:
其中:
<provider type>is one of the following:
AWS
AZURE
GCP
OIDC
备注
When using OIDC as a provider, you need to retrieve the token from your environment and provide it to cli. You can provide retrieved token via
SNOWFLAKE_PRIVATE_KEY_RAWSNOWFLAKE_TOKEN_FILE_PATHSNOWFLAKE_CONNECTIONS_<connection_name>_TOKENenvironment variable删除
config.toml文件中的passcode_in_password = true或向其添加注释。
有关更多信息,请参阅 使用 MFA 令牌缓存,最大限度地减少身份验证过程中的提示次数 – 可选。
使用临时连接¶
To connect to Snowflake using a temporary connection, you can use the following command: