用户管理¶
用户管理员可以通过 SQL 或 Web 界面创建和管理 Snowflake 用户:
使用 SQL,管理员可以执行所有与用户相关的任务,包括更改用户的登录凭据和默认值。
Snowsight 支持大多数与用户相关的任务。
Classic Console 不支持所有与用户相关的任务,但提供了一个向导,用于创建用户和执行常见的活动,例如重置用户密码。
本主题内容:
创建和修改用户所需的权限¶
管理账户中的用户需要以下角色或权限:
- 创建用户:
USERADMIN 系统角色可以使用 SQL (CREATE USER) 创建用户。
要为此目的使用自定义角色,请将账户的 CREATE USER 权限授予此角色。
- 修改用户:
角色只有拥有用户的 OWNERSHIP 权限或更高权限,才能使用 SQL (ALTER USER) 修改大多数用户属性。此外,角色必须具有全局 CREATE USER 权限。
密码策略¶
密码策略指定创建和重置密码以向 Snowflake 进行身份验证所必须满足的要求。
Snowflake 为密码策略提供两个选项:
内置的密码策略,可简化初始用户配置过程。
架构级别的密码策略对象,可以根据用户管理员的用例和需求,在 Snowflake 账户级别、单个用户级别或同时在这两个级别上进行设置。
有关最佳实践和每个密码策略选项的详细信息,请参阅:
密码策略和密码的最佳实践¶
Snowflake 推荐以下有关密码和密码策略的最佳实践:
- 创建并强制执行自定义密码策略
在账户或用户上设置密码策略后,强制实施密码策略对象。
将这些属性设置为符合内部安全需求的值。有关详细信息,请参阅 第 4 步:创建密码策略 (本主题内容):
PASSWORD_HISTORY
可确保用户不能过于频繁地重复使用密码,并可防止通过暴力破解攻击来确定用户密码。PASSWORD_MIN_AGE_DAYS
要求用户使用新密码。不建议设置 0 值,因为用户可能会更改密码以耗尽密码历史记录,并过早地重复使用原始密码值。
如果要求用户在首次或下次登录 Snowflake 时更改其密码以符合密码策略,请使用 ALTER USER 命令将用户的
MUST_CHANGE_PASSWORD
属性设置为TRUE
。有关详细信息,请参阅 第 6 步:要求更改密码 (本主题内容)。
- 需要强密码
定义账户级密码策略需要强密码。
强密码至少有 8 个字符,包括大小写字母、特殊字符(如
!
和*
)和数字的组合。- MFA
使用 MFA(多重身份验证) 来提高安全性。
- 使用 SCIM
您可以在 SCIM API 请求中为用户设置访问 Snowflake 的密码。SCIM 管理员和用户管理员应选择在身份提供商中 或 使用 Snowflake 中的密码策略来管理用于访问 Snowflake 的用户密码。
目前,使用 SCIM 配置到 Snowflake 的用户需要其密码符合 默认的 Snowflak 密码策略。如果选择使用此密码策略功能,则可以绕过此要求。
要绕过默认密码策略要求,请按照“使用密码策略”章节(本主题内容)中的说明进行操作。
- 监控密码
要监控密码,请执行以下操作:
查询 Snowflake Account Usage USERS 视图,以确定给定用户的
HAS_PASSWORD
列值是否返回TRUE
。查询 Snowflake Account Usage LOGIN_HISTORY 视图,并评估
FIRST_AUTHENTICATION_FACTOR
列。如果用户访问 Snowflake 不需要密码,请执行 ALTER USER 命令将password
属性设置为 NULL。
Snowflake 提供的密码策略¶
密码可以是任何区分大小写的字符串,最多 256 个字符,包括空格和特殊字符(即非字母数字),例如感叹号 (!
)、百分号 (%
) 和星号 (*
)。
在 初始用户创建 过程中,可以为不符合以下最低要求的用户设置弱密码(例如 'test12345'
)。通过此功能,管理员可以选择在创建过程中为用户使用通用密码。如果选择此途径,Snowflake 强烈 建议将 MUST_CHANGE_PASSWORD
属性设置为 TRUE
,以便要求用户在下次登录(包括首次登录)时将密码更改为 Snowflake。
此外,Snowflake 允许创建没有初始密码的用户,以便对不允许新用户登录系统的业务流程提供支持。如果发生这种情况,用户的 PASSWORD
属性值将为 NULL
。但是,作为一般规则,Snowflake 希望使用初始密码创建用户。
在 重置现有密码 (例如,将 'test12345'
更改为 'q@-*DaC2yjZoq3Re4JYX'
)的情况下,Snowflake 强制要求在使用 ALTER USER 命令和 Web 界面时遵循以下最低密码策略要求:
长度必须至少有 8 个字符。
必须包含至少 1 位数字。
必须包含至少 1 个大写字母和 1 个小写字母。
Snowflake 强烈 建议遵循以下准则来创建尽可能强的密码:
为 Snowflake 创建唯一密码(不要重复使用其他系统或账户的密码)。
使用 8 个以上字符。
包括多个随机大小写混合的字母、数字和特殊字符,包括空格。
不要使用容易猜到的常用密码、名称、数字或日期。
最后,要为用户登录配置更高级别的安全性,Snowflake 建议用户 注册 MFA。
账户和用户的自定义密码策略¶
自定义密码策略是一个架构级别的对象,它指定了创建和重置密码以向 Snowflake 进行身份验证所必须满足的要求,包括成功输入密码的尝试次数,以及重试密码之前的分钟数(即“锁定”时间)。
密码的密码策略要求包括大写或小写字母、特殊字符、数字和密码长度,以满足用户和客户端向 Snowflake 进行身份验证的安全要求。需要强密码的密码策略有助于满足安全准则和法规。
Snowflake 支持为 Snowflake 账户和个人用户设置密码策略。在给定时间只能为 Snowflake 账户或用户设置一个密码策略。如果存在 Snowflake 账户的密码策略,并且为同一 Snowflake 账户中的用户设置了另一个密码策略,则用户级别的密码策略优先于账户级别的密码策略。
密码策略适用于 Snowflake 账户中设置的新密码。要确保使用现有密码的用户满足密码策略要求,请要求用户在下次登录 Snowflake 时更改其密码,如 第 6 步:要求更改密码 (本主题内容)中所示。
备注
每个密码策略参数都需要一个 ALTER USER 语句将 MUST_CHANGE_PASSWORD
属性设置为 TRUE
,以便要求用户在下次登录 Snowflake 时更新其密码,使其符合密码策略参数值。
但是,以下参数是例外情况:
PASSWORD_MAX_AGE_DAYS = integer
PASSWORD_MAX_AGE_DAYS = integer
PASSWORD_LOCKOUT_TIME_MINS = integer
这些参数是有状态参数。有状态的参数意味着一旦命令执行完毕,参数值就会生效。无需运行 ALTER USER ...SET MUST_CHANGE_PASSWORD 命令,前提是 CREATE PASSWORD POLICY 或 ALTER PASSWORD POLICY 语句仅包含一个或多个有状态参数。
请注意,使用 ALTER PASSWORD POLICY 命令更改有状态参数值 不会 影响当前会话。例如,如果将 PASSWORD_MAX_AGE_DAYS
参数的值更改为导致用户当前密码过期的数字,则在下次登录 Snowflake 时,用户将更改其密码。Snowflake 不会强制用户在当前会话中更改密码。
注意事项¶
不支持对密码策略进行 未来授权。
为解决此问题,请向自定义角色授予 APPLY PASSWORD POLICY 权限,以允许该角色对用户或 Snowflake 账户应用密码策略。
密码策略可以使用 SnowSQL 或支持的 驱动程序或连接器 通过 SQL 进行 管理,也 可以在 Worksheets 中使用 Classic Console 或 Snowsight 进行管理。
-
Classic Console、SnowSQL 和支持的连接器和驱动程序:
执行 ALTER USER 命令或使用 Classic Console 重置或更改密码时,Snowflake 会评估密码策略,以确保新创建的密码符合密码策略要求。
跟踪密码策略使用情况:
查询 Account Usage PASSWORD_POLICIES 视图,为 Snowflake 账户中的每个密码策略返回一行。
使用 Information Schema 表函数 POLICY_REFERENCES 为分配给指定密码策略的每个用户返回一行,并为分配给 Snowflake 账户的密码策略返回一行。
当前,密码策略仅支持以下语法:
POLICY_REFERENCES( POLICY_NAME => '<password_policy_name>' )
其中,
password_policy_name
是密码策略的完全限定名称。例如,执行以下查询,为分配了名为
password_policy_prod_1
的密码策略的每个用户返回一行,该策略存储在名为my_db
的数据库和名为my_schema
的架构中:SELECT * FROM TABLE( my_db.information_schema.policy_references( POLICY_NAME => 'my_db.my_schema.password_policy_prod_1' ) );
使用密码策略¶
以下步骤是 Snowflake 中定义和设置密码策略的代表性指南。
这些步骤假设采用集中管理方法,其中名为 policy_admin
的自定义角色拥有密码策略(即具有密码策略的 OWNERSHIP 权限),并负责在账户或用户上设置密码策略(即具有全局 APPLY PASSWORD POLICY 权限,如 第 2 步 中所示)。
第 1 步:创建自定义角色¶
创建自定义角色,该角色允许创建和管理密码策略。在本主题中,示例自定义角色命名为 policy_admin
,尽管该角色可以有任何合适的名称。
如果自定义角色已存在,请继续下一步。
否则,请创建 policy_admin
自定义角色。
USE ROLE USERADMIN; CREATE ROLE policy_admin;
第 2 步:授予自定义角色权限¶
如果 policy_admin
自定义角色尚不具有以下权限,请授予这些权限,如下所示:
包含密码策略的数据库和架构的 USAGE 权限。
用于存储密码策略的架构的 CREATE PASSWORD POLICY 权限。
账户的 APPLY PASSWORD POLICY 权限。
USE ROLE SECURITYADMIN;
GRANT USAGE ON DATABASE security TO ROLE policy_admin;
GRANT USAGE ON SCHEMA security.policies TO ROLE policy_admin;
GRANT CREATE PASSWORD POLICY ON SCHEMA security.policies TO ROLE policy_admin;
GRANT APPLY PASSWORD POLICY ON ACCOUNT TO ROLE policy_admin;
如果决定设置用户的密码策略,请授予用户的 APPLY PASSWORD POLICY 权限。例如,如果用户名为 JSMITH
,则执行以下命令。
GRANT APPLY PASSWORD POLICY ON USER jsmith TO ROLE policy_admin;
有关更多信息,请参阅 DDL 命令、操作和权限总结。
第 3 步:向用户授予自定义角色¶
将 policy_admin
自定义角色授予负责管理密码策略的用户。
USE ROLE SECURITYADMIN;
GRANT ROLE policy_admin TO USER jsmith;
有关更多信息,请参阅 配置访问控制
第 4 步:创建密码策略¶
使用 policy_admin
自定义角色,创建名为 password_policy_prod_1
的密码策略。有关更多信息,请参阅 CREATE PASSWORD POLICY。
USE ROLE policy_admin; USE SCHEMA security.policies; CREATE PASSWORD POLICY PASSWORD_POLICY_PROD_1 PASSWORD_MIN_LENGTH = 12 PASSWORD_MAX_LENGTH = 24 PASSWORD_MIN_UPPER_CASE_CHARS = 2 PASSWORD_MIN_LOWER_CASE_CHARS = 2 PASSWORD_MIN_NUMERIC_CHARS = 2 PASSWORD_MIN_SPECIAL_CHARS = 2 PASSWORD_MIN_AGE_DAYS = 1 PASSWORD_MAX_AGE_DAYS = 999 PASSWORD_MAX_RETRIES = 3 PASSWORD_LOCKOUT_TIME_MINS = 30 PASSWORD_HISTORY = 5 COMMENT = 'production account password policy';备注
将属性
PASSWORD_MAX_AGE_DAYS
设置为最大值 999。选择一个符合内部准则的值。有关详细信息,请参阅 CREATE PASSWORD POLICY。
第 5 步:设置账户或个人用户的密码策略¶
使用 ALTER ACCOUNT 命令设置账户策略:
ALTER ACCOUNT SET PASSWORD POLICY security.policies.password_policy_prod_1;
如果决定为一个或多个用户创建其他密码策略,请使用 ALTER USER 命令为用户设置用户级密码策略:
ALTER USER jsmith SET PASSWORD POLICY security.policies.password_policy_user;
重要
要替换已为账户或用户设置的密码策略,请先取消设置密码策略,然后为账户或用户设置新的密码策略。例如:
ALTER ACCOUNT UNSET PASSWORD POLICY; ALTER ACCOUNT SET PASSWORD POLICY security.policies.password_policy_prod_2;
第 6 步:要求更改密码¶
使用 ALTER USER 语句将个人用户的 MUST_CHANGE_PASSWORD
属性设置为 TRUE
,以便要求用户在下次登录 Snowflake 时更改其密码以符合密码策略。
ALTER USER JSMITH SET MUST_CHANGE_PASSWORD = true;
第 7 步:将密码策略复制到目标账户¶
可以使用数据库复制和账户复制将密码策略及其参考(即对用户或账户的分配)从源账户复制到目标账户。有关详细信息,请参阅:
管理密码策略¶
Snowflake 提供以下一组权限和 DDL 来管理密码策略:
Snowflake 提供以下 DDL 命令来管理密码策略对象:
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
权限 |
用途 |
---|---|
CREATE PASSWORD POLICY |
允许创建新密码策略。 |
APPLY PASSWORD POLICY |
允许在账户或用户级别应用密码策略。 |
OWNERSHIP |
授予对密码策略的完全控制权。需要更改密码策略的大多数属性。 |
DDL 命令、操作和权限总结¶
下表总结了密码策略 DDL 操作及其所需权限之间的关系。
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
操作 |
需要权限 |
---|---|
创建密码策略 |
角色具有架构的 CREATE PASSWORD POLICY 权限,用于存储密码策略。 |
更改密码策略 |
角色具有密码策略的 OWNERSHIP 权限。 |
删除密码策略 |
角色具有密码策略的 OWNERSHIP 权限。 |
描述密码策略 |
角色具有密码策略 OWNERSHIP 权限 或 . 具有账户 APPLY PASSWORD POLICY 权限。 |
显示密码策略 |
角色具有密码策略 OWNERSHIP 权限 或 . 具有账户 APPLY PASSWORD POLICY 权限。 |
设置和取消设置密码策略 |
角色具有账户或用户的 APPLY PASSWORD POLICY 权限。 |
用户角色¶
Snowflake 使用角色来控制用户可以访问的对象(虚拟仓库、数据库、表等):
Snowflake 提供一组预定义的角色,以及用于定义自定义角色层次结构的框架。
所有 Snowflake 用户都自动分配了预定义的 PUBLIC 角色,该角色支持登录 Snowflake 和访问基本对象。
除了 PUBLIC 角色之外,还可以为每个用户分配其他角色,其中一个角色可指定为 默认角色。用户的默认角色决定了用户发起的 Snowflake 会话中使用的角色;但这只是默认角色。用户可以随时更改会话中的角色。
可以在用户创建之时或之后分配角色。
创建用户¶
您可以使用 Snowsight、Classic Console 或 SQL 创建用户。
备注
无论使用 Classic Console 或 Snowsight,Web 界面都要求在创建用户时指定密码。CREATE USER 命令则不会。
有关 Snowflake 中密码的更多信息,请参阅 密码策略 (本主题内容)
使用 Snowsight¶
登录 Snowsight。
选择 Admin » Users & Roles。
选择 + User。
在 User Name 字段中,输入用户的唯一标识符。除非您指定登录名,否则用户将使用此标识符登录 Snowflake。
(可选)在 Email 字段中指定用户的电子邮件地址。
在 Password 和 Confirm Password 字段中,输入用户的密码。
(可选)添加注释,解释创建用户的原因。
选中 Force user to change password on first time login 复选框,以强制用户在登录时更改其密码。
(可选)选择 Advanced User Options 以指定有关用户的其他详细信息:
登录 Snowflake 时要使用的是 Login Name,而不是 User Name。
登录后显示 Display Name。
First Name 和 Last Name 用于填写用户简介。
Default Role、Default Warehouse 和 Default Namespace。
选择 Create User。
使用 Classic Console¶
选择 Create。
在 User Name 字段中,输入用户的唯一标识符。
备注
用户名是 Snowflake 中用户的唯一标识符。它 不是 用户的登录名(即用户登录 Snowflake 时输入的名称)。如果需要,Snowflake 允许用户拥有不同的用户名和登录名。在下一个屏幕上为用户指定登录名。
在 Password 和 Confirm Password 字段中,输入用户的密码。
选中 Force Password Change 复选框,以强制用户在下次登录时更改其密码,否则,取消选中该复选框。
选择 Next。Advanced 屏幕打开。
(可选)输入用户的 Login Name、Display Name 和个人信息。
备注
用户需要登录名才能登录 Snowflake;如果没有显式提供登录名,Snowflake 将使用他们的用户名作为登录名。
选择 Next。Preferences 屏幕打开。
(可选)输入用户的默认值:
虚拟仓库
db_name
或db_name.schema_name
形式的命名空间角色
选择 Finish。Snowflake 显示成功消息。
使用 SQL¶
使用 CREATE USER 命令创建用户。
重要
在创建用户时,如果为用户分配了默认角色,则必须将此角色显式授予用户。例如:
CREATE USER janesmith PASSWORD = 'abc123' DEFAULT_ROLE = myrole MUST_CHANGE_PASSWORD = TRUE; GRANT ROLE myrole TO USER janesmith;
请注意,GRANT ROLE 命令允许为单个用户分配多个角色。Web 界面目前不支持相同的功能。
重置用户密码¶
管理员可以通过 Web 界面或使用 SQL 更改用户的密码。
使用 Snowsight¶
使用 Classic Console¶
备注
用户只能通过 Classic Console 更改自己的密码。有关更多信息,请参阅 更改密码/切换(会话)角色/注销。
使用 SQL¶
使用 ALTER USER 命令输入用户密码。例如:
ALTER USER janesmith SET PASSWORD = 'H8MZRqa8gEe/kvHzvJ+Giq94DuCYoQXmfbb$Xnt' MUST_CHANGE_PASSWORD = TRUE;
还可以利用 ALTER USER ...RESET PASSWORD 语法来生成要与用户共享的 URL。URL 将打开一个网页,用户可以在其中输入新密码。例如:
ALTER USER janesmith RESET PASSWORD;备注
生成的 URL 仅限使用一次,4 小时后过期。
执行 ALTER USER ...RESET PASSWORD 语句不会使当前密码无效。在设置新密码之前,用户可以继续使用旧密码。
重置管理员密码¶
账户管理员(即具有 ACCOUNTADMIN 角色的用户)可以使用 重置用户密码 中所述的过程重置自己的密码。
如果账户管理员的账户已锁定,则具有 ACCOUNTADMIN 角色的其他用户可以重置已锁定的管理员的密码。如果管理员已锁定,并且没有其他管理员可以更改密码,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge) 以重置密码。
禁用用户的密码更改功能¶
通过点击右上角(登录名旁边)的下拉菜单 » Change Password,用户可以在 Web 界面中更改 Snowflake 密码。Select a New Password 对话框随即打开。该对话框接受当前密码和新密码。
您可以选择禁用账户中用户更改自己密码的功能。账户管理员可以使用 Account » Users 下的 Web 界面,或通过 SQL 使用 ALTER USER 命令继续更改用户密码。
要请求此更改,请联系 Snowflake 支持部门 (https://community.snowflake.com/s/article/How-To-Submit-a-Support-Case-in-Snowflake-Lodge)。
禁用或启用用户¶
禁用用户将阻止用户登录 Snowflake。可以通过 Web 界面或使用 SQL 禁用用户。
使用 Snowsight¶
要启用用户,请执行相同的步骤,但选择 Enable User。
使用 Classic Console¶
要启用用户,请执行相同的步骤,但选择 Enable User。
使用 SQL¶
使用 ALTER USER 命令禁用或启用用户。例如:
禁用用户:
ALTER USER janesmith SET DISABLED = TRUE;
启用用户:
ALTER USER janesmith SET DISABLED = FALSE;
解锁用户¶
如果用户在连续五次尝试后登录失败,则系统会在一段时间(目前为 15 分钟)内为用户锁定其账户。这段时间过去后,系统将自动解除锁定,用户可以尝试再次登录。
要在这段时间过去之前解锁用户,可以使用 ALTER USER 命令重置计时器。
以下示例将计时器重置为 0,这将立即解锁用户 janesmith
:
ALTER USER janesmith SET MINS_TO_UNLOCK= 0;
小技巧
如果一个角色具有所有 Snowflake 用户的 OWNERSHIP 权限,建议将该角色授予多个用户。这样,如果锁定了该角色的某个成员,另一个成员可以解锁该用户。
更改用户的会话参数¶
要显示用户的会话参数,请使用以下 SQL 语法:
SHOW PARAMETERS [ LIKE '<pattern>' ] FOR USER <name>
要更改用户的会话参数,请使用以下语法:
ALTER USER <name> SET <session_param> = <value>
例如,允许用户无限期地保持连接到 Snowflake 而不会超时:
ALTER USER janesmith SET CLIENT_SESSION_KEEP_ALIVE = TRUE;
要将用户的会话参数重置为默认值,请使用以下语法:
ALTER USER <name> UNSET <session_param>
修改其他用户属性¶
可以使用 ALTER USER 命令修改所有其他用户属性。您可以使用 Snowsight 修改许多相同的用户属性。
例如:
将用户
janesmith
的姓更改为Jones
:设置或更改用户
janesmith
的默认仓库、命名空间、主要角色和辅助角色:- SQL:
ALTER USER janesmith SET DEFAULT_WAREHOUSE = mywarehouse DEFAULT_NAMESPACE = mydatabase.myschema DEFAULT_ROLE = myrole DEFAULT_SECONDARY_ROLES = ('ALL');
- Snowsight:
备注
不能为使用 Snowsight 的用户设置默认辅助角色。
查看用户¶
可以使用 SQL 或 Snowsight 查看有关用户的信息。
使用 SQL¶
使用 DESCRIBE USER 或 SHOW USERS 命令可查看有关一个或多个用户的信息。
例如:
DESC USER janeksmith;
使用 Snowsight¶
删除用户¶
删除用户也会从 Snowflake 中删除用户凭据。
小心
删除用户时,也会删除该用户拥有的工作表和仪表板。
要保留对用户拥有的工作表的访问权,您有两个选项:
删除用户后,最多恢复用户拥有的 500 个工作表。
删除用户之前,用户可以与其他用户 共享工作表或工作表文件夹,并授予他们编辑权限,或将工作表的内容复制到其他用户拥有的工作表。
系统不会删除用户创建的对象(如表或视图),因为在创建对象时,这些对象属于用户的活跃角色。在 角色层次结构 中分配了相同角色或更高角色的其他用户可以管理对象或将所有权转让给其他角色。
使用 Snowsight¶
使用 Classic Console¶
使用 SQL¶
使用 DROP USER 命令可删除用户。
DROP USER janesmith;