身份验证策略¶
身份验证策略允许您指定以下内容,从而控制客户端或用户的身份验证方式:
用户是否必须 注册多重身份验证 (MFA)。
哪些身份验证方法需要多重身份验证。
用户在登录体验期间可用的 SAML2 安全集成。例如,如果存在多个安全集成,则可指定可以选择哪个身份提供商 (IdP) 并使用其进行身份验证。
如果您使用身份验证策略来控制用户可以使用哪个 IdP 进行身份验证,则可以使用与 IdPs 关联的 SAML2 安全集成的
ALLOWED_USER_DOMAINS和ALLOWED_EMAIL_PATTERNS属性进一步细化该控制。有关更多详细信息,请参阅 使用多个身份提供商进行联合身份验证。The clients that users can use to connect to Snowflake, such as Snowsight, Snowflake CLI, drivers, or SnowSQL(CLI 客户端). The
CLIENT_TYPESproperty 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..By defining a "client policy" within an authentication policy, you can also set the minimum version that is allowed for specific client types.
您可以对账户或账户中的用户设置身份验证策略。如果对账户设置身份验证策略,则身份验证策略将适用于账户中的所有用户。如果同时对账户和用户设置身份验证策略,则用户级身份验证策略将替换账户级身份验证策略。
备注
如果您已经可以访问标识符优先登录流,则需要使用 SYSTEM$MIGRATE_SAML_IDP_REGISTRATION 函数从不支持的 SAML_IDENTITY_PROVIDER 账户参数迁移账户。
用例¶
The following non-exhaustive list describes use cases for authentication policies:
您要控制某个用户、某个账户中的所有用户或特定身份验证方法是否需要 MFA。
您希望在有多个登录选项时控制用户登录流。
You want to control the authentication methods, specific client types, minimum versions of clients, and security integrations available to specific users or all users.
You have customers building services on top of Snowflake using Snowflake drivers, but the customers do not want their users accessing Snowflake through Snowsight.
您希望为特定用户提供多个身份提供商作为身份验证选项。
限制¶
The
CLIENT_TYPESproperty 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 地址匹配,则不检查身份验证策略,且评估在网络策略处停止。
以下列表描述了评估安全策略的顺序:
网络策略:允许或拒绝 IP 地址、VPC IDs 和 VPCE IDs。
身份验证策略 - 允许或拒绝客户端、身份验证方法和安全集成。
密码策略 (仅适用于本地身份验证):指定密码要求,如字符长度、字符、密码有效期、重试次数和锁定时间。
会话策略:要求用户在一段时间不活动后重新进行身份验证
如果为账户和用户身份验证都分配了策略,则会强制执行用户级别策略。
将标识符优先登录与身份验证策略相结合¶
By default, Snowsight provides a generic login experience that provides several options for logging in, regardless if the options are relevant to users. This means that authentication is attempted regardless of whether the login option is a valid option for the user.
You can alter this behavior to enable a identifier-first login flow for Snowsight. In this flow, Snowflake prompts the user for an email address or username before presenting authentication options. Snowflake uses the email address or username to identify the user, and then only displays the login options that are relevant to the user, and are allowed by the authentication policy set on the account or user.
有关启用标识符优先登录流的说明,请参阅 标识符优先登录。
下表提供了如何组合标识符优先登录和身份验证策略以控制用户登录体验的示例配置。
配置 |
结果 |
|---|---|
身份验证策略的 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. 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');
有关详细示例,请参阅 登录配置示例。
对账户或用户设置身份验证策略¶
对账户或用户设置身份验证策略时,身份验证策略中指定的限制将应用于该账户或用户。您可以使用 ALTER ACCOUNT 或 ALTER USER 命令对账户或用户设置身份验证策略。
在 Snowsight 工作表中,使用以下命令之一对账户或用户设置身份验证策略:
ALTER ACCOUNT SET AUTHENTICATION POLICY my_example_authentication_policy;
ALTER USER example_user SET AUTHENTICATION POLICY my_example_authentication_policy;
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;
只有安全管理员(具有 SECURITYADMIN 角色的用户)或其角色拥有 APPLY AUTHENTICATION POLICY 的用户可以对账户或用户设置身份验证策略。要向角色授予此权限以便用户可以对账户或用户设置身份验证策略,请执行以下命令之一:
GRANT APPLY AUTHENTICATION POLICY ON ACCOUNT TO ROLE my_policy_admin;
GRANT APPLY AUTHENTICATION POLICY ON USER example_user TO ROLE my_policy_admin;
有关详细示例,请参阅 登录配置示例。
使用 MFA 加强用户或账户身份验证¶
为了提高用户登录的安全性,可以创建一个身份验证策略,要求用户 注册 MFA,然后将身份验证策略应用于单个用户或账户。用户注册 MFA 后,身份验证策略会要求用户使用 MFA 进行身份验证。
备注
Snowflake is deprecating single-factor password logins. When the rollout is complete, all users who authenticate with a password must enroll in MFA.
Run the following command if you want to create an authentication policy that requires password users to authenticate with MFA when using any Snowflake client, not just Snowsight. Single sign-on (SSO) users won't be required to use MFA.
CREATE AUTHENTICATION POLICY require_mfa_authentication_policy
MFA_ENROLLMENT = 'REQUIRED'
MFA_POLICY= (
ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'NONE'
);
Run the following command if you want to create an authentication policy that requires password and single sign-on users to authenticate with MFA.
CREATE AUTHENTICATION POLICY require_mfa_authentication_policy
MFA_ENROLLMENT = 'REQUIRED'
MFA_POLICY= (
ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = 'ALL'
);
要为账户中的所有用户设置此身份验证策略,请执行以下 SQL 语句:
ALTER ACCOUNT SET AUTHENTICATION POLICY require_mfa_authentication_policy;
备注
If you set the MFA_ENROLLMENT parameter, then the CLIENT_TYPES parameter must include
SNOWFLAKE_UI, because Snowsight is the only place users can
enroll in multi-factor authentication (MFA).
跟踪身份验证策略使用情况¶
使用 Information Schema 表函数 POLICY_REFERENCES 为分配给指定身份验证策略的每个用户返回一行,并为分配给 Snowflake 账户的身份验证策略返回一行。
身份验证策略支持以下语法:
POLICY_REFERENCES( POLICY_NAME => '<authentication_policy_name>' )
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'USER', REF_ENTITY_NAME => '<username>')
POLICY_REFERENCES( REF_ENTITY_DOMAIN => 'ACCOUNT', REF_ENTITY_NAME => '<accountname>')
其中,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'
)
);
防止锁定¶
在管理账户的身份验证策略非常严格的情况下,您可以创建一个非限制性身份验证策略,供管理员在安全集成导致锁定时用作恢复选项。例如,您可以仅为管理员包括 PASSWORD 身份验证方法。用户级身份验证策略将替换限制性更强的账户级策略。
CREATE AUTHENTICATION POLICY admin_authentication_policy
AUTHENTICATION_METHODS = ('SAML', 'PASSWORD')
CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI', SNOWSQL', 'DRIVERS')
SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION');
然后,您可以将此策略分配给管理员:
ALTER USER <administrator_name> SET AUTHENTICATION POLICY admin_authentication_policy
复制身份验证策略¶
您可以使用故障转移组和复制组复制身份验证策略。有关详细信息,请参阅 复制与安全策略。
登录配置示例¶
本节提供了如何使用和组合身份验证策略与 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.。
Create an authentication policy named restrict_client_type_policy that only allows access through Snowsight:
CREATE AUTHENTICATION POLICY restrict_client_type_policy
CLIENT_TYPES = ('SNOWFLAKE_UI')
COMMENT = 'Only allows access through the web interface';
对用户设置身份验证策略:
ALTER USER example_user SET AUTHENTICATION POLICY restrict_client_type_policy;
允许对账户使用多个身份提供商的身份验证¶
Create a SAML2 security integration that allows users to log in through SAML using Okta as an IdP:
CREATE SECURITY INTEGRATION example_okta_integration
TYPE = SAML2
SAML2_SSO_URL = 'https://okta.example.com';
...
Create a security integration that allows users to log in through SAML using Microsoft Entra ID as an IdP:
CREATE SECURITY INTEGRATION example_entra_integration
TYPE = SAML2
SAML2_SSO_URL = 'https://entra-example_acme.com';
...
创建与 example_okta_integration 和 example_entra_integration 集成关联的身份验证策略:
CREATE AUTHENTICATION POLICY multiple_idps_authentication_policy
AUTHENTICATION_METHODS = ('SAML')
SECURITY_INTEGRATIONS = ('EXAMPLE_OKTA_INTEGRATION', 'EXAMPLE_ENTRA_INTEGRATION');
对账户设置身份验证策略:
ALTER ACCOUNT SET AUTHENTICATION POLICY multiple_idps_authentication_policy;
权限和命令¶
身份验证策略权限参考¶
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 SCHEMA 的 AUTHENTICATION POLICY |
创建新的身份验证策略。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP |
修改现有的身份验证策略。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP |
从系统中移除现有的身份验证策略。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP |
描述现有身份验证策略的属性。 |
|
AUTHENTICATION POLICY 的 OWNERSHIP 或 SCHEMA 的 USAGE |
列出系统中的所有身份验证策略。 |