CREATE AUTHENTICATION POLICY

在当前或指定的架构中创建新的 身份验证策略,或替换现有的身份验证策略。您可以使用身份验证策略为账户或用户定义身份验证控制和安全要求。

该命令支持以下变体:

另请参阅:

ALTER AUTHENTICATION POLICYDESCRIBE AUTHENTICATION POLICYDROP AUTHENTICATION POLICYSHOW AUTHENTICATION POLICIESCREATE 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>' ]
Copy

变体语法

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>' ]
Copy

必填参数

name

为身份验证策略指定 标识符

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

可选参数

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

SnowsightClassic Console,Snowflake Web 界面。

小心

If SNOWFLAKE_UI is not included in the CLIENT_TYPES list while MFA_ENROLLMENT is set to REQUIRED, or MFA_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' , ... ] )

身份验证策略关联的安全集成列表。当 SAMLOAUTH 不在 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
);
Copy
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 type AWS, 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 type AZURE, 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 type OIDC, 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')
);
Copy
COMMENT = 'string_literal'

指定策略描述。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE AUTHENTICATION POLICY

架构

OWNERSHIP

身份验证策略

  • 若要创建创建与架构中已存在的对象同名的临时对象,必须授予角色或使其继承对象上的 OWNERSHIP 权限。

  • 需要为 现有 身份验证策略执行 CREATE OR ALTER AUTHENTICATION POLICY 语句。

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.

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 创建身份验证策略后,您必须使用 ALTER ACCOUNTALTER 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';
Copy

设置多重身份验证并更新客户端列表:

CREATE OR ALTER AUTHENTICATION POLICY restrict_client_types_policy
  MFA_ENROLLMENT = REQUIRED
  MFA_AUTHENTICATION_METHODS = ('PASSWORD', 'SAML')
  CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI');
Copy

有关更多示例,请参阅 身份验证策略

语言: 中文