CREATE SECURITY INTEGRATION(外部 API 身份验证)

为账户中的外部 API 身份验证创建新的安全集成或替换现有集成。

有关创建其他类型的安全集成(例如外部 OAuth)的信息,请参阅 CREATE SECURITY INTEGRATION

另请参阅:

ALTER SECURITY INTEGRATION(外部 API 身份验证)DESCRIBE INTEGRATIONDROP INTEGRATIONSHOW INTEGRATIONS

语法

OAuth:客户端凭据

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'CLIENT_CREDENTIALS']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_ALLOWED_SCOPES = ( '<scope_1>' [ , '<scope_2>' ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

OAuth:授权代码授予流程

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'AUTHORIZATION_CODE']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ COMMENT = '<string_literal>' ]
Copy

OAuth:JWT Bearer Flow

CREATE SECURITY INTEGRATION <name>
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = { TRUE | FALSE }
  [ OAUTH_AUTHORIZATION_ENDPOINT = '<string_literal>' ]
  [ OAUTH_TOKEN_ENDPOINT = '<string_literal>' ]
  [ OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST ]
  [ OAUTH_CLIENT_ID = '<string_literal>' ]
  [ OAUTH_CLIENT_SECRET = '<string_literal>' ]
  [ OAUTH_GRANT = 'JWT_BEARER']
  [ OAUTH_ACCESS_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ COMMENT = '<string_literal>' ]
Copy

必填参数

name

指定集成的标识符(即名称)。此值在您的账户中必须唯一。

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

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

TYPE = API_AUTHENTICATION

指定您正在 Snowflake 和使用 OAuth 2.0 及外部 API 身份验证的外部服务之间创建安全接口。

AUTH_TYPE = OAUTH2

指定集成使用 OAuth 2.0 对外部服务进行身份验证。

ENABLED = { TRUE | FALSE }

指定是启用还是禁用此安全集成。

TRUE

允许集成基于集成定义中指定的参数运行。

FALSE

暂停集成以进行维护。Snowflake 与第三方服务之间的任何集成都无法正常工作

可选参数

请注意,这是可由您配置的详尽参数列表。配置集成中的参数,使其与在基于选定的 OAuth 流程 创建密钥 时配置的参数相匹配。

OAUTH_AUTHORIZATION_ENDPOINT = 'string_literal'

指定用于对外部服务进行身份验证的 URL。例如,要连接到 ServiceNow 实例,URL 应采用以下格式:

https://<instance_name>.service-now.com/oauth_token
Copy

其中 instance_name 是 ServiceNow 实例的名称。

OAUTH_TOKEN_ENDPOINT = 'string_literal'

指定客户端用于获取访问令牌的令牌端点,方法是提供其授权授予或刷新令牌。令牌端点用于每个授权授予,但隐式授权类型除外(因为访问令牌是直接颁发的)。

OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST

指定将 POST 用作外部服务的身份验证方法。

OAUTH_CLIENT_ID = 'string_literal'

指定外部服务中 OAuth 应用程序的客户端 ID。

OAUTH_CLIENT_SECRET = 'string_literal'

为上一步中的 ServiceNow 实例中的 OAuth 应用程序指定客户端密钥。连接器使用该密钥向 ServiceNow 实例请求访问令牌。

OAUTH_GRANT = 'string_literal'

指定 OAuth 流的类型。以下其中一项:

  • 'CLIENT_CREDENTIALS',当集成使用客户端凭据时。

  • 'AUTHORIZATION_CODE',当集成使用授权代码时。

  • 'JWT_BEARER',当集成将

OAUTH_ACCESS_TOKEN_VALIDITY = integer

指定由 OAuth 服务器颁发的 OAuth 访问令牌的默认生命周期(以秒为单位)。

如果访问令牌生命周期未作为 OAuth 令牌响应的一部分返回,则使用此属性中设置的值。当两个值都可用时,两者中较小的值将用于刷新访问令牌。

OAUTH_REFRESH_TOKEN_VALIDITY = integer

指定用于确定从 OAuth 服务器获取的刷新令牌有效性的值。

OAUTH_ALLOWED_SCOPES = ( 'scope_1' [ , 'scope_2' ... ] )

指定以逗号分隔的范围列表,每个范围放在单引号内,在 OAuth 客户端凭证流期间由集成中具备 USAGE 的角色通过 OAuth 发出请求时使用。

此列表必须是安全集成的 OAUTH_ALLOWED_SCOPES 属性中定义的范围的子集。如果未指定 OAUTH_SCOPES 属性值,则密钥将继承安全集成中指定的所有范围。

对于 ServiceNow 连接器,唯一可能的范围值是 'useraccount'

默认:空列表(即 [])。

COMMENT = 'string_literal'

指定集成的注释。

默认:无值

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE INTEGRATION

账户

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

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

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

使用说明

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

  • CREATE OR REPLACE <object> 语句是原子的。也就是说,当对象被替换时,旧对象将被删除,新对象将在单个事务中创建。

示例

创建一个名为 servicenow_oauth 的安全集成,使用 OAuth 及代码授权流程将 Snowflake 连接到名为 myinstance 的 ServiceNow 实例:

CREATE SECURITY INTEGRATION servicenow_oauth
  TYPE = api_authentication
  AUTH_TYPE = oauth2
  OAUTH_CLIENT_AUTH_METHOD = client_secret_post
  OAUTH_CLIENT_ID = 'sn-oauth-134o9erqfedlc'
  OAUTH_CLIENT_SECRET = 'eb9vaXsrcEvrFdfcvCaoijhilj4fc'
  OAUTH_TOKEN_ENDPOINT = 'https://myinstance.service-now.com/oauth_token.do'
  ENABLED = true;
Copy
语言: 中文