fix(snowflake): improve commands examples and readability

This commit is contained in:
Michele Cereda
2025-07-30 18:06:46 +02:00
parent 4e248489a6
commit a023236739
2 changed files with 48 additions and 34 deletions

View File

@@ -153,7 +153,8 @@ CREATE USER IF NOT EXISTS data_service TYPE='SERVICE'
-- Change user attributes -- Change user attributes
ALTER USER bob SET DEFAULT_WAREHOUSE = NULL; ALTER USER bob SET DEFAULT_WAREHOUSE = NULL;
ALTER USER my_service_user SET TYPE = SERVICE; ALTER USER my_service_user UNSET PASSWORD; ALTER USER some_service_user SET TYPE = SERVICE;
ALTER USER some_service_user UNSET PASSWORD;
-- Show permissions users have -- Show permissions users have
SHOW GRANTS TO USER CLAUDE; SHOW GRANTS TO USER CLAUDE;
@@ -161,22 +162,26 @@ SHOW GRANTS TO USER CLAUDE;
SHOW GRANTS ON USER CLAUDE; SHOW GRANTS ON USER CLAUDE;
-- Grant permissions to users -- Grant permissions to users
GRANT ROLE some_service_role TO USER some_service; GRANT ROLE some_service_role TO USER some_service_user;
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO USER mike; GRANT USAGE ON WAREHOUSE COMPUTE_WH TO USER mike;
-- Assign policies to users -- Assign policies to users
ALTER USER some_service SET AUTHENTICATION POLICY allow_pats_policy; ALTER USER some_service_user SET AUTHENTICATION POLICY allow_pats_policy;
ALTER USER some_service SET NETWORK_POLICY = allow_all_net_policy; ALTER USER some_service_user SET NETWORK_POLICY = allow_all_net_policy;
-- List PATs for users -- List PATs for users
SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER some_service_user; SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER some_service_user;
-- Generate PATs for users -- Generate PATs for users
-- 'ROLE_RESTRICTION' required for SERVICE users. Sets the role for the token. Must be uppercase.
-- 'DAYS_TO_EXPIRY' must be between 1 and 365. Cannot be modified later.
-- 'MINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT' and 'COMMENT' are optional.
ALTER USER nora ADD PROGRAMMATIC ACCESS TOKEN act_as_nora DAYS_TO_EXPIRY=15;
ALTER USER some_service_user ADD PROGRAMMATIC ACCESS TOKEN some_service_pat ALTER USER some_service_user ADD PROGRAMMATIC ACCESS TOKEN some_service_pat
ROLE_RESTRICTION='SOME_SERVICE_ROLE' -- Uppercase. Required for SERVICE users. Sets the role for the token. ROLE_RESTRICTION='SOME_SERVICE_ROLE'
DAYS_TO_EXPIRY=365 -- 1 <= X <= 365. Cannot be modified later. DAYS_TO_EXPIRY=365
MINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT=3 -- Optional MINS_TO_BYPASS_NETWORK_POLICY_REQUIREMENT=3
COMMENT='Some comment'; COMMENT='Some optional comment';
-- Rotate PATs for users -- Rotate PATs for users
ALTER USER some_service_user ROTATE PROGRAMMATIC ACCESS TOKEN some_service_pat; ALTER USER some_service_user ROTATE PROGRAMMATIC ACCESS TOKEN some_service_pat;
@@ -200,6 +205,9 @@ ALTER USER fred SET DISABLE_MFA=TRUE;
-- Unlock users -- Unlock users
ALTER USER greg SET MINS_TO_UNLOCK=0; ALTER USER greg SET MINS_TO_UNLOCK=0;
-- Disable users
ALTER USER heather SET DISABLED=TRUE;
-- Delete users -- Delete users
DROP USER snowman; DROP USER snowman;
``` ```
@@ -284,7 +292,7 @@ SHOW GRANTS ON USER CLAUDE;
Users can only be created by those with (or): Users can only be created by those with (or):
- The `USERADMIN` role or higher. - The `USERADMIN` role or higher.
- Roles granting them the CREATE USER capability on the account. - Roles granting them the `CREATE USER` capability on the account.
Add users to the account executing a SQL Query by means of Snowflake's web UI found in the `Account` section. Add users to the account executing a SQL Query by means of Snowflake's web UI found in the `Account` section.
@@ -424,6 +432,9 @@ One can generate programmatic access tokens for _human_ users (whose `TYPE` is `
PATs can be valid for up to 365 days. This is a security requirement on Snowflake's side. PATs can be valid for up to 365 days. This is a security requirement on Snowflake's side.
Each token is restricted to a single role.<br/>
Users that can assume multiple roles need to have a token **per each role** they want to use that way.
Tokens are _immutable_. Role restriction and expiry date **cannot** be changed later, requiring to rotate or recreate Tokens are _immutable_. Role restriction and expiry date **cannot** be changed later, requiring to rotate or recreate
the PAT instead. the PAT instead.
@@ -520,7 +531,7 @@ Procedure:
</details> </details>
1. \[semi-optionally] Assign it an authentication policy that allows using PATs. 1. \[semi-optional] Assign it an authentication policy that allows using PATs.
> [!important] > [!important]
> If no other policy limits a user's authentication methods (e.g., the user has assigned **no** authentication > If no other policy limits a user's authentication methods (e.g., the user has assigned **no** authentication
@@ -626,10 +637,16 @@ WARNING! Using --password via the CLI is insecure. Use environment variables ins
## Snowflake CLI ## Snowflake CLI
CLI tool for Snowflake.<br/>
Meant to replace the SnowSQL tool.
See [Snowflake CLI]. See [Snowflake CLI].
## RoleOut ## RoleOut
Project trying to accelerate the design and deployment of Snowflake environments through Infrastructure as Code.<br/>
Useful to view and configure the permissions matrix in a graphical way.
Refer [RoleOut]. Refer [RoleOut].
## Further readings ## Further readings

View File

@@ -6,7 +6,6 @@ Meant to replace the SnowSQL tool.
1. [TL;DR](#tldr) 1. [TL;DR](#tldr)
1. [Setup](#setup) 1. [Setup](#setup)
1. [Usage](#usage)
1. [Further readings](#further-readings) 1. [Further readings](#further-readings)
## TL;DR ## TL;DR
@@ -24,6 +23,10 @@ curl --continue-at '-' --location --fail --show-error --remote-name \
curl --continue-at '-' --location --fail --show-error --remote-name \ curl --continue-at '-' --location --fail --show-error --remote-name \
--url 'https://sfc-repo.snowflakecomputing.com/snowflake-cli/linux_aarch64/3.7.2/snowflake-cli-3.7.2.aarch64.rpm' \ --url 'https://sfc-repo.snowflakecomputing.com/snowflake-cli/linux_aarch64/3.7.2/snowflake-cli-3.7.2.aarch64.rpm' \
&& sudo rpm -i 'snowflake-cli-3.7.2.rpm' && sudo rpm -i 'snowflake-cli-3.7.2.rpm'
# Configure for the session via environment variables
export SNOWFLAKE_ACCOUNT='ABCDEFG-YZ01234' SNOWFLAKE_USER='JDOE' SNOWFLAKE_PASSWORD='SuperSecur3Pa$$word'
export SNOWFLAKE_CLI_LOGS_PATH='/Users/jondoe/snowcli_logs' SNOWFLAKE_DEFAULT_CONNECTION_NAME='myconnection'
``` ```
</details> </details>
@@ -44,10 +47,17 @@ snow connection list
# Add connections. # Add connections.
snow connection add snow connection add
snow --config-file 'my_config.toml' connection add \
-n 'myconnection2' --account 'myaccount2' --user 'jdoe2' --no-interactive
# Test connections. # Test connections.
snow connection test snow connection test
snow connection test -c 'connection-name' snow connection test -c 'connection-name'
snow connection test --temporary-connection --account 'account-id' --username 'login-name' --password 'password-or-pat'
snow --config-file='my_config.toml' connection test -c 'myconnection2' --enable-diag --diag-log-path "$HOME/report"
# Set the default connection
snow connection set-default 'myconnection2'
# Executes Snowflake queries. # Executes Snowflake queries.
snow sql snow sql
@@ -55,15 +65,17 @@ snow sql
</details> </details>
<!-- Uncomment if used
<details> <details>
<summary>Real world use cases</summary> <summary>Real world use cases</summary>
```sh ```sh
# Test credentials
snow connection test --temporary-connection --account 'ABCDEFG-YZ01234' --username 'JDOE' --password '<PAT>'
SNOWFLAKE_ACCOUNT='ABCDEFG-YZ01234' SNOWFLAKE_USER='JDOE' SNOWFLAKE_PASSWORD='SuperSecur3Pa$$word' snow \
connection test --temporary-connection
``` ```
</details> </details>
-->
## Setup ## Setup
@@ -161,33 +173,18 @@ Use the format `SNOWFLAKE_<config-section>_<variable>=<value>`, where:
SNOWFLAKE_CLI_LOGS_PATH='/Users/jondoe/snowcli_logs' snow … SNOWFLAKE_CLI_LOGS_PATH='/Users/jondoe/snowcli_logs' snow …
# Set the password for the 'myconnection' connection # Set the password for the 'myconnection' connection
SNOWFLAKE_CONNECTIONS_MYCONNECTION_PASSWORD='SomePassword' SNOWFLAKE_CONNECTIONS_MYCONNECTION_PASSWORD='SomePassword' snow …
# Set the default connection name # Set the default connection name
SNOWFLAKE_DEFAULT_CONNECTION_NAME='myconnection' SNOWFLAKE_DEFAULT_CONNECTION_NAME='myconnection' snow …
# Test credentials
SNOWFLAKE_ACCOUNT='ABCDEFG-YZ01234' SNOWFLAKE_USER='JDOE' SNOWFLAKE_PASSWORD='SuperSecur3Pa$$word' \
snow connection test --temporary-connection
``` ```
</details> </details>
## Usage
```sh
# Add connections
snow connection add
snow --config-file 'my_config.toml' connection add \
-n 'myconnection2' --account 'myaccount2' --user 'jdoe2' --no-interactive
# List connections
snow connection list
# Test connections
snow connection test
snow --config-file='my_config.toml' connection test -c 'myconnection2' --enable-diag --diag-log-path "$HOME/report"
# Set the default connection
snow connection set-default 'myconnection2'
```
## Further readings ## Further readings
- [Snowflake] - [Snowflake]