使用密码¶
本主题介绍管理员如何配置密码要求和重置用户密码。
密码策略¶
密码策略指定创建和重置密码以向 Snowflake 进行身份验证所必须满足的要求。
Snowflake 为密码策略提供两个选项:
内置的密码策略,可简化初始用户配置过程。
架构级别的密码策略对象,可以根据用户管理员的用例和需求,在 Snowflake 账户级别、单个用户级别或同时在这两个级别上进行设置。
密码策略和密码的最佳实践¶
Snowflake 推荐以下有关密码和密码策略的最佳实践:
- 创建并强制执行自定义密码策略
在账户或用户上设置密码策略后,强制实施密码策略对象。
将这些属性设置为符合内部安全需求的值。有关详细信息,请参阅 第 4 步:创建密码策略 (本主题内容):
PASSWORD_HISTORY
可确保用户不能过于频繁地重复使用密码,并可防止通过暴力破解攻击来确定用户密码。PASSWORD_MIN_AGE_DAYS
要求用户使用新密码。不建议设置 0 值,因为用户可能会更改密码以耗尽密码历史记录,并过早地重复使用原始密码值。
如果要求用户在首次或下次登录 Snowflake 时更改其密码以符合密码策略,请使用 ALTER USER 命令将用户的
MUST_CHANGE_PASSWORD
属性设置为TRUE
。有关详细信息,请参阅 :ref:`label-password_policy_require_change`(本主题内容)。
- 需要强密码
定义账户级密码策略需要强密码。
强密码至少有 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 步:要求更改密码 (本主题内容)中所示。
备注
大多数密码策略属性更改将在用户下次更改密码时生效。例如,如果您将 PASSWORD_MAX_LENGTH
属性从 10
更改为 16
,要求用户使用更长的密码,则每当用户更改密码时,他们必须遵守密码策略变更。您可以使用 ALTER USER 语句将用户属性 MUST_CHANGE_PASSWORD
设置为 TRUE
,要求用户在下次登录 Snowflake 时更改密码。
但是,某些密码策略属性更改会在下次登录时生效,因为 Snowflake 不会强制用户在当前会话中更改密码:
PASSWORD_MAX_AGE_DAYS = integer
PASSWORD_MAX_RETRIES = integer
PASSWORD_LOCKOUT_TIME_MINS = integer
对这些属性的任何更改都 不 会影响当前会话。例如,更改 PASSWORD_MAX_AGE_DAYS
属性的值不会导致用户当前密码过期。但是,在下次登录 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' ) );
密码策略访问控制¶
以下访问控制权限允许用户使用密码策略:
权限 |
对象类型 |
用途 |
---|---|---|
CREATE PASSWORD POLICY |
架构 |
允许创建新密码策略。 |
APPLY PASSWORD POLICY |
账户、用户 |
允许在账户或用户级别应用密码策略。 |
OWNERSHIP |
密码策略 |
授予对密码策略的完全控制权。需要更改密码策略的大多数属性。 |
下表总结了密码策略 DDL 操作及其所需权限之间的关系。
操作 |
需要权限 |
---|---|
创建密码策略 |
角色具有架构的 CREATE PASSWORD POLICY 权限,用于存储密码策略。 |
更改密码策略 |
角色具有密码策略的 OWNERSHIP 权限。 |
删除密码策略 |
角色具有密码策略的 OWNERSHIP 权限。 |
描述密码策略 |
角色具有密码策略 OWNERSHIP 权限 或 . 具有账户 APPLY PASSWORD POLICY 权限。 |
显示密码策略 |
角色具有密码策略 OWNERSHIP 权限 或 . 具有账户 APPLY PASSWORD POLICY 权限。 |
设置和取消设置密码策略 |
角色具有账户或用户的 APPLY PASSWORD POLICY 权限。 |
备注
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
DDL 命令¶
Snowflake 提供以下 DDL 命令来管理密码策略对象:
使用密码策略¶
以下步骤是 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;
有关更多信息,请参阅 密码策略访问控制。
第 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 = 14 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;
重置用户密码¶
管理员可以通过以下界面更改用户的密码。
使用 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 语句不会使当前密码无效。在设置新密码之前,用户可以继续使用旧密码。
使用 Python¶
Snowflake Python APIs 中的 UserResource.create_or_alter 方法目前不支持更改现有用户的 password
。只有在创建新用户时才能使用此方法设置密码。
重置管理员密码¶
账户管理员(即具有 ACCOUNTADMIN 角色的用户)可以使用 重置用户密码 中所述的过程重置自己的密码。
如果账户管理员的账户已锁定,则具有 ACCOUNTADMIN 角色的其他用户可以重置已锁定的管理员的密码。如果管理员已锁定,并且没有其他管理员可以更改密码,请联系 Snowflake 支持部门 以重置密码。
禁用用户的密码更改功能¶
通过点击右上角(登录名旁边)的下拉菜单 » Change Password,用户可以在 Web 界面中更改 Snowflake 密码。Select a New Password 对话框随即打开。该对话框接受当前密码和新密码。
您可以选择禁用账户中用户更改自己密码的功能。账户管理员可以使用 Account » Users 下的 Web 界面,或通过 SQL 使用 ALTER USER 命令继续更改用户密码。
要请求此更改,请联系 Snowflake 支持部门。