使用共享

本主题介绍与数据提供商账户关联的任务:创建和配置共享、与其他(即使用者)账户共享这些共享,以及持续执行共享的维护。

本主题内容:

数据共享和业务关键账户

对于业务关键账户,以下条件适用于与其他账户中的使用者共享数据。

提供商

使用者

支持

已启用

备注

业务关键 (具有 HIPAA 和 HITRUST 认证

业务关键 (具有 HIPAA 和 HITRUST 认证

两个 HIPAA 账户应相互签署 BAA。

业务关键 (具有 HIPAA 和 HITRUST 认证

所有其他版本

有关更多信息,请参阅 启用从业务关键账户到非业务关键账户的共享

业务关键

业务关键或业务关键 (具有 HIPAA 和 HITRUST 认证

业务关键

所有其他版本

有关更多信息,请参阅 启用从业务关键账户到非业务关键账户的共享

对于所有其他 Snowflake 版本:

注意

Snowflake 不负责确保参与数据共享的 HIPAA(和 HITRUST)账户相互签署了 BAA;这由共享数据的账户自行决定。未签署 BAA 可能会影响两个账户的 HIPAA 和 HITRUST 合规性(尤其 是提供商账户)。

如果您有业务关键账户,请在请求 Snowflake 允许与非业务关键账户进行 Secure Data Sharing 之前考虑以下事项,以保持预期的数据保护级别:

  • 不要与非业务关键账户共享敏感数据。

  • 请考虑创建一个非业务关键账户来存储不太敏感的数据,然后与非业务关键账户共享此数据。

以上只是建议,Snowflake 不会强制执行。共享数据的决定始终由数据提供商自行做出。Snowflake 对不当共享的数据不承担任何责任。

数据共享一般注意事项和用法

请注意以下有关创建和维护共享的重要用法详细信息:

  • 您可以跨区域和云平台共享数据。有关更多信息,请参阅 跨区域和云平台安全共享数据

  • 一个共享可以包含来自多个数据库的数据。有关更多信息,请参阅 共享来自多个数据库的数据

  • 将使用者账户添加到共享中后,使用者可立即使用该共享。

  • 新的和修改的行立即可供从共享创建数据库的使用者使用。这只适合使用者已经具有访问权限的情况。

  • 在授予共享的数据库中创建或重新创建的新对象 自动提供给使用者使用。例如,如果删除并重新创建某个对象,则即使名称相同,它仍会被视为新对象。若要使某个新对象可供使用者使用,必须使用 GRANT <privilege> ...TO SHARE 命令将该对象显式添加到共享中。

  • 出于数据安全和隐私原因,目前共享中仅支持 安全视图。如果将标准视图添加到共享,Snowflake 将返回错误。

  • 建议不要这样做:在数据库中的流上创建安全视图,然后与使用者共享这些视图。此场景需要能够修改另一个账户中的流,但此操作不受支持,因此是一种反模式。应改为允许使用者在您共享的表和安全视图上创建自己的流。有关更多信息,请参阅 共享对象上的流 (本主题内容)。

使用 SQL 进行数据共享

可以使用任何角色来准备要共享的对象。其他数据共享任务(例如创建共享或向共享添加使用者账户)需要 ACCOUNTADMIN 角色或被授予全局 CREATE SHARE 权限的角色。有关 CREATE SHARE 权限的更多详细信息,请参阅 启用非 ACCOUNTADMIN 角色执行数据共享任务

如果您想使用 DDL 创建和管理数据库角色,请使用此处列出的命令:

如果您想使用 DDL 查看、授予或撤消对共享中数据库对象的访问权限,请使用此处列出的命令:

准备创建共享

在创建共享之前,Snowflake 建议确定您计划共享的 Snowflake 对象:

  • 数据库

  • 动态表

  • 外部表

  • Iceberg 表

  • 安全视图

  • 安全的物化视图

  • 安全的用户定义函数 (UDFs)

这可能需要执行一些额外的规划和管理任务,特别是当您决定仅共享任何表中的数据子集时。

数据库和表

如果您计划共享数据库,则只需进行少量准备或无需准备。

如果您计划共享整个表,则无需进行任何准备。

但是,如果您决定根据特定条件或按使用者账户筛选表(或表集)中的数据,则必须在表上创建一个或多个安全视图。

安全对象(视图、物化视图和 UDFs)

若要严格控制对共享数据库中数据的访问,则 必须 使用 安全视图安全的物化视图 和/或 安全的 UDFs。例如,您可以选择按日期或其他条件筛选数据,也可以决定使用单个共享来对不同使用者账户的共享数据进行分区。通过安全对象,您可以指定要应用于数据的粒度级别,同时确保不会公开基表和业务逻辑。

与标准对象类似,安全对象也是使用相应的 CREATE <object>ALTER <object> 命令来定义。但是,请注意以下重要的用法信息:

  • 通过完全限定名称(即 <db_name>.<schema_name>.<table_name>)引用表的安全对象可以包含在共享中;但是,必须确保引用的数据库名称与共享的数据库 匹配

  • 不要CURRENT_USERCURRENT_ROLE 函数的定义中包含使用了这两个函数的安全对象。这两个函数返回的上下文值与使用者的账户无关,并且会导致对象在被查询/使用时失败。

  • 在定义要与使用者账户共享的安全对象时,要执行的一个关键/重要附加步骤是:验证对象是否正确配置为仅显示您希望显示的数据。如果您希望根据与之共享数据的账户限制数据访问,这一点尤为重要。为了便于执行此验证,Snowflake 提供了 SIMULATED_DATA_SHARING_CONSUMER 会话参数。SIMULATED_DATA_SHARING_CONSUMER 会话参数仅支持安全视图和安全的物化视图,而不支持安全的 UDFs。通过在会话中设置此参数,您可以在计划与之共享安全视图的任何使用者账户中,模拟以用户身份查询该视图。

    例如,对于使用者账户 xy12345

    ALTER SESSION SET SIMULATED_DATA_SHARING_CONSUMER = xy12345;
    
    Copy

有关详细示例,请参阅 使用安全对象控制数据访问

共享对象上的流

数据使用者可以在自己的数据库中创建流,以记录对源表或源视图所做的数据操作语言 (DML) 更改。

备注

此处列出的操作不受支持:

  • 不支持在辅助源对象的共享上创建仅追加流。

  • 不支持修改其他账户中的流。

您可以允许使用者在共享表或安全视图上创建流。在执行此操作之前,您需要延长表的数据保留期,并且还需要在共享表或共享视图的基础表上启用更改跟踪。在使用 CREATE TABLEALTER TABLE 创建或更改表时,可以设置 CHANGE_TRACKING 和 DATA_RETENTION_TIME_IN_DAYS 参数。

启用更改跟踪:

目前,当创建本地表的第一个流时,表中会自动添加一对隐藏列,而且这对列会开始存储更改跟踪元数据。由于共享的使用者无法修改源数据库,因此,无法对共享表进行此更改。要为计划用于共享的表启用更改跟踪,请在每个表上执行 ALTER TABLE ... CHANGE_TRACKING = TRUE。

延长表的数据保留期:

如果未定期使用本地表上的流,Snowflake 会暂时延长源表的数据保留期,以帮助避免过期。

共享表上的流不会延长表的数据保留期。同样,共享视图上的流不会延长基础表的数据保留期。若要手动为任何共享表或共享视图的任何基础表指定更长的数据保留期,请设置表的 DATA_RETENTION_TIME_IN_DAYS 参数。

共享的标签引用

数据共享提供商可以在对象上设置标签,并与数据共享使用者共享标签和标记的对象。此外,共享对象的标签引用可供使用者使用。共享标签引用允许提供商共享有关共享对象的其他上下文,例如基于标签字符串值的表或列的数据敏感度。

使用者可使用 SQL 查看共享对象上的标签分配,并确定共享对象的标签引用。通过查看共享对象的标签分配和引用,使用者账户中的数据管理员可以提供有关数据来源和数据使用方式的更全面评估。这些新的见解有助于确保遵守法规。

提供商必须在与标记的对象相同的数据库中创建标签,并共享此数据库。共享数据库后,如果提供商从共享对象中取消设置标签,则使用者账户中也会发生标签分配的更改。一旦取消设置标签,使用者就无法使用该标签跟踪共享对象。通过取消设置标签,提供商可以在无意中标记了对象时保持数据处理权。

标签沿袭 适用于共享数据库中的标记对象。例如,如果提供商在共享数据库中的架构上设置标签,则该架构中的对象和列也会受到标记。但是,使用者无法使用 Information Schema TAG_REFERENCES 表函数来确定提供商最初设置标签的位置。Snowflake 会在该表函数的输出中隐藏 LEVEL 列中的值,以通过不显示最初设置标签的位置来保护数据提供商。

重要

共享标签是只读的。使用者无法在其账户中的对象上设置共享标签。

提供商选择

若要共享标签,提供商具有以下选择:

  • 使用 SQL 允许共享访问标签,并允许使用者查看共享对象上的共享标签分配。

    提供商必须授予每个标签的 READ 权限,才能使标签可供使用者使用。

    GRANT READ ON TAG mydb.tags.tag1 TO SHARE my_share;
    
    GRANT USAGE ON DATABASE mydb TO SHARE my_share;
    GRANT USAGE ON SCHEMA mydb.tags TO SHARE my_share;
    
    Copy
  • 创建数据库角色,将标签的 READ 权限授予数据库角色,并 将数据库角色授予共享。数据库角色还需要存储标签的架构的 USAGE 权限。

    GRANT READ ON TAG mydb.tags.tag1 TO DATABASE ROLE my_db_role;
    GRANT USAGE ON SCHEMA mydb.tags TO DATABASE ROLE my_db_role;
    GRANT DATABASE ROLE my_db_role TO SHARE my_share;
    
    Copy
使用者选择

若要查看使用者账户中的共享标签,使用者具有以下选择:

  • 使用 ACCOUNTADMIN 角色。使用者账户管理员可以查看提供商提供的共享标签。

  • 使用具有 IMPORTED PRIVILEGES 的角色。对于从共享创建的数据库,如果账户角色被授予该数据库的 IMPORTED PRIVILEGES,或继承具有这些权限的角色,则可以查看提供商提供的共享标签。

    GRANT IMPORTED PRIVILEGES ON DATABASE db_share TO ROLE db_share_role;
    
    Copy
  • 使用共享数据库角色。如果提供商将标签的 READ 权限授予数据库角色并共享数据库角色,则使用者可以将共享的数据库角色授予其账户中的账户角色。

    GRANT DATABASE ROLE my_db_role TO ROLE consumer_analyst_role;
    
    Copy

在使用者账户中,您可以使用 SQL 查看提供商共享的标签、标签引用和标记的对象:

目前,您无法在使用者账户中使用以下选择来查看提供商共享的标签、标签引用和标记的对象:

创建共享

要创建共享,必须使用 ACCOUNTADMIN 角色,或者获授 CREATE SHARE 全局权限的角色。

使用 Snowsight 创建共享

在 Snowsight 中,可以使用多种方法共享数据:

  • 通过使用 Provider Studio,向特定使用者提供列表或在 Snowflake Marketplace 上公开提供列表。请参阅 创建和发布列表

  • 数据交换 中发布列表。

  • 创建 Direct Share,以与您所在区域的使用者账户共享数据。

如果要创建的共享需要添加引用其他数据库中对象的安全视图,则必须使用 SQL 创建共享。有关更多信息,请参阅 共享来自多个数据库的数据

要创建 Direct Share,请执行以下操作:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Share » Create a Direct ShareShare Data 对话框随即打开。

  4. 在 Share Data 对话框中,选择 + Select Data,然后:

    1. 选择源数据库。

    2. 从源数据库中选择一个或多个目标对象。

    3. (可选)更新为共享创建的 Secure Share Identifier

    4. (可选)在 Description 中输入描述。

    5. 在剩余的文本框中,输入账户定位器。输入部分账户定位器时,系统会列出与输入的文本匹配的所有账户。根据需要重复上述步骤,以添加其他账户。您只能将同一区域内的账户添加到共享中。

    6. 选择 Create Share

如果要将活跃的使用者的 Direct Share 转换为列表,请参阅 将 Direct Share 转换为列表

使用 Classic Console 创建共享

在 Classic Console 的 Shares Shares 选项卡 页面上,选择 Outbound 选项卡。

使用 SQL 创建共享

要使用 SQL 创建共享,请执行以下步骤:

  1. 使用 CREATE SHARE 命令创建空共享。

  2. 使用 GRANT <privilege> ...TO SHARE 命令将数据库添加到共享中,然后有选择地向共享授予对特定数据库对象(架构、表和安全视图)的访问权限。

  3. 使用 ALTER SHARE 命令添加一个或多个账户对共享的访问权限。

备注

以下步骤假定提供商账户 prvdr1 正在与两个使用者账户 xy12345yz23456 共享数据。

使用 DDL 创建和管理共享

要创建和管理共享,请使用此处列出的 DDL 命令:

步骤 1:创建空共享

以下示例创建一个名为 sales_s 的空共享:

CREATE SHARE sales_s;
Copy

步骤 2:向共享授予数据库和对象的权限

将对象(数据库、架构、表、安全视图等)添加到共享。您可以选择通过数据库角色将这些对象的权限添加到共享,或者 将这些对象的权限直接授予共享。有关这些选项的更多信息,请参阅 选择如何共享数据库对象

选项 1:

以下示例演示如何创建数据库角色,向数据库角色授予以下对象的权限,然后将数据库角色授予在上一步中创建的 sales_s 共享:

  • sales_db (数据库)

  • aggregates_eula (架构)

  • aggregate_1 (表)

CREATE DATABASE ROLE sales_db.dr1;

GRANT USAGE ON DATABASE sales_db TO DATABASE ROLE sales_db.dr1;

GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO DATABASE ROLE sales_db.dr1;

GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO DATABASE ROLE sales_db.dr1;

GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;

GRANT DATABASE ROLE sales_db.dr1 TO SHARE sales_s;
Copy
选项 2:

若要在共享中包含对象,请授予每个对象的权限。授予权限时,请先授予任何容器对象的使用权,然后再授予容器中对象的使用权。例如,在授予数据库中包含的任何架构的使用权之前,先授予数据库的使用权。

备注

请在将账户添加到共享之前执行此任务。在授予数据库使用权之前,尝试添加账户会导致错误。

以下示例演示如何向在上一步中创建的 sales_s 共享授予以下对象的权限:

  • sales_db (数据库)

  • aggregates_eula (架构)

  • aggregate_1 (表)

GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;

GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO SHARE sales_s;

GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO SHARE sales_s;
Copy

要确认共享的内容,请执行以下步骤:

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

这可确保在将共享提供给其他账户使用之前正确配置了共享。

步骤 3:将账户添加到共享

注意

如果您拥有业务关键账户,并且正在与使用者账户共享数据:

  • Snowflake 支持与非业务关键账户(默认禁用)共享敏感数据,但 鼓励这样做。

  • 为确保遵守 HIPAA 和 HITRUST 要求,Snowflake 允许 HIPAA 账户与非 HIPAA 账户共享数据。

有关这些建议和限制的更多信息,请参阅 数据共享和业务关键账户

以下示例将两个账户添加到 sales_s 共享中:

ALTER SHARE sales_s ADD ACCOUNTS=xy12345, yz23456;
Copy

现在,账户 xy12345yz23456 能够查看共享并从中创建数据库。

备注

将账户添加到共享中时,如果账户不存在,则命令会成功完成,但不会对共享进行任何更新。为确保共享已正确更新,请验证账户是否存在以及您输入的名称是否正确。

使用 SHOW SHARES 确认共享。该命令的输出将列出 sales_s 共享。kind 列指示共享为 OUTBOUND,这表示此共享正与其他 Snowflake 账户共享数据库。在 to 列中,列出了所有可使用共享的账户:

SHOW SHARES;
Copy
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| created_on                    | kind     | owner_account        | name          | database_name         | to               | owner        | comment                                | listing_global_name |
|-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------|
| 2017-07-09 19:18:09.821 -0700 | INBOUND  | SNOW.XY12345         | SALES_S2      | UPDATED_SALES_DB      |                  |              | Transformed and updated sales data     |                     |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S       | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |                     |
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+

维护共享

要管理共享,您必须使用具有共享的 OWNERSHIP 权限和 CREATE SHARE 全局权限的角色。

向共享添加对象

可以随时将对象添加到现有共享。添加到共享的对象立即可供已从该共享创建数据库的使用者账户使用。例如,如果将表添加到共享中,则使用者账户中的用户可以在表添加到共享后立即查询表中的数据。

重要

如果计划在不同 区域云平台 上与数据使用者安全地共享数据,请注意,如果主数据库包含某些类型的对象,则系统会阻止复制主数据库。有关会导致刷新操作失败的对象的完整列表,请参阅 当前复制的局限性

使用 Snowsight 将对象添加到共享

要使用 Snowsight 修改与共享关联的数据,请执行以下步骤:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Shared by Your Account 选项卡。

  4. 找到并选择要修改的共享。

  5. Data 部分中,选择 Edit

  6. 选择要添加的数据。

  7. 选择 Done

备注

目前,Web 界面不支持在共享中添加或移除外部表、安全的物化视图或安全的 UDFs。对共享中这些对象的所有管理都必须使用 SQL 来执行。

您无法使用 Web 界面将引用其他数据库中的对象的安全视图添加到共享中。您必须使用 SQL 创建共享。请参阅 共享来自多个数据库的数据

使用 Classic Console 将对象添加到共享

在 Classic Console 的 Shares Shares 选项卡 页面上,选择 Outbound 选项卡。

使用 SQL 将对象添加到共享

使用 GRANT <privilege> ...TO SHARE 命令。

备注

  • 如果对象的架构已在共享中,则只需添加对象。

  • 如果对象的架构尚未在共享中,则需要先添加架构,然后再添加对象。

以下示例将 aggregates_eula 架构中名为 agg_secure 的安全视图添加到 sales_s 共享中:

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+

GRANT SELECT ON VIEW sales_db.aggregates_eula.agg_secure TO SHARE sales_s;

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-17 12:33:15.310 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGG_SECURE  | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

从共享中移除对象

您可以随时从现有共享中移除对象。从共享中移除的任何对象会立即对已从该共享创建数据库的使用者账户不可用。

例如,如果从共享中移除表,则一旦从共享中移除表,使用者账户中的用户就无法再查询表中的数据。

备注

目前,Web 界面不支持在共享中添加或移除外部表、安全的物化视图或安全的 UDFs。对共享中这些对象的所有管理都必须使用 SQL 来执行。

使用 Snowsight 从共享中删除对象

要使用 Snowsight 移除与共享关联的数据,请执行以下步骤:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Shared by Your Account 选项卡。

  4. 找到并选择要修改的共享。

  5. Data 部分中,选择 Edit

  6. 选择共享中的数据,然后取消选中要从共享中移除的数据的复选框。

  7. 选择 Done

使用 Classic Console 从共享中删除对象

在 Classic Console 的 Shares Shares 选项卡 页面上,选择 Outbound 选项卡。

使用 SQL 从共享中删除对象

随时可以使用 REVOKE <privilege> ...FROM SHARE 命令从现有共享中移除对象。

以下示例从 sales_s 共享中移除 aggregates_eula 架构中名为 agg_secure 的安全视图:

SHOW GRANTS TO SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-17 12:33:15.310 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGG_SECURE  | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+

REVOKE SELECT ON VIEW sales_db.aggregates_eula.agg_secure FROM SHARE sales_s;

+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
| created_on                    | privilege | granted_on | name                                 | granted_to | grantee_name   | grant_option | granted_by   |
|-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------|
| 2017-06-15 16:45:07.307 -0700 | USAGE     | DATABASE   | SALES_DB                             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:10.310 -0700 | USAGE     | SCHEMA     | SALES_DB.AGGREGATES_EULA             | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
| 2017-06-15 16:45:12.312 -0700 | SELECT    | TABLE      | SALES_DB.AGGREGATES_EULA.AGGREGATE_1 | SHARE      | PRVDR1.SALES_S | false        | ACCOUNTADMIN |
+-------------------------------+-----------+------------+--------------------------------------+------------+----------------+--------------+--------------+
Copy

将账户添加到共享

可以随时将账户添加到现有共享。将账户添加到共享后,共享将立即对账户“可见”,并且账户可以从共享创建数据库,以及开始查询数据库中的 Snowflake 对象。

使用 Snowsight 将账户添加到共享

要使用 Snowsight 将使用者添加到现有共享,请执行以下步骤:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Shared by Your Account 选项卡。

  4. 找到要修改的共享。

  5. Shared With 部分中,选择 Add Consumers

  6. 对于 Share With Snowflake Accounts,输入一个或多个账户定位器。输入账户定位器的一部分会列出所有匹配的账户。

  7. 选择 Add

使用 Classic Console 将账户添加到共享

在 Classic Console 的 Shares Shares 选项卡 页面上,选择 Outbound 选项卡。

添加账户时,可以选择添加完整账户或阅读者账户。也可以选择立即创建阅读者账户,然后将其添加到共享中。

使用 SQL 将账户添加到共享

要使用 SQL 将使用者添加到现有共享,请使用 ALTER SHARE 命令。

从共享中移除账户

您可以随时从现有共享中移除账户。从共享中移除账户会立即使账户从共享中创建的数据库失效。账户中的用户对数据库执行的所有查询和其他操作都将停止工作。

从共享中移除账户后,可以将其重新添加回共享中;但是,这不会恢复账户早前从共享中创建的数据库。账户必须从共享中创建新数据库。

备注

在从共享中移除账户之前,请考虑这将对账户产生的下游影响。由于数据库会立即失效,因此账户中的用户对数据库执行的所有查询和其他操作都将停止工作,这可能会对账户的业务运营产生重大影响。

使用 Snowsight 从共享中删除账户

要使用 Snowsight 从现有共享中移除使用者,请执行以下步骤:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Shared by Your Account 选项卡。

  4. 找到并选择要修改的共享。

  5. Shared With 部分中,选择 ... » Remove

  6. 在确认对话框中,选择 Remove

使用 Classic Console 从共享中删除账户

在 Classic Console 的 Shares Shares 选项卡 页面上,选择 Outbound 选项卡。

使用 SQL 从共享中删除账户

使用 ALTER SHARE 命令从现有共享中移除账户。

通过为共享设置新的账户列表,并将所需的账户从该列表中排除,即可从共享中移除账户。

删除共享

您可以随时删除(移除)共享。删除共享后,使用者账户从该共享中创建的所有数据库会立即失效。对这些数据库执行的所有查询和其他操作都会停止工作。

删除共享后,可以使用相同的名称重新创建它;但是,这不会恢复使用者账户从共享中创建的任何数据库。重新创建的共享将被视为新共享,所有使用者账户都必须从新共享中创建新数据库。

备注

删除共享之前,请考虑这将对使用该共享的所有使用者账户产生的下游影响。

您可能要考虑从共享中移除单个对象。移除的对象可以重新添加到共享中,而无需使用者账户执行任何其他任务。

使用 Snowsight 删除共享

要使用 Snowsight 删除共享,请执行以下步骤:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Shared by Your Account 选项卡。

  4. 找到并选择要删除的共享。

  5. 选择 ... » Drop

  6. 在确认对话框中,选择 Drop

使用 Classic Console 删除共享

在 Classic Console 的 Shares Shares 选项卡 页面上,选择 Outbound 选项卡。

使用 SQL 删除共享

使用 DROP SHARE 命令删除共享。

查看已从共享创建数据库的使用者

若要查看已从共享中创建数据库的账户,请使用 SHOW GRANTS OF SHARE 命令。此命令的输出与 SHOW SHARES 返回的账户列表不同,具体如下:

  • SHOW SHARES 列出可供账户使用的所有共享,以及能够访问每个共享的账户。

  • SHOW GRANTS OF SHARE 列出已从共享中创建数据库的所有账户。如果没有账户从共享中创建数据库,则结果为空。

例如,以下示例显示:

  • 所有者账户 SNOW.PRVDR1 已将 sales_ssales_s2 这两个共享提供给账户 xy12345yz23456 使用。

  • 账户 xy12345 已从 prvdr1.sales_s 共享中创建数据库。

  • 没有账户从 sales_s2 共享中创建数据库。

SHOW SHARES;
Copy
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
| created_on                    | kind     | owner_account        | name          | database_name         | to               | owner        | comment                                | listing_global_name |
|-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------|
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.PRVDR1          | SALES_S       | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |
| 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.PRVDR1          | SALES_S2      | SALES_DB              | XY12345, YZ23456 | ACCOUNTADMIN |                                        |                     |
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
SHOW GRANTS OF SHARE sales_s;
Copy
+-------------------------------+----------------+------------+----------+
| created_on                    | share          | granted_to | account  |
|-------------------------------+----------------+------------+----------|
| 2017-06-15 18:00:03.803 -0700 | PRVDR1.SALES_S | ACCOUNT    | XY12345  |
+-------------------------------+----------------+------------+----------+
SHOW GRANTS OF SHARE sales_s2;
Copy
+------------+-------+------------+---------+
| created_on | share | granted_to | account |
|------------+-------+------------+---------|
+------------+-------+------------+---------+

查看共享和数据

通过使用 Snowsight,可以查看您的账户共享的数据(使用列表、Direct Share 或作为数据交换的一部分来共享)。

要查看您账户共享的数据,请执行以下操作:

  1. 登录 Snowsight

  2. 选择 Data Products » Private Sharing

  3. 选择 Shared by Your Account 选项卡。

在此页面上,可以执行以下操作:

  • 查看您已创建或具有访问权限的共享。具体信息包括:共享的数据库、添加到共享的使用者账户(如有)、共享的创建日期,以及共享的对象等。

  • 了解与以下列表相关联的共享:专门提供给某些使用者的列表,或可供 Snowflake Marketplace 上的任何使用者使用的列表。

  • 访问在私密数据交换中共享的共享。

您可以使用以下筛选器有选择地显示共享的数据:

  • 使用 All Types 下拉列表按类型筛选。选择仅显示在数据交换中共享的安全共享或列表。某些安全共享是与列表相关联的共享。

  • 使用 Shared With 下拉列表,按使用者账户或数据交换进行筛选。选择一个或多个特定的使用者或数据交换,以查看与您的选择相关联的所有共享或列表。

管理共享和数据

选择一个共享以管理共享,撤销单个使用者账户的访问权限,或向共享添加描述。要管理作为列表提供的安全共享,或要管理 Snowflake Marketplace 上的列表,请使用 Provider Studio

语言: 中文