使用功能策略限制应用程序可以创建的对象

本主题介绍如何使用功能策略来限制 Snowflake Native App 可以创建的对象。

关于功能策略

If an app is configured to use automated granting of privileges, the app can request to use the following privileges:

  • EXECUTE TASK

  • EXECUTE MANAGED TASK

  • CREATE WAREHOUSE

  • CREATE COMPUTE POOL

  • BIND SERVICE ENDPOINT

  • CREATE DATABASE

  • CREATE EXTERNAL ACCESS INTEGRATION

If the app is configured to use these privileges, a consumer cannot directly revoke these privileges after the app is installed. However, consumer administrators can use feature policies to limit the objects an app can create in the consumer account.

例如,如果使用者不希望应用程序创建仓库或计算池,则使用者账户管理员可以创建一个功能策略,以禁止特定应用程序或所有应用程序创建仓库或计算池。

功能策略允许使用者限制应用程序创建或使用以下对象:

  • COMPUTE POOLS

  • DATABASES

  • TASKS

  • WAREHOUSES

备注

External access integrations can't be blocked using feature policies. Instead, consumers can choose to approve or decline the endpoints for an app using app specifications.

工作流程

The general workflow for using feature policies to limit the objects an app can create is:

  1. 查看应用程序的列表,以确定应用程序请求的权限。

  2. 如果您想限制任何对象,请创建功能策略来阻止这些对象。

    有关更多信息,请参阅 创建新功能策略

  3. 将功能策略应用于账户或特定对象。

    有关更多信息,请参阅 分配账户级别的功能策略将功能策略应用到应用程序

使用功能策略时的复制注意事项

在指定包含策略的数据库时(例如通过在复制组或故障转移组中设置 ALLOWED_DATABASES = policy_db),会复制账户级的功能策略引用。

如果账户已经复制到目标账户,使用者账户管理员必须执行以下操作:

  1. 在源账户中更新复制或故障转移组,以包含成功复制功能策略所需的数据库和对象类型。

  2. 执行刷新操作以更新目标账户。

备注

功能策略必须与账户级策略分配在同一账户中。

如果您在账户上设置了功能策略,但未更新复制或故障转移组以包含包含该策略的 policy_db,则会在目标账户中产生悬挂引用。这意味着 Snowflake 无法在目标账户中定位该策略,因为策略的完全限定名称指向源账户中的数据库。结果是,目标账户或目标账户中的用户无需遵守该功能策略。

要成功复制功能策略,请确保复制或故障转移组包含所需的对象类型和数据库,以防止产生悬挂引用。

有关更多信息,请参阅 复制的注意事项

功能策略优先顺序

使用者可以将功能策略应用于账户中的所有应用程序或指定的某个应用程序。当多个层级都应用了功能策略时,则越具体的功能策略会替换越通用的策略。以下内容概述了优先顺序:

账户:

应用于账户的功能策略是最通用的功能策略。它们会被应用于特定对象(例如某个应用程序)的功能策略所替换

对象:

应用于特定对象的功能策略会替换应用于该账户的功能策略。

使用者可以利用这种优先顺序来精细控制某个应用程序可在其账户中创建的对象。例如,使用者可以应用一个账户级的功能策略,禁止账户中的所有应用程序创建数据库。如果应用程序在安装期间尝试创建数据库,则安装将失败。

但是,使用者也可以创建不受限制的功能策略,并将该功能策略应用于特定的应用程序。这样该应用程序就可以创建数据库。

有关更多信息,请参阅 创建新功能策略

使用功能策略所需的权限

下表介绍了了创建和使用功能策略所需的权限:

权限

对象

备注

CREATE FEATURE POLICY

SCHEMA

创建功能策略所需的权限。必须在包含功能策略的架构上授予此权限。

APPLY FEATURE POLICY

ACCOUNT

APPLY 或 OWNERSHIP

FEATURE POLICY

使用功能策略

使用者可以使用 Snowsight 或 SQL 管理功能策略的生命周期。

创建新功能策略

使用者可以创建功能策略来禁止应用程序创建某些类型的对象。以下示例显示如何创建功能策略以禁止应用程序创建数据库:

CREATE DATABASE feature_policy_db;
CREATE SCHEMA sch;
CREATE FEATURE POLICY block_create_db_policy
  BLOCKED_OBJECT_TYPES_FOR_CREATION = (DATABASE);
Copy

备注

Feature policies must be created within a schema.

使用者还可以创建不限制创建对象的功能策略,如以下示例所示:

CREATE FEATURE POLICY block_nothing_policy
  BLOCKED_OBJECT_TYPES_FOR_CREATION = ();
Copy

分配账户级别的功能策略

使用者可以使用 ALTER ACCOUNT 命令应用账户级别的功能策略,如以下示例所示:

ALTER ACCOUNT
  SET FEATURE POLICY feature_policy_db.sch.block_create_db_policy
  FOR ALL APPLICATIONS;
Copy

此命令将 block_create_db_policy 策略应用于账户中安装的任何应用程序。应用此策略后,应用程序将无法再创建数据库。

将功能策略应用到应用程序

要在手动创建应用程序时应用功能策略,请使用 CREATE APPLICATION 命令的 WITH FEATURE POLICY 子句,如以下示例所示:

CREATE APPLICATION hello_snowflake_app
  WITH FEATURE POLICY = feature_policy_db.block_create_db_policy;
Copy

要将功能策略应用到应用程序,请使用 ALTER APPLICATION 命令,如以下示例所示:

ALTER APPLICATION hello_snowflake_app
  SET FEATURE POLICY feature_policy_db.block_create_db_policy;
Copy

取消应用功能策略

要取消应用账户级别的功能策略,请使用 ALTER ACCOUNT 命令,如以下示例所示:

ALTER ACCOUNT UNSET FEATURE POLICY FOR ALL APPLICATIONS;
Copy

要取消特定应用程序的功能策略,请使用 ALTER APPLICATION 命令,如以下示例所示:

ALTER APPLICATION FEATURE_POLICY_TEST_APP UNSET FEATURE POLICY;
Copy

删除功能策略

要删除功能策略,请使用 DROP FEATURE POLICY 命令,如以下示例所示:

DROP FEATURE POLICY block_create_db_policy;
Copy

查看有关功能策略的信息

要查看您拥有访问权限的账户中的功能策略,请使用 SHOW FEATURE POLICIES 命令:

SHOW FEATURE POLICIES ON ACCOUNT;
Copy

要查看应用于应用程序的功能策略,请使用以下命令:

SHOW FEATURE POLICIES ON APPLICATION hello_snowflake_app;
Copy

要查看有关特定功能策略的信息,请使用 DESCRIBE FEATURE POLICY,如以下示例所示:

DESCRIBE FEATURE POLICY feature_policy_db.block_create_db_policy;
Copy
语言: 中文