使用密码

本主题介绍管理员如何配置密码要求和重置用户密码。

密码策略

密码策略指定创建和重置密码以向 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>' )
      
      Copy

      其中,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'
        )
      );
      
      Copy

密码策略访问控制

以下访问控制权限允许用户使用密码策略:

权限

对象类型

用途

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 步 中所示)。

备注

要对账户设置策略,policy_admin 自定义角色还必须对包含密码策略的数据库和架构具有 USAGE 权限。

有关更多信息,请参阅:访问控制权限

第 1 步:创建自定义角色

创建自定义角色,该角色允许创建和管理密码策略。在本主题中,示例自定义角色命名为 policy_admin,尽管该角色可以有任何合适的名称。

如果自定义角色已存在,请继续下一步。

否则,请创建 policy_admin 自定义角色。

USE ROLE USERADMIN;

CREATE ROLE policy_admin;
Copy

第 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;
Copy

如果决定设置用户的密码策略,请授予用户的 APPLY PASSWORD POLICY 权限。例如,如果用户名为 JSMITH,则执行以下命令。

GRANT APPLY PASSWORD POLICY ON USER jsmith TO ROLE policy_admin;
Copy

有关更多信息,请参阅 密码策略访问控制

第 3 步:向用户授予自定义角色

policy_admin 自定义角色授予负责管理密码策略的用户。

USE ROLE SECURITYADMIN;
GRANT ROLE policy_admin TO USER jsmith;
Copy

有关更多信息,请参阅 配置访问控制

第 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';
Copy

备注

将属性 PASSWORD_MAX_AGE_DAYS 设置为最大值 999。选择一个符合内部准则的值。有关详细信息,请参阅 CREATE PASSWORD POLICY

第 5 步:设置账户或个人用户的密码策略

使用 ALTER ACCOUNT 命令设置账户策略:

ALTER ACCOUNT SET PASSWORD POLICY security.policies.password_policy_prod_1;
Copy

如果决定为一个或多个用户创建其他密码策略,请使用 ALTER USER 命令为用户设置用户级密码策略:

ALTER USER jsmith SET PASSWORD POLICY security.policies.password_policy_user;
Copy

重要

要替换已为账户或用户设置的密码策略,请先取消设置密码策略,然后为账户或用户设置新的密码策略。例如:

ALTER ACCOUNT UNSET PASSWORD POLICY;

ALTER ACCOUNT SET PASSWORD POLICY security.policies.password_policy_prod_2;
Copy

第 6 步:要求更改密码

使用 ALTER USER 语句将个人用户的 MUST_CHANGE_PASSWORD 属性设置为 TRUE,以便要求用户在下次登录 Snowflake 时更改其密码以符合密码策略。

ALTER USER JSMITH SET MUST_CHANGE_PASSWORD = true;
Copy

重置用户密码

管理员可以通过以下界面更改用户的密码。

使用 Snowsight

  1. 登录 Snowsight。

  2. 选择 Admin » Users & Roles

  3. 找到要更改其密码的用户,然后选择 更多选项 » Reset Password

  4. 输入用户的新密码并确认密码。

  5. 选择 Update

使用 Classic Console

备注

用户只能通过 Classic Console 更改自己的密码。有关更多信息,请参阅 更改密码/切换(会话)角色/注销

  1. 选择 Account Account 选项卡 » Users

  2. 点击用户行,将其选中,然后选择 Reset PasswordReset Password 对话框随即打开。

  3. 输入用户的新密码,并确认密码。

  4. 选中 Force Password Change 复选框,以强制用户在下次登录时更改其密码,否则,取消选中该复选框。

  5. 选择 Finish

使用 SQL

使用 ALTER USER 命令输入用户密码。例如:

ALTER USER janesmith SET PASSWORD = 'H8MZRqa8gEe/kvHzvJ+Giq94DuCYoQXmfbb$Xnt' MUST_CHANGE_PASSWORD = TRUE;
Copy

还可以利用 ALTER USER ...RESET PASSWORD 语法来生成要与用户共享的 URL。URL 将打开一个网页,用户可以在其中输入新密码。例如:

ALTER USER janesmith RESET PASSWORD;
Copy

备注

  • 生成的 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 Account 选项卡 » Users 下的 Web 界面,或通过 SQL 使用 ALTER USER 命令继续更改用户密码。

要请求此更改,请联系 Snowflake 支持部门

语言: 中文