保护提供商的知识产权

本主题介绍 Snowflake Native App Framework 如何通过编辑或删除有关 Snowflake Native App 共享的对象的信息来保护提供商数据。

关于 Snowflake Native App Framework 中的知识产权保护

当使用者安装 Snowflake Native App 时,不允许他们查看应用程序对象中的对象,除非提供商使用应用程序角色授予对象的权限。

通常,在使用者使用架构、视图查询对象元数据,或者使用 Snowsight 查看这些查询的 Query Profile 或 Query History 时,Snowflake Native App Framework 会编辑有关应用程序对象内的对象的信息。

从查询配置文件中隐去的信息

在以下上下文中,Snowflake Native App Framework 编辑 查询配置文件 中的信息:

  • 在安装或升级应用程序时运行的查询。

  • 源自应用程序所拥有的存储过程的查询。

  • 包含应用程序所拥有的非安全视图或函数的查询。

对于以上任何类型的查询,Snowsight 都会将查询配置文件数据合并到单个空节点中,而不是显示完整的查询配置文件树。

从查询历史记录中隐去的信息

For queries related to a Snowflake Native App, the query_text and error_message fields are redacted from the query history in the following contexts:

  • 安装或升级应用程序时运行的查询。

  • 源自应用程序拥有的存储过程的子作业的查询。

在每种情况下,Snowsight 中查询历史记录的单元格显示空白。

从 SQL 命令和视图中隐去的信息

当使用者使用 SHOW 或 DESCRIBE 命令查看有关应用程序对象或应用程序拥有的对象的信息时,有关实施细节的信息将被隐去。例如,会从这些命令的输出中隐去函数定义和函数正文。

在以下上下文中,会从 ACCESS_HISTORY 视图中隐去有关实施细节的信息:

  • 安装或升级应用程序时生成的查询。

  • 由应用程序拥有的存储过程和用户定义的函数生成的查询。

此外,对于应用程序拥有的视图,将会隐去有关基表的信息。

授予动态表的 MONITOR 或 OPERATE 权限时的注意事项

提供商在向应用程序角色授予动态表的 MONITOR 或 OPERATE 权限时应当小心。这些权限允许使用者查看动态表的元数据,这可能会暴露应用程序的实现细节。有关使用者可以执行哪些操作的更多信息,请参阅 查看动态表元数据的权限。

被阻止的上下文函数

要保护与应用程序对象中的对象相关的信息,Snowflake Native App Framework 会阻止以下上下文函数:

上下文函数

在共享内容时被阻止(返回 null)

在 Snowflake Native App 拥有的安装脚本和存储过程以及 UDFs 中被阻止(引发异常)

CURRENT_ROLE

✔

CURRENT_ROLE_TYPE

✔

CURRENT_USER

✔

CURRENT_SESSION

✔

IS_ROLE_IN_SESSION

✔

CURRENT_IP_ADDRESS

✔

✔

CURRENT_AVAILABLE_ROLES

✔

✔

CURRENT_SECONDARY_ROLES

✔

✔

ALL_USER_NAMES

✔

GET_USERS_FOR_COLLABORATION

✔

CURRENT_WAREHOUSE

✔

SYSTEM$ALLOWLIST

✔

保护共享内容

为保护提供商数据内容的隐私和完整性,Snowflake Native App Framework 会实施以下限制:

  • 对于应用程序对象,共享对象是只读的,并且已安装 Snowflake Native App。

  • 共享对象不直接向使用者公开。在 Snowflake Native App 安装或升级过程中,对象仅通过在安装脚本运行期间安装的视图中公开。

  • 只有提供商可以更新共享内容。

  • 只有以下对象可以与应用程序对象或已安装的 Snowflake Native App 共享。这些对象必须具备某些权限:

    • 架构:只能向应用程序包的共享内容授予 USAGE 权限。

    • 表:只能向应用程序包的共享内容授予 SELECT 权限。不能共享具有定义的策略(行访问、掩码、基于标签等)的表。当对象向使用者公开时,可以在对象上定义策略。

    • 视图:只能向应用程序包的共享内容授予 SELECT 权限。不能共享具有定义的策略(包括行访问权限、掩码、基于标签等)的视图。

备注

视图或组成它们的任何视图均不能包含 JavaScript、Java、Python 或 Scala 函数。

有关更多信息,请参阅 允许使用者访问应用程序中的共享对象。