身份验证策略

身份验证策略允许您指定以下内容,从而控制客户端或用户的身份验证方式:

您可以对账户或账户中的用户设置身份验证策略。如果对账户设置身份验证策略,则身份验证策略将适用于账户中的所有用户。如果同时对账户和用户设置身份验证策略,则用户级身份验证策略将替换账户级身份验证策略。

备注

如果您已经可以访问标识符优先登录流,则需要使用 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION 函数从不支持的 SAML_IDENTITY_PROVIDER 账户参数迁移账户。

用例

以下列表列出了身份验证策略的非详尽用例:

  • 您要控制某个用户、某个账户中的所有用户或特定身份验证方法是否需要 MFA。

  • 您希望在有多个登录选项时控制用户登录流。

  • 您希望控制对特定用户或所有用户可用的身份验证方法、特定客户端类型和安全集成。

  • 您有客户使用 Snowflake 驱动程序在 Snowflake 上构建服务,但客户不希望其用户通过 Snowsight 或 Classic Console 访问 Snowflake。

  • 您希望为特定用户提供多个身份提供商作为身份验证选项。

限制

  • The CLIENT_TYPES property of an authentication policy is a best effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.。

注意事项

  • 确保身份验证策略中列出的身份验证方法和安全集成不冲突。例如,如果在允许的安全集成列表中添加 SAML2 安全集成,并且仅允许 OAuth 作为允许的身份验证方法,则无法创建身份验证策略。

  • 在用户被锁定的情况下,为管理员使用额外的非限制性身份验证策略。有关示例,请参阅 防止锁定

安全策略优先顺序

当激活了多种类型的安全策略时,策略之间会发生优先顺序。例如,网络策略 优先于身份验证策略,因此,如果请求的 IP 地址与网络策略的阻止名单中的 IP 地址匹配,则不检查身份验证策略,且评估在网络策略处停止。

以下列表描述了评估安全策略的顺序:

  1. 网络策略:允许或拒绝 IP 地址、VPC IDs 和 VPCE IDs。

  2. 身份验证策略 - 允许或拒绝客户端、身份验证方法和安全集成。

  3. 密码策略 (仅适用于本地身份验证):指定密码要求,如字符长度、字符、密码有效期、重试次数和锁定时间。

  4. 会话策略:要求用户在一段时间不活动后重新进行身份验证

如果为账户和用户身份验证都分配了策略,则会强制执行用户级别策略。

将标识符优先登录与身份验证策略相结合

默认情况下,Snowsight 或 Classic Console 提供通用登录体验,其中提供多个登录选项,无论这些选项是否与用户相关。这意味着无论登录选项是否是用户的有效选项,都会尝试进行身份验证。

您可以更改此行为,以便为 Snowsight 或 Classic Console 启用标识符优先登录流。在此流中,Snowflake 会在显示身份验证选项前提示用户输入电子邮件地址或用户名。Snowflake 使用电子邮件地址或用户名来识别用户,然后只显示与用户相关,并且账户或用户设置的身份验证策略允许的登录选项。

有关启用标识符优先登录流的说明,请参阅 标识符优先登录

下表提供了如何组合标识符优先登录和身份验证策略以控制用户登录体验的示例配置。

配置

结果

身份验证策略的 AUTHENTICATION_METHODS 参数仅包含 PASSWORD。

Snowflake 提示用户输入电子邮件地址或用户名,以及密码。

身份验证策略的 AUTHENTICATION_METHODS 参数仅包含 SAML,并且存在活动的 SAML2 安全集成。

如果电子邮件地址或用户名仅与一个 SAML2 安全集成匹配,Snowflake 会将用户重定向到身份提供商的登录页面。

身份验证策略的 AUTHENTICATION_METHODS 参数同时包含 PASSWORD 和 SAML,并且存在活动的 SAML2 安全集成。

如果电子邮件地址或用户名仅与一个 SAML2 安全集成匹配,则 Snowflake 显示 SAML SSO 按钮,以及使用电子邮件地址或用户名和密码登录的选项。

身份验证策略的 AUTHENTICATION_METHODS 参数仅包含 SAML,并且有多个活动的 SAML2 安全集成。

如果电子邮件地址或用户名与多个 SAML2 安全集成匹配,则 Snowflake 会显示多个 SAML SSO 按钮。

身份验证策略的 AUTHENTICATION_METHODS 参数同时包含 PASSWORD 和 SAML,并且有多个活动的 SAML2 安全集成。

如果电子邮件地址或用户名与多个 SAML2 安全集成匹配,则 Snowflake 会显示多个 SAML SSO 按钮,以及使用电子邮件地址或用户名和密码登录的选项。

创建身份验证策略

管理员可以使用 CREATE AUTHENTICATION POLICY 命令创建新的身份验证策略,指定哪些客户端可以连接到 Snowflake,可以使用哪些身份验证方法,以及用户可以使用哪些安全集成。默认情况下,所有客户端类型、身份验证方法和安全集成都可以用于连接到 Snowflake。The CLIENT_TYPES property of an authentication policy is a best effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.。

For example, the following commands create a custom policy_admin role and an authentication policy that allows authentication using Snowsight or the Classic Console. The user must authenticate with SAML or a password.

备注

要运行此示例,您必须将 GRANT ROLE 命令中 <username> 替换为您的登录用户名。

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE DATABASE my_database;
USE DATABASE my_database;

CREATE OR REPLACE SCHEMA my_schema;
USE SCHEMA my_schema;

CREATE ROLE policy_admin;

GRANT USAGE ON DATABASE my_database TO ROLE policy_admin;
GRANT USAGE ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT CREATE AUTHENTICATION POLICY ON SCHEMA my_database.my_schema TO ROLE policy_admin;
GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE policy_admin;

GRANT ROLE policy_admin TO USER <username>;
USE ROLE policy_admin;

CREATE AUTHENTICATION POLICY my_example_authentication_policy
  CLIENT_TYPES = ('SNOWFLAKE_UI')
  AUTHENTICATION_METHODS = ('SAML', 'PASSWORD');
Copy

有关详细示例,请参阅 登录配置示例

对账户或用户设置身份验证策略

对账户或用户设置身份验证策略时,身份验证策略中指定的限制将应用于该账户或用户。您可以使用 ALTER ACCOUNTALTER USER 命令对账户或用户设置身份验证策略。

在 Snowsight 工作表中,使用以下命令之一对账户或用户设置身份验证策略:

ALTER ACCOUNT SET AUTHENTICATION POLICY my_example_authentication_policy;
Copy
ALTER USER example_user SET AUTHENTICATION POLICY my_example_authentication_policy;
Copy

You can also set an authentication policy on all users of a specific type. For example, to set an authentication policy on all users of type SERVICE within the account, but not on users of type PERSON, run the following command:

ALTER ACCOUNT SET AUTHENTICATION POLICY my_example_authentication_policy
  FOR ALL SERVICE USERS;
Copy

只有安全管理员(具有 SECURITYADMIN 角色的用户)或其角色拥有 APPLY AUTHENTICATION POLICY 的用户可以对账户或用户设置身份验证策略。要向角色授予此权限以便用户可以对账户或用户设置身份验证策略,请执行以下命令之一:

GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE my_policy_admin;
Copy
GRANT APPLY AUTHENTICATION POLICY ON USER example_user TO ROLE my_policy_admin;
Copy

有关详细示例,请参阅 登录配置示例

使用 MFA 加强用户或账户身份验证

为了提高用户登录的安全性,可以创建一个身份验证策略,要求用户 注册 MFA,然后将身份验证策略应用于单个用户或账户。用户注册 MFA 后,身份验证策略会要求用户使用 MFA 进行身份验证。

例如,要创建一个身份验证策略,要求用户在使用密码时通过 MFA 进行身份验证,请执行以下 SQL 语句:

CREATE AUTHENTICATION POLICY require_mfa_with_password_authentication_policy
  MFA_AUTHENTICATION_METHODS = ('PASSWORD')
  MFA_ENROLLMENT = REQUIRED;
Copy

要为账户中的所有用户设置此身份验证策略,请执行以下 SQL 语句:

ALTER ACCOUNT SET AUTHENTICATION POLICY require_mfa_with_password_authentication_policy;
Copy

如果要创建一个身份验证策略,要求用户在 SSO 中使用密码时通过 MFA 进行身份验证,请执行以下 SQL 语句:

CREATE AUTHENTICATION POLICY require_mfa_authentication_policy
  MFA_AUTHENTICATION_METHODS = ('PASSWORD', 'SAML')
  MFA_ENROLLMENT = REQUIRED;
Copy

要为账户中的所有用户设置此身份验证策略,请执行以下 SQL 语句:

ALTER ACCOUNT SET AUTHENTICATION POLICY require_mfa_authentication_policy;
Copy

备注

如果将 MFA_ENROLLMENT 参数设置为 REQUIRED,那么 CLIENT_TYPES 参数必须包括 SNOWFLAKE_UI,因为 Snowsight 是用户可以 注册多重身份验证 (MFA) 的唯一地方。

跟踪身份验证策略使用情况

使用 Information Schema 表函数 POLICY_REFERENCES 为分配给指定身份验证策略的每个用户返回一行,并为分配给 Snowflake 账户的身份验证策略返回一行。

身份验证策略支持以下语法:

POLICY_REFERENCES( POLICY_NAME => '<authentication_policy_name>' )
Copy
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'USER', REF_ENTITY_NAME => '<username>')
Copy
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'ACCOUNT', REF_ENTITY_NAME => '<accountname>')
Copy

其中,authentication_policy_name 是身份验证策略的完全限定名称。

例如,执行以下查询,为分配了名为 authentication_policy_prod_1 的身份验证策略的每个用户返回一行,该策略存储在名为 my_db 的数据库和名为 my_schema 的架构中:

SELECT *
FROM TABLE(
    my_db.INFORMATION_SCHEMA.POLICY_REFERENCES(
      POLICY_NAME => 'my_db.my_schema.authentication_policy_prod_1'
  )
);
Copy

防止锁定

在管理账户的身份验证策略非常严格的情况下,您可以创建一个非限制性身份验证策略,供管理员在安全集成导致锁定时用作恢复选项。例如,您可以仅为管理员包括 PASSWORD 身份验证方法。用户级身份验证策略将替换限制性更强的账户级策略。

CREATE AUTHENTICATION POLICY admin_authentication_policy
  AUTHENTICATION_METHODS = ('SAML', 'PASSWORD')
  CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWSQL', 'DRIVERS')
  SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION');
Copy

然后,您可以将此策略分配给管理员:

ALTER USER <administrator_name> SET AUTHENTICATION POLICY admin_authentication_policy
Copy

复制身份验证策略

您可以使用故障转移组和复制组复制身份验证策略。有关详细信息,请参阅 复制与安全策略

登录配置示例

本节提供了如何使用和组合身份验证策略与 SAML2 安全集成来控制登录流和安全的示例。

按客户端类型限制用户对 Snowflake 的访问权限

The CLIENT_TYPES property of an authentication policy is a best effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.。

创建名为 restrict_client_type_policy 的身份验证策略,该策略仅允许通过 Snowsight 或 Classic Console 访问:

CREATE AUTHENTICATION POLICY restrict_client_type_policy
  CLIENT_TYPES = ('SNOWFLAKE_UI')
  COMMENT = 'Only allows access through the web interface';
Copy

对用户设置身份验证策略:

ALTER USER example_user SET AUTHENTICATION POLICY restrict_client_type_policy;
Copy

允许对账户使用多个身份提供商的身份验证

创建 SAML2 安全集成,允许用户使用 Okta 作为 IdP 并通过 SAML 登录:

CREATE SECURITY INTEGRATION example_okta_integration
  TYPE = SAML2
  SAML2_SSO_URL = 'https://okta.example.com';
  ...
Copy

创建安全集成,允许用户使用 Microsoft Entra ID 作为 IdP 通过 SAML 登录:

CREATE SECURITY INTEGRATION example_entra_integration
  TYPE = SAML2
  SAML2_SSO_URL = 'https://entra-example_acme.com';
  ...
Copy

创建与 example_okta_integrationexample_entra_integration 集成关联的身份验证策略:

CREATE AUTHENTICATION POLICY multiple_idps_authentication_policy
  AUTHENTICATION_METHODS = ('SAML')
  SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION', 'EXAMPLE_ENTRA_INTEGRATION');
Copy

对账户设置身份验证策略:

ALTER ACCOUNT SET AUTHENTICATION POLICY multiple_idps_authentication_policy;
Copy

权限和命令

身份验证策略权限参考

Snowflake 支持以下身份验证策略权限,以确定用户是否可以创建、设置和拥有身份验证策略。

The USAGE privilege on the parent database and schema are required to perform operations on any object in a schema. Note that a role granted any privilege on a schema allows that role to resolve the schema. For example, a role granted CREATE privilege on a schema can create objects on that schema without also having USAGE granted on that schema.

权限

对象

用途

CREATE

架构

允许在架构中创建新的身份验证策略。

APPLY AUTHENTICATION POLICY

账户

允许在账户或用户级别应用身份验证策略。

OWNERSHIP

身份验证策略

授予对身份验证策略的完全控制权。更改身份验证策略的大多数属性时需要此权限。

身份验证策略 DDL 参考

有关身份验证策略权限和命令的详细信息,请参阅以下参考文档:

命令

权限

描述

CREATE AUTHENTICATION POLICY

CREATE SCHEMA 的 AUTHENTICATION POLICY

创建新的身份验证策略。

ALTER AUTHENTICATION POLICY

AUTHENTICATION POLICY 的 OWNERSHIP

修改现有的身份验证策略。

DROP AUTHENTICATION POLICY

AUTHENTICATION POLICY 的 OWNERSHIP

从系统中移除现有的身份验证策略。

DESCRIBE AUTHENTICATION POLICY

AUTHENTICATION POLICY 的 OWNERSHIP

描述现有身份验证策略的属性。

SHOW AUTHENTICATION POLICIES

AUTHENTICATION POLICY 的 OWNERSHIP 或 SCHEMA 的 USAGE

列出系统中的所有身份验证策略。

语言: 中文