CREATE AUTHENTICATION POLICY¶
在当前或指定的架构中创建新的 身份验证策略,或替换现有的身份验证策略。您可以使用身份验证策略为账户或用户定义身份验证控制和安全要求。
该命令支持以下变体:
CREATE OR ALTER AUTHENTICATION POLICY:创建身份验证策略(若不存在),或更改现有身份验证策略。
- 另请参阅:
ALTER AUTHENTICATION POLICY、DESCRIBE AUTHENTICATION POLICY、DROP AUTHENTICATION POLICY、SHOW AUTHENTICATION POLICIES、CREATE OR ALTER <对象>
语法¶
CREATE [ OR REPLACE ] AUTHENTICATION POLICY [ IF NOT EXISTS ] <name>
[ AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ MFA_AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ MFA_ENROLLMENT = { REQUIRED | OPTIONAL } ]
[ MFA_POLICY= ( ALLOWED_METHODS = ( { 'ALL' | 'PASSKEY' | 'TOTP' | 'DUO' } [ , { 'PASSKEY' | 'TOTP' | 'DUO' } ... ] ) ) ]
[ CLIENT_TYPES = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ SECURITY_INTEGRATIONS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ PAT_POLICY = ( <list_of_properties> ) ]
[ WORKLOAD_IDENTITY_POLICY = ( <list_of_properties> ) ]
[ COMMENT = '<string_literal>' ]
变体语法¶
CREATE OR ALTER AUTHENTICATION POLICY¶
如果身份验证策略尚不存在,则创建新的身份验证策略,或者将现有身份验证策略更改为语句中定义的策略。CREATE OR ALTER AUTHENTICATION POLICY 语句遵循 CREATE AUTHENTICATION POLICY 语句的语法规则,并具有与 ALTER AUTHENTICATION POLICY 语句相同的限制。
CREATE OR ALTER AUTHENTICATION POLICY <name>
[ AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ MFA_AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ MFA_ENROLLMENT = { REQUIRED | OPTIONAL } ]
[ MFA_POLICY= ( ALLOWED_METHODS = ( { 'ALL' | 'PASSKEY' | 'TOTP' | 'DUO' } [ , { 'ALL' | 'PASSKEY' | 'TOTP' | 'DUO' } ... ] ) ) ]
[ CLIENT_TYPES = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ SECURITY_INTEGRATIONS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ PAT_POLICY = ( {list_of_properties} ) ]
[ WORKLOAD_IDENTITY_POLICY = ( {list_of_properties} ) ]
[ COMMENT = '<string_literal>' ]
必填参数¶
可选参数¶
AUTHENTICATION_METHODS = ( 'string_literal' [ , 'string_literal' , ... ] )小心
通过身份验证方法进行限制可能会产生意想不到的后果,例如阻止驱动程序连接或第三方集成。
登录时允许使用的身份验证方法列表。该参数可接受以下一个或多个值:
ALL允许所有身份验证方法。
SAML允许 SAML2 安全集成。如果
SAML存在,则会显示 SSO 登录选项。如果SAML不存在,则不会显示 SSO 登录选项。PASSWORD允许用户使用用户名和密码进行身份验证。
OAUTH允许 External OAuth。
KEYPAIR允许 密钥对身份验证。
PROGRAMMATIC_ACCESS_TOKEN允许用户使用 编程访问令牌 进行身份验证。
WORKLOAD_IDENTITYAllows users to authenticate through workload identity federation.
默认:
ALL。
MFA_AUTHENTICATION_METHODS = ( 'string_literal' [ , 'string_literal' , ... ] )登录时执行多重身份验证 (MFA) 的身份验证方法列表。此参数中未列出的身份验证方法不会提示进行多重身份验证。
以下身份验证方法支持 MFA:
SAMLPASSWORD
该参数可接受以下一个或多个值:
SAML在使用 SAML2 安全集成 进行身份验证时,如果用户已注册 MFA,则系统会提示用户使用 MFA。
PASSWORD在使用用户名和密码进行身份验证时,如果用户已注册 MFA,则系统会提示用户使用 MFA。
默认:
('PASSWORD')。MFA_ENROLLMENT = { REQUIRED | OPTIONAL }确定用户是否必须注册多重身份验证。
REQUIRED强制用户注册 MFA。如果使用此值,那么
CLIENT_TYPES参数必须包括SNOWFLAKE_UI,因为 Snowsight 是用户可以 注册多重身份验证 (MFA) 的唯一地方。OPTIONAL用户可以选择是否注册 MFA。
Default:
OPTIONAL. For backwards compatibility, you can create an authentication policy without specifying anMFA_ENROLLMENTvalue, but the actual value that is enforced won't beOPTIONALbecause Snowflake is moving toward requiring MFA for all human users. To determine which value is being enforced for an existing authentication policy, run the DESCRIBE AUTHENTICATION POLICY command.MFA_POLICY= ( ALLOWED_METHODS = ( { 'ALL' | 'PASSKEY' | 'TOTP' | 'DUO' } [ , { 'PASSKEY' | 'TOTP' | 'DUO' } ... ] ) )指定用户可用作第二个身份验证因素的多重身份验证 (MFA) 方法。您可以指定多个方法。
ALL用户可以使用密钥、身份验证器应用程序或 Duo 作为第二个身份验证因素。
PASSKEY用户可以使用密钥作为第二个身份验证因素。
TOTP用户可以使用身份验证器应用程序作为第二个身份验证因素。
DUO用户可以使用 Duo 作为第二个身份验证因素。
默认:
ALL。CLIENT_TYPES = ( 'string_literal' [ , 'string_literal' , ... ] )可使用 Snowflake 进行身份验证的客户端列表。
如果客户端尝试连接,但客户端不是下面列出的有效
CLIENT_TYPES值之一,则登录尝试失败。如果您将
MFA_ENROLLMENT设置为REQUIRED,则必须在CLIENT_TYPES列表中包含SNOWFLAKE_UI,才能允许用户注册 MFA。如果要从
CLIENT_TYPES列表中排除SNOWFLAKE_UI,则必须将MFA_ENROLLMENT设置为OPTIONAL。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.。该参数可接受以下一个或多个值:
ALL允许所有客户端进行身份验证。
SNOWFLAKE_UISnowsight 或 Classic Console,Snowflake Web 界面。
小心
If
SNOWFLAKE_UIis not included in theCLIENT_TYPESlist whileMFA_ENROLLMENTis set toREQUIRED, orMFA_ENROLLMENTis unspecified, MFA enrollment doesn't work。DRIVERSDrivers allow access to Snowflake from applications written in supported languages. For example, the Go, JDBC, .NET drivers, and Snowpipe Streaming.
小心
如果
DRIVERS未列入CLIENT_TYPES列表,自动引入可能会停止工作。SNOWFLAKE_CLI用于连接到 Snowflake 并管理以开发人员为中心的工作负载和 SQL 操作的 命令行客户端。
SNOWSQL命令行客户端,用于连接 Snowflake。
默认:
ALL。SECURITY_INTEGRATIONS = ( 'string_literal' [ , 'string_literal' , ... ] )身份验证策略关联的安全集成列表。当
SAML或OAUTH不在AUTHENTICATION_METHODS列表中时,该参数不起作用。SECURITY_INTEGRATIONS列表中的所有值必须与AUTHENTICATION_METHODS列表中的值兼容。例如,如果SECURITY_INTEGRATIONS包含 SAML 安全集成,而AUTHENTICATION_METHODS包含OAUTH,则无法创建身份验证策略。ALL允许所有安全集成。
默认:
ALL。
PAT_POLICY = ( list_of_properties )指定 编程访问令牌 的策略。将此设置为以下一个或多个属性与值组成的、以空格分隔的列表:
DEFAULT_EXPIRY_IN_DAYS = number_of_days指定编程访问令牌的默认到期时间(以天为单位)。您可以指定介于 1 到最大到期时间(可通过设置 MAX_EXPIRY_IN_DAYS 指定)之间的值。
默认到期时间为 15 天。
有关更多信息,请参阅 设置默认到期时间。
MAX_EXPIRY_IN_DAYS = number_of_days指定可为编程访问令牌设置的最长期限(以天为单位)。您可以指定介于默认到期时间(您可以通过设置 DEFAULT_EXPIRY_IN_DAYS 指定)到 365 之间的值。
默认的最长到期时间为 365 天。
备注
如果现有编程访问令牌的到期时间超过了新的最长到期时间,则尝试使用这些令牌进行身份验证将失败。
例如,假设您生成了一个名为
my_token且到期时间为 7 天的编程访问令牌。如果您稍后将所有令牌的最长到期时间更改为 2 天,则使用my_token身份验证将失败,因为令牌的到期时间超过了新的最长到期时间。有关更多信息,请参阅 设置最长到期时间。
NETWORK_POLICY_EVALUATION = { ENFORCED_REQUIRED | ENFORCED_NOT_REQUIRED | NOT_ENFORCED }指定如何处理编程访问令牌的网络策略要求。
默认情况下,用户必须遵守具有一个或多个 网络规则 的 网络策略 才能生成或使用编程访问令牌:
服务用户(使用 TYPE=SERVICE)必须遵守网络策略才能生成和使用编程访问令牌。
人类用户(使用 TYPE=PERSON)必须遵守网络策略才能使用编程访问令牌。
要替换此行为,请将此属性设置为以下值之一:
- :code:`ENFORCED_REQUIRED`(默认行为)
用户必须遵守网络策略才能生成和使用编程访问令牌。
如果用户受网络策略的约束,则网络策略将在身份验证期间强制执行。
ENFORCED_NOT_REQUIRED用户 无需 受网络策略的约束即可生成和使用编程访问令牌。
如果用户受网络策略的约束,则网络策略将在身份验证期间强制执行。
NOT_ENFORCED用户 无需 受网络策略的约束即可生成和使用编程访问令牌。
如果用户受网络策略的约束,则在身份验证期间 不会 强制执行网络策略。
例如:
PAT_POLICY=( DEFAULT_EXPIRY_IN_DAYS=30 MAX_EXPIRY_IN_DAYS=365 NETWORK_POLICY_EVALUATION = ENFORCED_NOT_REQUIRED );
WORKLOAD_IDENTITY_POLICY = ( list_of_properties )Specifies the policies for workload identity federation. Set this to a space-delimited list that contains one or more of the following properties and values:
ALLOWED_PROVIDERS = ( { ALL | AWS | AZURE | GCP | OIDC } [ , { AWS | AZURE | GCP | OIDC } ... ] )Specifies the workload identity providers allowed by the authentication policy during workload identity authentication. If this parameter is omitted, all workload identity providers are allowed.
ALLUsers can authenticate with any supported and configured workload identity provider.
AWSUsers can authenticate with an AWS IAM role or user.
AZUREUsers can authenticate with an Azure Entra ID access token.
GCPUsers can authenticate with a Google-signed ID token.
OIDCUsers can authenticate with an ID token from a configured OIDC provider.
ALLOWED_AWS_ACCOUNTS = ( 'string_literal' [ , 'string_literal' , ... ] )Specifies the list of AWS account IDs allowed by the authentication policy during workload identity authentication of type
AWS.By default, when a Snowflake service user has a
WORKLOAD_IDENTITYof typeAWS, then the ARN can reference any AWS account. If this parameter is set, then only ARNs from the specified AWS account IDs are allowed to authenticate.Each element must be a 12-digit string representing the AWS account ID.
For more information, see View AWS account identifiers (https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html).
ALLOWED_AZURE_ISSUERS = ( 'string_literal' [ , 'string_literal' , ... ] )Specifies the list of Azure Entra ID issuers allowed by the authentication policy during workload identity authentication of type
AZURE.By default, when a Snowflake service user has a
WORKLOAD_IDENTITYof typeAZURE, then the issuer can be any Entra ID tenant. If this parameter is set, then only Azure tokens from the specified issuers are allowed to authenticate.Each element must be a valid Authority URL with following format:
https://login.microsoftonline.com/tenantId/v2.0
ALLOWED_OIDC_ISSUERS = ( 'string_literal' [ , 'string_literal' , ... ] )Specifies the list of OIDC issuers allowed by the authentication policy during workload identity authentication of type
OIDC.By default, when a Snowflake service user has a
WORKLOAD_IDENTITYof typeOIDC, then the issuer can be any valid OIDC issuer. If this parameter is set, then only tokens from the specified OIDC issuers are allowed to authenticate.Each element must be a valid HTTPS URL that contains scheme, host, and optionally, port number and path components but no query or fragment components. The URL must not contain spaces, and it must not exceed 2048 characters in length.
例如:
WORKLOAD_IDENTITY_POLICY=( ALLOWED_PROVIDERS = (AWS, AZURE, GCP, OIDC) ALLOWED_AWS_ACCOUNTS = ('123456789012', '210987654321') ALLOWED_AZURE_ISSUERS = ('https://login.microsoftonline.com/8c7832f5-de56-4d9f-ba94-3b2c361abe6b/v2.0', 'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0') ALLOWED_OIDC_ISSUERS = ('https://my.custom.oidc.issuer/', 'https://another.custom/oidc/issuer') );
COMMENT = 'string_literal'指定策略描述。
访问控制要求¶
权限 |
对象 |
备注 |
|---|---|---|
CREATE AUTHENTICATION POLICY |
架构 |
|
OWNERSHIP |
身份验证策略 |
|
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.
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
创建身份验证策略后,您必须使用 ALTER ACCOUNT 或 ALTER USER 命令为账户或用户设置它,然后 Snowflake 才能执行该策略。
如果您要更新现有身份验证策略,并且需要查看该策略的定义,请运行 DESCRIBE AUTHENTICATION POLICY 命令或 GET_DDL 函数。
The OR REPLACE and IF NOT EXISTS clauses are mutually exclusive. They can't both be used in the same statement.
CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。
示例¶
创建名为 restrict_client_types_policy 的身份验证策略,该策略仅允许通过 Snowsight 或 Classic Console 访问:
CREATE AUTHENTICATION POLICY restrict_client_types_policy
CLIENT_TYPES = ('SNOWFLAKE_UI')
COMMENT = 'Auth policy that only allows access through the web interface';
设置多重身份验证并更新客户端列表:
CREATE OR ALTER AUTHENTICATION POLICY restrict_client_types_policy
MFA_ENROLLMENT = REQUIRED
MFA_AUTHENTICATION_METHODS = ('PASSWORD', 'SAML')
CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI');
有关更多示例,请参阅 身份验证策略。