使用者集群管理员操作 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用者集群管理员操作

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

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

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

    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 ------------------+--------------------------------------+------------+------------+-------------+--------------------------------- 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 ------------+------------+-------------+---------------------------------+------------------+-------------------------------------- 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. 创建引用数据共享的本地数据库。从数据共享中创建数据库时,请指定 NAMESPACE 和账户 ID。有关更多信息,请参阅 CREATE DATABASE

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

    如果您想更精细地控制对本地数据库中对象的访问权限,请在创建数据库时使用 WITH PERMISSIONS 子句。这允许您在步骤 4 中为数据库中的对象授予对象级权限。

    CREATE DATABASE sales_db WITH PERMISSIONS 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. 根据需要,向使用者集群中的用户或角色授权对从数据共享创建的数据库和架构引用的权限。有关更多信息,请参阅GRANTREVOKE

    GRANT USAGE ON DATABASE sales_db TO Bob;
    GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

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

    如果您在步骤 2 中使用 WITH PERMISSIONS 创建了数据库,则必须为共享数据库中的对象分配对象级权限。只有 USAGE 权限的用户在获得其他对象级权限之前,无法访问使用 WITH PERMISSIONS 创建的数据库中的任何对象。

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  5. 在数据共享中查询共享对象中的数据。

    对使用者集群上的使用者数据库和架构具有权限的用户和角色可以浏览和导航任何共享对象的元数据。他们还可以浏览和导航使用者集群中的本地对象。为此,请使用 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;