跨 Amazon 账户(预览版)共享数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

跨 Amazon 账户(预览版)共享数据

在使用预览版时,请考虑以下事项:

  • 新的 Amazon Redshift 集群必须使用 PREVIEW_2020 维护轨道创建。有关预览轨道的更多信息,请参阅选择集群维护轨道

  • 目前该功能仅限于测试目的。不要将此功能用于生产使用案例。

  • 您不能将现有 Amazon Redshift 集群从当前或跟踪状态切换到此预览轨道,反之亦然。但是,您可以从当前或跟踪轨道上运行的集群快照中恢复数据。

  • 数据共享预览期预计将持续到 2021 年 7 月 31 日。除非延长预览期,否则应在 2021 年 7 月 31 日之前删除集群。此轨道上剩余的集群将被自动删除。

  • 您可以在任何具有 Amazon Redshift RA3 实例类型的 Amazon 区域中使用集群,以预览数据共享功能。有关更多信息,请参阅 Amazon Redshift 集群管理指南中的 Amazon 区域中的 RA3 节点类型可用性

  • 对于预览期间与预览功能相关的任何疑问、问题或反馈,请发送电子邮件至 redshift-datasharing@amazon.com 或通过 Amazon Support 开立支持案例。

您可以跨 Amazon 账户为读取目的共享数据。跨 Amazon 账户共享数据的工作方式类似于在账户内共享数据。区别在于,需要双向握手来跨 Amazon 账户共享数据。创建器账户管理员可以授权使用者账户访问数据共享,也可以选择不授权任何访问权限。要使用授权的数据共享,使用者账户管理员可以将数据共享与整个 Amazon 账户关联,使用使用者账户中的特定集群授权它,或拒绝数据共享。有关在账户中共享数据的更多信息,请参阅在一个账户内共享数据

数据共享可以拥有数据使用者,他们是同一账户或不同 Amazon 账户中的集群命名空间。您无需创建单独的数据共享以进行账户内共享和跨账户共享。

对于跨账户数据共享,必须对创建器和使用者集群进行加密。

与 Amazon 账户共享数据时,创建器集群管理员将作为一个实体与 Amazon 账户进行共享。使用者集群管理员可以决定使用者账户中的哪些集群命名空间可以访问数据共享。

如果您是创建器集群管理员或数据库拥有者 – 按照以下步骤操作:

  1. 在集群中创建数据共享,并将数据共享对象添加到数据共享。有关如何创建数据共享和将数据集对象添加到数据共享的更多详细步骤,请参阅在一个账户内共享数据。有关 CREATE DATASHARE 和 ALTER DATASHARE 的信息,请参阅CREATE DATASHAREALTER DATASHARE

    以下示例将不同的数据共享对象添加到数据共享 SalesShare 中:

    -- Add schema to datashare ALTER DATASHARE SalesShare ADD SCHEMA PUBLIC; -- Add table under schema to datashare ALTER DATASHARE SalesShare ADD TABLE public.tickit_sales_redshift; -- Add view to datashare ALTER DATASHARE SalesShare ADD TABLE public.sales_data_summary_view; -- Add all existing tables and views under schema to datashare (does not include future table) ALTER DATASHARE SalesShare ADD ALL TABLES in schema public;

    您还可以使用 Amazon Redshift 控制台创建或编辑数据共享。有关更多信息,请参阅创建数据共享编辑在您的账户中创建的数据共享

  2. 委派权限以对数据共享进行操作。有关更多信息,请参阅 GRANTREVOKE

    以下示例授予 dbuser 对于 SalesShare 的权限。

    GRANT ALTER, SHARE ON DATASHARE SalesShare TO dbuser;

    集群超级用户和数据共享的拥有者可以向其他用户授予或撤销对数据共享的修改权限。

  3. 将使用者添加到数据共享或从数据共享中删除使用者。以下示例将 Amazon 账户 ID 添加到 SalesShare 中。有关更多信息,请参阅 GRANTREVOKE

    GRANT USAGE ON DATASHARE SalesShare TO ACCOUNT '123456789012';

    您只能将权限授予 GRANT 语句中的一个数据使用者。

    集群超级用户和数据共享对象的拥有者或对数据共享具有 SHARE 权限的用户可以将使用者添加到数据共享或从中删除使用者。为此,他们使用 GRANT USAGE 或 REVOKE USAGE。

    您还可以使用 Amazon Redshift 控制台添加或从数据共享中删除数据使用者。有关更多信息,请参阅将数据使用者添加到数据共享从数据共享中删除数据使用者

  4. (可选)如果您不想再与使用者共享数据,请撤销 Amazon 账户对数据共享的访问权限。

    REVOKE USAGE ON DATASHARE SalesShare FROM ACCOUNT '123456789012';

如果您是创建器账户管理员 – 按照以下步骤操作:

将使用权授予 Amazon 账户后,数据共享状态为 pending_authorization。创建器账户管理员应使用 Amazon Redshift 控制台授权数据共享,并选择数据使用者。

登录到 https://console.aws.amazon.com/redshift/,然后选择要授权哪些数据使用者访问数据共享或删除其授权。授权的数据使用者会收到通知,以便对数据共享采取操作。如果您要以数据使用者身份添加集群命名空间,则不必执行授权。数据使用者获得授权后,可以访问数据共享对象并创建使用者数据库以查询数据。有关更多信息,请参阅授权或删除数据共享中的授权(预览版)

如果您是使用者账户管理员 – 按照以下步骤操作:

要将从其他账户共享的一个或多个数据共享与您的整个 Amazon 账户(预览版)或您账户中的特定集群命名空间关联,请使用 Amazon Redshift 控制台。如果您对数据共享不感兴趣,则还可以选择拒绝数据共享。

登录到 https://console.aws.amazon.com/redshift/ 并将从其他账户共享的一个或多个数据共享与您的整个 Amazon 账户(预览版)或您账户中的特定集群命名空间关联。有关更多信息,请参阅关联数据共享(预览版)

关联 Amazon 账户(预览版)或特定集群命名空间后,数据共享将可供使用。您还可以随时更改数据共享关联。将关联从单个集群命名空间更改到 Amazon 账户时,Amazon Redshift 会使用 Amazon 账户信息覆盖集群命名空间。将关联从 Amazon 账户更改到特定集群命名空间时,Amazon Redshift 会使用集群命名空间信息(预览版)覆盖 Amazon 账户信息。账户中的所有集群命名空间都可以访问数据。

如果您是使用者集群管理员 – 按照以下步骤操作:

  1. 列出提供给您的数据共享并查看数据共享的内容。仅当创建器集群管理员已授权数据共享且使用者集群管理员已接受并关联数据共享时,数据共享的内容才可用。有关更多信息,请参阅DESC DATASHARESHOW DATASHARES

    以下示例显示指定创建器命名空间的入站数据共享的信息。当您以使用者集群管理员身份运行 DESC DATAHSARE 时,您必须指定 NAMESPACE 选项以查看入站数据共享。

    SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
    DESC DATASHARE SalesShare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new ------------------+--------------------------------------+------------+------------+-------------+---------------------------------+--------------- 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | schema | public | (8 rows)

    只有集群超级用户才可以执行此操作。您还可以使用 SVV_DATASHARES 查看数据共享,使用 SVV_DATASHARE_OBJECTS 查看数据共享内的对象。

    以下示例显示使用者集群中的入站数据共享。

    SELECT * FROM SVV_DATASHARES WHERE share_name LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
    SELECT * FROM SVV_DATASHARE_OBJECTS WHERE share_name LIKE 'sales%'; share_type | share_name | object_type | object_name | producer_account | producer_namespace | include_new ------------+------------+-------------+---------------------------------+------------------+--------------------------------------+------------- INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND | salesshare | schema | public | 123456789012 | dd8772e1-d792-4fa4-996b-1870577efc0d | (8 rows)
  2. 创建引用数据共享的本地数据库。有关更多信息,请参阅CREATE DATABASE

    CREATE DATABASE Sales_db FROM DATASHARE SalesShare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';

    您可以通过查询 SVV_REDSHIFT_DATABASES 视图查看从数据共享中创建的数据库。您无法连接到从数据共享创建的这些数据库,它们是只读的。但是,您可以连接到使用者集群上的本地数据库并执行跨数据库查询,以查询从数据共享创建的数据库中的数据。您不能基于从现有数据共享创建的数据库对象创建数据共享。但是,您可以将数据复制到使用者集群上的单独表中,执行所需的任何处理,然后共享创建的新对象。

  3. (可选)创建外部 schema,以引用导入到使用者集群上的使用者数据库中的特定 schema 并为其分配精细权限。有关更多信息,请参阅CREATE EXTERNAL SCHEMA

    CREATE EXTERNAL SCHEMA Sales_schema FROM REDSHIFT DATABASE 'Sales_db' SCHEMA 'public';
  4. 根据需要,向使用者集群中的用户组授权对从数据共享创建的数据库和 schema 引用的权限。有关更多信息,请参阅 GRANTREVOKE

    GRANT USAGE ON DATABASE Sales_db TO Bob;
    GRANT USAGE ON SCHEMA Sales_schema TO GROUP Analyst_group;

    作为使用者集群管理员,您只能将对从数据共享创建的整个数据库的权限分配给您的用户和组。在某些情况下,您需要对根据数据共享创建的数据库对象子集进行精细控制。如果是这样,您可以创建一个外部 schema 引用,以引用指向数据共享中的特定 schema(如上一步所述),并在 schema 级别提供精细权限。您还可以基于共享的对象创建后期绑定视图,并使用这些视图来分配精细权限。您还可以考虑让创建器集群为您创建具有所需精细度的额外的数据共享。您可以为从数据共享中创建的数据库创建尽可能多的 schema 引用。

  5. 在数据共享中查询共享对象中的数据。

    对使用者集群上的使用者数据库和 schema 具有权限的用户和组可以浏览和导航任何共享对象的元数据。他们还可以浏览和导航使用者集群中的本地对象。为此,请使用 JDBC 或 ODBC 驱动程序或 SVV_ALL 和 SVV_REDSHIFT 视图。

    创建器集群在数据库中可能有许多 schema、表和每个 schema 中的视图。使用者端的用户只能看到通过数据共享提供的对象的子集。这些用户无法从创建器集群中看到整个元数据。此方法有助于通过数据共享提供精细的元数据安全控制。

    您将继续连接到本地集群数据库,但现在,您也可以使用三部分 database.schema.table 表示法从数据共享创建的数据库和 schema 中读取。您可以跨您可见的任何数据库和所有数据库执行查询。这些数据库可以是集群上的本地数据库,也可以是通过数据共享创建的数据库。使用者集群无法连接到从数据共享创建的数据库。

    您可以使用完全资格认证来访问数据。有关更多信息,请参阅使用跨数据库查询的示例

    SELECT * FROM sales_db.public.tickit_sales_redshift;

    您只能在共享对象上使用 SELECT 语句。但是,您可以通过查询来自不同本地数据库中的共享对象的数据,在使用者集群中创建表。

    除查询之外,使用者还可以对共享对象创建视图。仅支持后期绑定视图或具体化视图。Amazon Redshift 不支持共享数据的常规视图。使用者创建的视图可跨越多个本地数据库或通过数据共享创建的数据库。有关更多信息,请参阅CREATE VIEW

    // Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;