创建和访问使用者账户中的对象¶
本主题介绍提供商如何开发 Snowflake Native App,以在使用者账户中创建对象或访问现有的对象。
在使用者账户中创建和访问对象的概述¶
Snowflake Native Apps 通常需要在使用者账户中创建或访问对象。例如,即使是允许使用者查询共享数据的基本应用程序,也需要该应用程序在使用者账户中创建和使用仓库。应用程序可能还需要连接到 Snowflake 之外的外部服务。
Snowflake Native App Framework 提供了两种请求权限以在使用者账户中创建对象的方法。
自动向应用程序授予权限¶
Snowflake Native App Framework 允许提供商请求某些安全权限,然后自动授予这些权限。提供商将这些权限添加到应用程序的清单文件中。在安装或升级应用程序期间,Snowflake 会自动向该应用程序授予这些权限。
有关将应用程序配置为自动获授权限的更多信息,请参阅 配置应用程序所需的权限。
从提供商的角度来看,自动授予权限可以简化应用程序开发,因为应用程序不必确定使用者是否已授予所请求的权限或在其账户中创建了所需的对象。
从使用者的角度来看,自动授予权限可简化应用程序安装和配置。但是,默认情况下,它也削弱了使用者对应用程序在其账户中可以执行的操作的控制权。为了让使用者进一步控制应用程序可执行的操作,Snowflake Native App Framework 提供了以下功能:
- 应用程序规范:
允许使用者控制应用程序可以连接的外部端点。要访问 Snowflake 之外的服务,应用程序可能需要根据服务类型创建外部访问集成或服务集成。通过自动授予权限,应用程序可以在使用者账户中创建这些对象。但是,使用者账户的账户管理员必须批准允许应用程序执行外部连接的应用程序规范。
有关开发应用程序以使用应用程序规范的信息,请参阅 使用应用程序规范向使用者请求外部端点。有关使用者如何批准应用程序规范的信息,请参阅 使用应用程序规范批准与外部资源的连接。
- 功能策略:
功能策略允许使用者覆盖权限自动授予。在安装或升级应用程序之前,使用者可以创建功能策略,禁止应用程序创建特定类型的对象。例如,使用者可能需要配置功能策略以禁止应用程序创建仓库。如果应用程序在安装或升级期间尝试创建仓库,则安装将失败。
有关使用者如何创建功能策略的信息,请参阅 使用功能策略限制应用程序可以创建的对象。
手动向应用程序授予权限¶
对于在 自动授予权限 发布之前创建的应用程序,例如已安装但不具备在使用者账户中创建对象的必要权限的应用程序,使用者必须使用 SQL 或 Snowsight 手动向应用程序授予权限,具体取决于应用程序的配置方式。有关更多信息,请参阅 向使用者请求全局权限。
访问使用者账户中的现有对象¶
在某些情况下,应用程序需要访问应用程序之外的使用者账户中的现有对象。例如,应用程序可能需要访问使用者数据库中的现有表。为了允许应用程序创建对象,Snowflake Native App Framework 使用引用,使客户能够指定对象的名称和架构并允许访问该对象。
有关更多信息,请参阅 向使用者请求引用和对象级权限。
自动和手动权限的比较¶
应用程序要求 |
自动授予权限 |
手动授予权限 |
---|---|---|
创建对象的权限 |
应用程序有权创建对象,但有一些例外。 |
使用者必须使用 Snowsight 或 SQL 明确向应用程序授予权限。 |
访问外部服务 |
应用程序可以创建网络规则和外部访问集成。 使用者必须使用应用程序规范批准外部访问。 |
使用者必须手动创建所需的网络规则和外部访问集成,并使用引用绑定集成。 |
访问外部身份提供商 |
应用程序可以为外部 API 身份验证创建安全集成。 使用者必须使用应用程序规范批准外部连接。 |
使用者必须手动创建所需的安全集成,并将集成与引用绑定 |
访问现有对象 |
提供商必须使用引用来访问现有对象。 使用者批准对引用的访问。 |
提供商必须使用引用来访问现有对象。 使用者批准对引用的访问。 |
应用程序开发 |
提供商不必编写代码来确定使用者是否授予了特定权限。 |
提供商必须编写代码来确认消费者是否授予了特定权限。 |
应用程序安装 |
使用者不必手动创建对象或授予权限。 |
使用者必须在其账户中手动创建对象或使用 Snowsight 或 SQL 明确向应用程序授予权限。 |
通过应用程序规范使用自动权限时的安全注意事项¶
应用程序规范仅控制与 Snowflake 外部的端点之间的通信。使用者可以批准或拒绝应用程序规范,以允许或阻止应用程序连接到这些端点。
应用程序规范不会阻止应用程序创建控制外部连接的 Snowflake 对象:网络规则、外部访问集成和安全集成。创建这些对象的权限是通过自动授予权限来授予的。
应用程序规范不提供数据验证。 此外,它们不对外部访问集成或安全集成引用的密钥或令牌施加任何限制。
例如,如果提供商配置了应用程序的外部访问集成以使用 ALLOWED_AUTHENTICATION_SECRETS,并且使用者批准了该集成的应用程序规范,则该应用程序稍后可以修改其使用的密钥和令牌。
但是,如果提供商修改应用程序以使用不同的端点,则应用程序规范的序列号将发生变化,使用者将需要重新批准或拒绝新版本。