在AWS 帳戶 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在AWS 帳戶

您可以在不同的 Amazon Redshift 集羣之間共享數據以進行讀取AWS 帳戶。

以創建者羣集管理員或數據庫所有者身份共享數據以供讀取

  1. 在叢集中建立資料庫。如需詳細資訊,請參閱 創建數據保護

    CREATE DATASHARE salesshare;

    羣集超級用户和數據庫所有者可以創建數據源。在創建過程中,每個數據保護都與數據庫相關聯。只有來自該數據庫的對象才能在該數據庫中共享。可以在具有相同或不同粒度的對象在同一數據庫上創建多個數據源。羣集可以建立的資料庫數量沒有限制。

    您也可以使用 Amazon Redshift 主控台來建立資料庫。如需詳細資訊,請參閱 創建數據庫

  2. 委派對數據保護進行操作的權限。如需詳細資訊,請參閱GRANTREVOKE

    以下範例會授予dbusersalesshare

    GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;

    羣集超級用户和數據保護的所有者可以向其他用户授予或撤銷對數據保護的修改權限。

  3. 將對象添加到數據庫或從數據庫中刪除對象。要將對象添加到數據保護,請在添加對象之前添加架構。當您添加架構時,Amazon Redshift 不會在其下添加所有對象。務必明確地新增這些資訊。如需詳細資訊,請參閱 ALTER DATABASE

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;

    您也可以將視圖新增至資料保存。

    CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;

    使用 ALTER DATASHARE 可以在給定模式中共享方案以及表、視圖和函數。超級用户、數據保護所有者或對數據保護具有 ALTER 或 ALL 權限的用户可以更改數據保護以向數據保護中添加對象或從中刪除對象。用户應具有在數據保護中添加或刪除對象的權限。用户還應該是對象的所有者,或者對這些對象具有 SELECT、USAGE 或全部權限。

    使用 INPLUDENEW 子句可以將在指定方案中創建的所有新表、視圖或 SQL 用户定義函數 (UDF) 添加到數據保護中。只有超級用户可以為每個數據庫架構對更改此屬性。

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;

    或者,您也可以使用 Amazon Redshift 主控台來添加或移除資料庫中的資料庫。如需詳細資訊,請參閱 將數據視圖對象添加到數據庫從數據庫中刪除數據保護對象編輯帳户中建立的資料庫

  4. 將使用者添加到數據庫或從數據庫中刪除使用者。以下範例會將使用者羣集名稱空間新增至salesshare。命名空間是帳户中使用者羣集的命名空間全局唯一標識符 (GUID)。如需詳細資訊,請參閱GRANTREVOKE

    GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    您只能在 GRANT 語句中向一個數據保護使用者授予權限。

    羣集超級用户和數據保護對象的所有者或對數據保護具有 SHARE 權限的用户可以將使用者添加到數據保護或從數據保護中刪除使用者。為此,他們使用授權使用或撤銷使用情況。

    要查找您當前看到的羣集的命名空間,可以使用「選擇當前命名空間」命令。要查找同一個集羣中的不同集羣的命名空間AWS帳户,請轉到 Amazon Redshift 控制台羣集詳細信息頁面。在該頁面上,找到新添加的命名空間字段。

    或者,您也可以使用 Amazon Redshift 主控台來添加或移除資料庫使用者。如需詳細資訊,請參閱 將數據使用者添加到數據庫從數據庫中刪除數據使用者

  5. (可選)向數據保護添加安全限制。以下示例顯示允許具有公有 IP 訪問權限的使用者羣集讀取數據保護。如需詳細資訊,請參閱 ALTER DATABASE

    ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;

    您可以在創建數據保護後修改有關使用者類型的屬性。例如,您可以定義想要使用給定數據保護中的數據的羣集不能公開訪問。來自不符合數據保護中指定的安全限制的使用者羣集的查詢將在查詢運行時被拒絕。

    您也可以使用 Amazon Redshift 主控台來編輯數據庫。如需詳細資訊,請參閱 編輯帳户中建立的資料庫

  6. 列出在羣集中創建的數據源並查看數據保護的內容。

    以下範例顯示名為salesshare。如需詳細資訊,請參閱 DESC DESC DATABASE顯示資料庫

    DESC DATASHARE salesshare; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+------------------- 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_category_redshift| 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | schema | public | t 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | view | public.sales_data_summary_view |

    以下範例顯示生產者羣集中的出站資料庫。

    SHOW DATASHARES LIKE 'sales%';

    輸出結果類似如下。

    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+--------------------------------------- salesshare | 100 | dev | | OUTBOUND | 2020-12-09 02:27:08 | True | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d

    如需詳細資訊,請參閱 DESC DESC DATABASE顯示資料庫

    您也可以使用SVV_ 數據庫SVV_ 數據庫 _ 消費者,以及SVV_ 數據庫 _ 對象以查看數據碼、數據保護中的對象以及數據保護使用者。

  7. 刪除資料庫。如需詳細資訊,請參閱 DATABASE

    您可以隨時刪除數據保護對象,使用DATABASE。數據保護的羣集超級用户和所有者可以刪除數據庫。

    以下範例會捨棄名為salesshare

    DROP DATASHARE salesshare;

    您也可以使用 Amazon Redshift 主控台刪除資料庫。如需詳細資訊,請參閱 刪除帳户中建立的資料庫

  8. 使用 ALTER DATASHARE 可以從數據庫中的任意點從數據庫中刪除對象。使用 REVOKE 使用 ON 可撤消對某些使用者對數據保護的權限。它撤消對數據保護中對象的 USAGE 權限,並立即停止對所有使用者羣集的訪問。在取消訪問權限後,列出數據碼和元數據查詢(如列出數據庫和表)不會返回共享對象。

    ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;

    您也可以使用 Amazon Redshift 主控台來編輯數據庫。如需詳細資訊,請參閱 編輯帳户中建立的資料庫

  9. 如果您不想再與使用者共享數據,請撤銷命名空間對數據保護的訪問權限。

    REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    您也可以使用 Amazon Redshift 主控台來編輯數據庫。如需詳細資訊,請參閱 編輯帳户中建立的資料庫

以使用者羣集管理員身份共享數據以供讀取

  1. 列出可供您使用的數據源並查看數據庫的內容。如需詳細資訊,請參閱 DESC DESC DATABASE顯示資料庫

    以下示例顯示指定創建者命名空間的入站數據庫的信息。當您以使用者羣集管理員身份運行 DESC DATASHARE 時,必須指定命名空間選項以查看入站數據源。

    DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |

    只有羣集超級用户才能執行此操作。您還可以使用 SVV_數據共享查看數據源,並使用 SVV_數據共享對象來查看數據保護中的對象。

    以下範例顯示使用者羣集中的入站資料庫。

    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 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
  2. 創建引用數據庫的本地數據庫。如需詳細資訊,請參閱 CREATE DATABASE

    CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    您可以查看從數據保護創建的數據庫,方法是查詢數據庫數據庫視圖。您無法連接到這些從數據庫創建的數據庫,並且它們是隻讀的。但是,您可以連接到使用者羣集上的本地數據庫,並執行跨數據庫查詢以查詢從數據碼創建的數據庫中的數據。不能在從現有數據保護創建的數據庫對象之上創建數據保護。但是,您可以將數據複製到使用者羣集上的單獨表中,執行所需的任何處理,然後共享創建的新對象。

    或者,您也可以使用 Amazon Redshift 主控台從資料庫建立資料庫。如需詳細資訊,請參閱 從數據庫創建數據庫

  3. (可選)創建外部架構,以引用使用者羣集上導入的使用者數據庫中的特定方案並向其分配精細權限。如需詳細資訊,請參閱 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 GROUP Analyst_group;

    作為使用者羣集管理員,您只能將從數據保護創建的整個數據庫的權限分配給您的用户和組。在某些情況下,您需要對從數據保護創建的數據庫對象子集進行精細控制。如果是這樣,您可以創建指向數據保護中的特定方案的外部模式引用(如上一步所述),並在架構級別提供精細權限。

    您還可以在共享對象之上創建後期綁定視圖,並使用這些視圖分配精細的權限。您還可以考慮讓生產者羣集為您創建具有所需粒度的附加數據源。

  5. 查詢數據庫中共享對象中的數據。

    對使用者羣集上的使用者數據庫和方案具有權限的用户和組可以瀏覽和導航任何共享對象的元數據。他們還可以瀏覽和導航使用者羣集中的本地對象。為此,他們使用 JDBC 或 ODBC 驅動程序或 SVV_ALL 和 SVV_REDSHIFT 視圖。

    生產者羣集可能在每個模式中的數據庫、表和視圖中有許多架構。使用者端的用户只能看到通過數據保護提供的對象子集。這些用户看不到來自生產者羣集的整個元數據。此方法有助於通過數據共享提供精細的元數據安全控制。

    您繼續連線至本地羣集資料庫。但現在,您還可以使用三個部分的數據庫 .schema.table 符號從數據保護創建的數據庫和架構中讀取。您可以執行跨您可見的任何和所有數據庫的查詢。這些數據庫可以是集羣上的本地數據庫,也可以是從數據庫創建的數據庫。使用者羣集無法連接到從數據庫創建的數據庫。

    您可以使用完全資格來存取資料。如需詳細資訊,請參閱 使用跨數據庫查詢的示例

    SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02

    您只能在共享對象上使用 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;