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_IDENTITY
Allows users to authenticate through workload identity federation.
默认:
ALL
。
MFA_AUTHENTICATION_METHODS = ( 'string_literal' [ , 'string_literal' , ... ] )
登录时执行多重身份验证 (MFA) 的身份验证方法列表。此参数中未列出的身份验证方法不会提示进行多重身份验证。
以下身份验证方法支持 MFA:
SAML
PASSWORD
该参数可接受以下一个或多个值:
SAML
在使用 SAML2 安全集成 进行身份验证时,如果用户已注册 MFA,则系统会提示用户使用 MFA。
PASSWORD
在使用用户名和密码进行身份验证时,如果用户已注册 MFA,则系统会提示用户使用 MFA。
默认:
('PASSWORD')
。MFA_ENROLLMENT = { REQUIRED | OPTIONAL }
确定用户是否必须注册多重身份验证。
REQUIRED
强制用户注册 MFA。如果使用此值,那么
CLIENT_TYPES
参数必须包括SNOWFLAKE_UI
,因为 Snowsight 是用户可以 注册多重身份验证 (MFA) 的唯一地方。OPTIONAL
用户可以选择是否注册 MFA。
默认:
REQUIRED
。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_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.。该参数可接受以下一个或多个值:
ALL
允许所有客户端进行身份验证。
SNOWFLAKE_UI
Snowsight 或 Classic Console,Snowflake Web 界面。
小心
If
SNOWFLAKE_UI
is not included in theCLIENT_TYPES
list whileMFA_ENROLLMENT
is set toREQUIRED
, orMFA_ENROLLMENT
is unspecified, MFA enrollment doesn't work。DRIVERS
Drivers 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.
ALL
Users can authenticate with any supported and configured workload identity provider.
AWS
Users can authenticate with an AWS IAM role or user.
AZURE
Users can authenticate with an Azure Entra ID access token.
GCP
Users can authenticate with a Google-signed ID token.
OIDC
Users 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_IDENTITY
of 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_IDENTITY
of 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_IDENTITY
of 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');
有关更多示例,请参阅 身份验证策略。