在非安全视图中共享数据

为了充分利用您共享的视图上的查询优化所带来的性能提升,您可以创建一个共享,让您与其他账户共享非安全视图。

备注

尽可能使用安全视图来加强数据的安全性。请参阅 使用安全对象控制数据访问

您只能将非安全视图添加到已显式配置为允许非安全对象的共享中。您不能共享其他非安全对象,例如非安全函数。请参阅 共享非安全视图的限制

创建一个允许非安全对象的共享

要共享非安全的视图,请创建一个允许非安全对象的共享。

例如,运行以下命令:

CREATE OR REPLACE SHARE allow_non_secure_views
 SECURE_OBJECTS_ONLY=FALSE
 COMMENT="Share views that require query optimization";
Copy

备注

有关完整语法,请参阅本主题中的 共享非安全视图的语法

在您创建一个允许共享视图的共享后,使用 GRANT <privilege> ... SHARE 命令将视图授予共享。例如,要将名为 non_secure_view 的视图授予共享,请运行以下命令:

GRANT SELECT ON VIEW non_secure_view TO SHARE allow_non_secure_views;
Copy

或者,您可以将对视图的 SELECT 权限授予数据库角色,然后将该数据库角色授予共享。例如,要将该对视图 non_secure_view 的 SELECT 权限授予数据库角色 performance_engineer,然后将该角色授予共享,请运行以下命令:

GRANT SELECT ON VIEW non_secure_view TO DATABASE ROLE performance_engineer;
GRANT DATABASE ROLE performance_engineer TO SHARE allow_non_secure_views;
Copy

转换现有共享以允许共享非安全视图

您可以将具有安全视图的现有共享转换为支持共享非安全视图的共享。

例如,要将现有的共享 secure_views_only 转换为支持共享非安全视图的共享,请执行以下操作:

  1. 使用 SHOW GRANTS 命令来确定将哪些对象授予共享,以及哪些账户可以访问共享。

    SHOW GRANTS TO SHARE secure_views_only;
    SHOW GRANTS OF SHARE secure_views_only;
    
    Copy
  2. 要将现有共享转换为允许共享视图的共享,请执行以下操作:

    ALTER SHARE secure_views_only
     SET SECURE_OBJECTS_ONLY = FALSE,
     COMMENT = "Convert to allow sharing non-secure views that require
     query optimization";
    
    Copy
  3. (可选)将现有安全视图转换为视图。在此示例中,将 secure_view2 更改为非安全视图:

    ALTER VIEW secure_view2 UNSET SECURE;
    
    Copy

有关更多详细信息,请参阅 将共享中的安全视图转换为非安全视图

将共享中的安全视图转换为非安全视图

如果您想将现有的安全视图转换为视图,可以在将视图授予共享之前或之后进行。

要将共享中的现有安全视图转换为视图,必须满足以下条件:

  • 只能将安全视图授予 配置为允许共享非安全对象 的共享。

  • 无法将安全视图授予以下各项:

    • 授予不允许共享非安全对象的共享的数据库角色。

    • 不允许共享非安全对象的共享。

例如,对于名为 high_performance_view 的现有安全视图,取消设置 SECURE 属性:

ALTER VIEW high_performance_view UNSET SECURE;
Copy

或者,您可以将安全视图重新创建为视图:

CREATE OR REPLACE VIEW high_performance_view WITH COPY GRANTS;
Copy

共享非安全视图的限制

如果您打算共享视图,请考虑以下事项:

  • 在您创建一个共享并将 SECURE_OBJECTS_ONLY 属性设置为 FALSE 后,您无法取消设置此属性或将此属性设置为 TRUE。

  • 您只能共享非安全视图。其他非安全对象(例如函数)无法共享。

共享非安全视图的语法

CREATE [ OR REPLACE ] SHARE <name>
[ SECURE_OBJECTS_ONLY = <boolean> ]
[ COMMENT = '<string_literal>' ]
Copy

必填参数

name

指定共享的标识符;对于创建共享的账户来说必须唯一。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内。例如 "My object"。放在双引号内的标识符也区分大小写。

有关标识符要求的更多信息,请参阅 标识符要求

可选参数

SECURE_OBJECTS_ONLY = boolean

指定是仅允许授予安全对象,还是也允许将非安全对象授予共享。

默认:True

COMMENT = 'string_literal'

为共享指定注释。

默认:无值

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE SHARE

账户

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

有关 Snowflake Secure Data Sharing 的具体访问控制要求的更多信息,请参阅 启用非 ACCOUNTADMIN 角色执行数据共享任务

使用说明

  • 您在运行 SHOW SHARES 时无法看到 SECURE_OBJECTS_ONLY 属性的值。使用 COMMENT 属性来记录 SECURE_OBJECTS_ONLY 属性的值。

  • CREATE SHARE 的现有记录也适用。

示例

有关如何创建具有非安全视图的共享的示例,请参阅 创建一个允许非安全对象的共享

有关使用 ALTER SHARE 的示例,请参阅 转换现有共享以允许共享非安全视图

语言: 中文