允许访问使用者账户

本主题介绍使用者如何允许 Snowflake Native App 在其账户中创建和访问对象。这包括授予应用程序请求的权限,或者通过使用引用来启用对现有对象的访问。它还描述了如何允许应用程序使用提供商在应用程序中共享的外部表和 Apache Iceberg™ 表。

应用程序所请求的权限和引用

在简单的 Snowflake Native App 中,当在安装过程中运行设置脚本时,在应用程序对象内部创建应用程序所需的所有对象。在已安装的应用程序中创建和访问应用程序所需的所有对象。使用者无需在其账户中执行任何操作。

但是,某些应用程序可能会要求使用者在其账户中执行以下类型的操作:

  • 创建数据库或仓库。

  • 执行任务。

  • 访问现有对象,例如表。

Snowflake Native App 可以请求进行两种类型的访问:

  • 允许应用程序执行某些账户级操作的权限。应用程序可以请求以下全局权限:

    • EXECUTE TASK

    • EXECUTE MANAGED TASK

    • CREATE WAREHOUSE

    • MANAGE WAREHOUSES

    • CREATE DATABASE

    • CREATE COMPUTE POOL

    • BIND SERVICE ENDPOINT

    • READ SESSION

    某些应用程序可能还会请求 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES 权限。有关详细信息,请参阅 授予 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES 权限

  • 允许应用程序访问对象的引用,这些对象已在使用者账户中存在,并且位于应用程序对象外部。提供商在 manifest.yml 文件中定义应用程序所需的引用。

    安装应用程序后,使用者可以通过创建 引用 将对象与应用程序关联,以授予对象访问权限。

    应用程序可以请求访问以下类型的对象及其相应的权限:

    对象类型

    允许的权限

    TABLE

    SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES

    VIEW

    SELECT、REFERENCES

    EXTERNAL TABLE

    SELECT、REFERENCES

    FUNCTION

    USAGE

    PROCEDURE

    USAGE

    WAREHOUSE

    MODIFY、MONITOR、USAGE、OPERATE

    API INTEGRATION

    USAGE

使用者可以使用 Snowsight 审批这些请求,或者按以下部分所述,运行 SQL 命令来审批这些请求。

备注

如果您不授予所请求的权限或将所请求对象的引用关联到应用程序,则应用程序的某些部分可能无法正常运行。

使用 Snowsight 管理访问请求

如果提供商在 Snowflake Native App 中实施用户界面,使用者可以使用 Snowsight 执行以下操作。

  • 查看和授予全局权限。

  • 授予对使用者账户中现有对象的访问权限。

授予全局权限

要在安装应用程序后授予权限或创建引用,请执行以下步骤:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Data Products » Apps

  3. 选择应用程序。

  4. 选择工具栏中的 Settings 图标。

  5. 选择 Privileges 选项卡。

    应用程序请求的账户级权限显示在 Account level privileges 下面

  6. Account-level privileges 部分中,选择 Review,然后切换您要授予的每项权限对应的滑块。

  7. 选择 Save

授权访问特定对象

如果提供商为 Snowflake Native App 实施用户界面,使用者可以使用 Snowsight 授予对其账户中对象的访问权限。

要授予对特定对象的访问权限,请执行以下步骤:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Data Products » Apps

  3. 选择应用程序。

  4. 选择工具栏中的 Settings 图标。

  5. 选择 Privileges 选项卡。

  6. Privileges to objects 部分,选择要授予其访问权限的对象旁边的 Add

  7. 选择 Select Data,然后选择要授予其访问权限的数据产品。

  8. 选择 Done

撤消对象的权限和访问权限

要撤消对象的权限或移除对象的访问权限,请执行以下步骤:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Data Products » Apps

  3. 选择应用程序。

  4. 选择工具栏中的 Settings 图标。

  5. 选择 Privileges 选项卡。

    • 要撤消全局权限,请选择 Edit 按钮,然后切换您要撤消的权限的滑块。

    • 要撤消对特定对象的访问权限,请选择 Delete 按钮,然后选择 Revoke Privilege

备注

如果撤消权限或移除对象的访问权限,可能会导致应用程序变得不稳定或停止运行。

使用 SQL 命令管理应用程序的权限

如果应用程序开发者没有实施用于授予权限的界面,您必须使用 SQL 命令管理应用程序的访问请求。

查看应用程序请求的权限

如果提供商指定应用程序所需的权限,权限请求将包含在要安装的应用程序内。您可以在安装应用程序后查看这些权限。

要查看应用程序所需的权限,请按如下示例所示运行 SHOW PRIVILEGES 命令:

SHOW PRIVILEGES IN APPLICATION hello_snowflake_app;
Copy

向 Snowflake Native App 授予权限

使用者确定应用程序请求的权限后,可以向应用程序授予这些权限。

例如,要向应用程序授予 EXECUTE TASK 权限,请按如下示例所示运行 GRANT PRIVILEGE 命令:

GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION hello_snowflake_app;
Copy

向 Snowflake Native App 授予 MANAGE WAREHOUSES 权限

MANAGE WAREHOUSES 权限 允许应用程序在使用者账户内创建、修改和使用仓库。要向应用程序授予 MANAGE WAREHOUSES 权限,请按如下示例所示使用 GRANT

GRANT MANAGE WAREHOUSES ON ACCOUNT TO APPLICATION hello_snowflake_app;
Copy

授予 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES 权限

某些应用程序可能会请求使用者授予账户中 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES 权限。要授予此权限,只能使用 SQL 命令,不能使用 Snowsight 授予。如果应用程序请求此权限,则提供商应将此请求传达给使用者,例如,在应用程序的 README 文件中。

要授予 SNOWFLAKE 数据库的 IMPORT 权限,请运行以下命令:

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO APPLICATION hello_snowflake_app;
Copy

备注

IMPORTED PRIVILEGES 权限允许应用程序访问与关联到使用者账户的使用情况和成本有关的信息。在授予此权限之前,使用者应确保希望与应用程序共享此信息。

手动授予对象的访问权限

当提供商在 manifest.yml 文件中定义对象引用时,此引用的定义将作为已安装应用程序的一部分包含在内。使用者可以在其账户中创建对象的引用,以授权应用程序访问该对象。如果提供商未创建用于允许访问使用者账户中的对象的用户界面,则使用者可以手动授予访问权限。

如果使用者具有所请求的对象权限,则可以创建对象引用,以与应用相关联。例如,如果对象(例如表)需要 SELECT 和 INSERT 权限,则使用者必须使用具有表的 SELECT 和 INSERT 权限的角色来创建引用。要查看对象类型以及需要授予每个对象的特定权限,请参阅 查看应用程序请求的引用

备注

引用不会授予对象的任何权限。如果用于创建引用的角色失去了对象的权限,则引用将不再有效。使用者必须执行以下操作之一:

  • 为创建引用的角色恢复所需权限。

  • 使用所需对象权限的角色重新创建引用。

查看应用程序所请求的引用

使用者可以通过运行 SHOW REFERENCES 命令来查看应用程序所请求的引用,如以下示例所示:

SHOW REFERENCES IN APPLICATION hello_snowflake_app;
Copy

此命令显示在应用程序中定义的所有引用的列表。它还显示使用者角色要创建引用所必须具有的对象权限。

创建引用并将引用关联到应用程序

在查看应用程请求的 引用 时,使用者可以通过运行 SYSTEM$REFERENCE 系统函数来创建引用,如以下示例所示:

SELECT SYSTEM$REFERENCE('table', 'db1.schema1.table1', 'persistent', 'select', 'insert');
Copy

此命令会创建引用并返回对象的标识符。标识符类似于以下示例:

ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D

使用者将此标识符传递给回调存储过程,以将引用关联到应用程序。

备注

使用者必须为应用程序请求的每个引用运行此命令。

要将引用关联到应用程序,您必须将通过调用 SYSTEM$REFERENCE 系统函数返回的标识符传递给回调存储过程。回调过程是提供商在 Snowflake Native App 中创建的存储过程,用于将引用关联至应用程序。

要使用回调过程,请运行以下命令:

CALL app.config.register_single_reference(
  'consumer_table', 'ADD', 'ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D');
Copy

在此示例中,register_single_reference() 存储过程将使用标识符 ENT_REF_TABLE_16617302895522_2CDD20F5C047A5B87B2CE36F6837715786AF9F2D 的引用关联到应用程序。

备注

提供商可以在应用程序中包含不同的回调过程。应在应用程序的 README 文件中加以指定。

只需一步即可创建引用并将其关联至应用程序

查看应用程序请求的 引用 之后,使用者可以创建引用并将其关联到应用程序,方法是将 SYSTEM$REFERENCE 系统函数作为实参,传递到回调存储过程。

以下示例显示了将 SYSTEM$REFERENCE 系统函数作为实参传递到回调存储过程所用的语法:

CALL app.config.register_single_reference(
 'consumer_table', 'ADD', SYSTEM$REFERENCE('table', 'db1.schema1.table1',
 'PERSISTENT', 'SELECT', 'INSERT'));
Copy

此示例创建引用,并将标识符传递给回调函数,从而将引用关联到应用程序。

启用外部表和 Apache Iceberg™ 表

Snowflake Native App Framework 允许提供商与应用程序中使用者共享提供商共享的外部表和 Apache Iceberg™ 表。但是,使用者必须授予应用程序访问这些表的权限。

安全性和成本注意事项

当允许应用访问外部表或 Iceberg 表时,使用者应注意以下几点:

  • 外部表和 Iceberg 表可能会给使用者带来数据泄漏风险。例如,如果应用程序公开了包含外部表的视图,则提供商可能通过使用其云提供商访问日志来确定使用者进行的查询类型。

  • 如果包含表的对象存储不位于发布应用程序的同一区域,外部表和 Iceberg 表可能会产生与出口和入口使用相关的额外费用。

使用 Snowsight 启用外部表和 Iceberg 表

提供商可以将应用配置为向所有使用者显示对话框,以允许应用程序访问外部表或 Iceberg 表。

要允许应用程序访问外部表或 Iceberg 表,请执行以下步骤:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Data Products » Apps

  3. 选择应用程序。

  4. 选择工具栏中的 Settings 图标。

  5. 选择 Privileges 选项卡。

  6. External data access 下,选择 Review

  7. 选择 Enable

使用 SQL 启用外部表和 Iceberg 表

要使用 SQL 启用对外部表和 Iceberg 表的访问,请使用 SET_APPLICATION_RESTRICTED_FEATURE_ACCESS 系统函数,如下图所示:

SELECT SYSTEM$SET_APPLICATION_RESTRICTED_FEATURE_ACCESS(hello_snowflake_app, 'external_data', ‘{"allowed_cloud_providers" : "all"}’);
Copy

此命令允许 hello_snowflake_app 应用程序访问应用程序使用的外部表或 Iceberg 表。

要确定是否已为应用程序启用了外部表和 Iceberg 表,请使用 LIST_APPLICATION_RESTRICTED_FEATURES 系统函数,如以下示例所示:

SYSTEM$LIST_APPLICATION_RESTRICTED_FEATURES('hello_snowflake_app')
Copy

此系统函数返回一个 JSON 对象,指示是否允许外部表和 Iceberg 表用于 hello_snowflake_app

语言: 中文