允许访问使用者账户¶
本主题介绍使用者如何允许 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 权限。 
- References that allow the app to access objects that already exist in the consumer account and are outside the application object. A provider defines the references required by the app in the manifest file. - 安装应用程序后,使用者可以通过创建 引用 将对象与应用程序关联,以授予对象访问权限。 - 应用程序可以请求访问以下类型的对象及其相应的权限: - 对象类型 - 允许的权限 - 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 执行以下操作。
- 查看和授予全局权限。 
- 授予对使用者账户中现有对象的访问权限。 
授予全局权限¶
- 登录 Snowsight。 
- In the navigation menu, select Catalog » Apps. 
- 选择应用程序。 
- 选择工具栏中的 Settings 图标。 
- 选择 Privileges 选项卡。 - 应用程序请求的账户级权限显示在 Account level privileges 下面 
- 在 Account level privileges 窗格中,选择 Edit 图标,然后移动要授予的每个权限的滑块。 
- 选择 Update Privileges。 
撤销对象的权限和访问权限¶
如果撤消权限或移除对象的访问权限,可能会导致应用程序变得不稳定或停止运行。
- 登录 Snowsight。 
- In the navigation menu, select Catalog » Apps. 
- 选择应用程序。 
- 选择工具栏中的 Settings 图标。 
- 选择 Privileges 选项卡。 
- 在 Account level privileges 窗格中,选择 Edit 图标,然后移动要撤销的权限的滑块。 
- 选择 Update Privileges。 
使用 SQL 命令管理应用程序的权限¶
如果您的提供商没有实现授予权限的接口,则必须使用 SQL 命令来管理应用程序访问请求。
查看应用程序请求的权限¶
如果提供商指定应用程序所需的权限,权限请求将包含在要安装的应用程序内。您可以在安装应用程序后查看这些权限。
要查看应用程序所需的权限,请按如下示例所示运行 SHOW PRIVILEGES 命令:
SHOW PRIVILEGES IN APPLICATION hello_snowflake_app;
向 Snowflake Native App 授予权限¶
使用者确定应用程序请求的权限后,可以向应用程序授予这些权限。
例如,要向应用程序授予 EXECUTE TASK 权限,请按如下示例所示运行 GRANT <privileges> ... TO ROLE 命令:
GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION hello_snowflake_app;
向 Snowflake Native App 授予 MANAGE WAREHOUSES 权限¶
MANAGE WAREHOUSES 权限 允许应用程序在使用者账户内创建、修改和使用仓库。要向应用程序授予 MANAGE WAREHOUSES 权限,请按如下示例所示使用 GRANT <privileges> ... TO ROLE:
GRANT MANAGE WAREHOUSES ON ACCOUNT TO APPLICATION hello_snowflake_app;
授予 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES 权限¶
某些应用程序可能会请求使用者授予账户中 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES 权限。要授予此权限,只能使用 SQL 命令,而不能使用 Snowsight。如果应用程序请求此权限,则提供商应将此请求传达给使用者,例如,在应用程序的 README 文件中。
要授予 SNOWFLAKE 数据库的 IMPORT 权限,请运行以下命令:
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE TO APPLICATION hello_snowflake_app;
备注
IMPORTED PRIVILEGES 权限允许应用程序访问与关联到使用者账户的使用情况和成本有关的信息。在授予此权限之前,使用者应确保希望与应用程序共享此信息。
启用外部表和 Apache Iceberg™ 表¶
Snowflake Native App Framework 允许提供商与应用程序中使用者共享提供商共享的外部表和 Apache Iceberg™ 表。但是,使用者必须授予应用程序访问这些表的权限。
安全性和成本注意事项¶
当允许应用访问外部表或 Iceberg 表时,使用者应注意以下几点:
- 外部表和 Iceberg 表可能会给使用者带来数据泄漏风险。例如,如果应用程序公开了包含外部表的视图,则提供商可能通过使用其云提供商访问日志来确定使用者进行的查询类型。 
- 如果包含表的对象存储不位于发布应用程序的同一区域,外部表和 Iceberg 表可能会产生与出口和入口使用相关的额外费用。 
使用 Snowsight 启用外部表和 Iceberg 表¶
提供商可以将应用配置为向所有使用者显示对话框,以允许应用程序访问外部表或 Iceberg 表。
要允许应用程序访问外部表或 Iceberg 表,请执行以下步骤:
- 登录 Snowsight。 
- In the navigation menu, select Catalog » Apps. 
- 选择应用程序。 
- 在工具栏中,选择 Settings。 
- 选择 Privileges 选项卡。 
- 在 External data access 下,选择 Review。 
- 选择 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"}');
此命令允许 hello_snowflake_app 应用程序访问应用程序使用的外部表或 Iceberg 表。
要确定是否已为应用程序启用了外部表和 Iceberg 表,请使用 LIST_APPLICATION_RESTRICTED_FEATURES 系统函数,如以下示例所示:
SYSTEM$LIST_APPLICATION_RESTRICTED_FEATURES('hello_snowflake_app')
此系统函数返回一个 JSON 对象,指示是否允许外部表和 Iceberg 表用于 hello_snowflake_app。