本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
共用 內資料的讀取存取權 AWS 帳戶
使用 Amazon Redshift,您可以在相同 AWS 帳戶中跨不同的資料庫使用者或群組共用資料的讀取存取權。此功能可讓您精細地控制資料存取權限,確保只有授權的使用者或群組才能讀取特定資料集。
以生產者叢集管理員或資料庫擁有者的身分共用資料以供讀取
在叢集中建立資料共用。如需詳細資訊,請參閱CREATE DATASHARE。
CREATE DATASHARE salesshare;
叢集超級使用者和資料庫擁有者可以建立資料共用。每個資料共用都會在建立期間與資料庫相關聯。只有來自該資料庫的物件才能在該資料共用中共用。可以在具有相同或不同物件細微程度的相同資料庫上建立多個資料共用。叢集可以建立的資料共用數量不限。
您也可以使用 Amazon Redshift 主控台建立資料共用。如需詳細資訊,請參閱建立資料共用。
委派在資料共用上操作的許可。如需詳細資訊,請參閱 GRANT 或 REVOKE。
下列範例政策會授予許給
salesshare
上的dbuser
。GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
叢集超級使用者和資料共用的擁有者可以對其他使用者授與或撤銷資料共用的修改許可。
在資料庫共用中新增物件或移除物件。若要將物件新增至資料共用,請在新增物件之前先新增結構描述。當您新增結構描述時,Amazon Redshift 不會在其下方新增所有物件。務必明確地新增這些物件。如需詳細資訊,請參閱ALTER DATASHARE。
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;
使用 ALTERDATASHARE可在指定的結構描述中共用結構描述和資料表、檢視和函數。超級使用者、資料共用擁有者,或擁有資料共用ALTER或資料共用ALL許可的使用者,可以變更資料共用,以新增物件或從中移除物件。使用者應具有在資料共用中新增或移除物件的許可。使用者也應是物件的擁有者SELECT,或具有物件的 USAGE、 或 ALL許可。
您也可以使用 GRANT 將物件新增至資料共用。此範例顯示如何:
GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;
此語法在功能上相當於
ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
。使用 INCLUDENEW子句將指定結構描述中建立的任何新資料表、檢視或SQL使用者定義函數 (UDFs) 新增至資料共用。只有超級使用者可以為每個「資料共用-結構描述」配對修改此屬性。
ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
您也可以使用 Amazon Redshift 主控台在資料共用中新增或移除物件。如需詳細資訊,請參閱將資料共用物件新增到資料共用、從資料共用中移除資料共用物件及編輯在您帳戶中建立的資料共用。
在資料共用中新增或移除取用者。下列範例會將取用者叢集命名空間新增至
salesshare
。命名空間是帳戶中取用者叢集的命名空間全域唯一識別碼 (GUID)。如需詳細資訊,請參閱 GRANT 或 REVOKE。GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
您只能將許可授予GRANT陳述式中的一個資料共用取用者。
叢集超級使用者和資料共用物件的擁有者,或具有資料共用SHARE許可的使用者,可以將取用者新增至資料共用或從中移除取用者。若要這麼做,他們會使用 GRANTUSAGE或 REVOKE USAGE。
若要尋找您目前看到的叢集命名空間,您可以使用 CURRENT_ SELECT NAMESPACE 命令。若要尋找相同 中不同叢集的命名空間 AWS 帳戶,請前往 Amazon Redshift 主控台叢集詳細資訊頁面。在該頁面上,找到新增的命名空間欄位。
您也可以使用 Amazon Redshift 主控台在資料共用中新增或移除資料取用者。如需詳細資訊,請參閱 將資料取用者新增至資料共用 和 從資料共用中移除資料取用者。
(選擇性) 將安全性限制新增至資料共用。下列範例顯示具有公用 IP 存取權的取用者叢集可以讀取資料共用。如需詳細資訊,請參閱ALTER DATASHARE。
ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;
您可以在建立資料共用之後修改有關取用者類型的屬性。例如,您可以定義要使用指定資料共用中資料的叢集無法公開存取。若查詢來自不符合資料共用中所指定安全性限制的取用者叢集,則會在查詢執行期遭到拒絕。
您也可以使用 Amazon Redshift 主控台編輯資料共用。如需詳細資訊,請參閱編輯在您帳戶中建立的資料共用。
列出在叢集中建立的資料共用,並查看資料共用的內容。
下列範例會顯示名為
salesshare
之資料共用的資訊。如需詳細資訊,請參閱 DESC DATASHARE 和 SHOW DATASHARES。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 DATASHARE 和 SHOW DATASHARES。
您也可以使用 SVV_DATASHARES、SVV_DATASHARE_CONSUMERS 和 SVV_DATASHARE_OBJECTS 來檢視資料共用、資料共用中的物件,以及資料共用取用者。
捨棄資料共用。如需詳細資訊,請參閱DROP DATASHARE。
您可以在任何時間點使用 DROP DATASHARE 刪除資料共用物件。叢集超級使用者和資料共用擁有者可以捨棄資料共用。
以下範例會捨棄名為
salesshare
的資料共用。DROP DATASHARE salesshare;
您也可以使用 Amazon Redshift 主控台刪除資料共用。如需詳細資訊,請參閱刪除在您帳戶中建立的 資料共用。
ALTER DATASHARE 使用 從資料共用隨時移除資料共用中的物件。使用 REVOKE USAGE ON 撤銷對特定取用者的資料共用許可。它撤銷資料共用中物件的USAGE許可,並立即停止對所有取用者叢集的存取。存取權被撤銷後,列出資料共用和中繼資料查詢 (例如列出資料庫和資料表) 不會傳回共用物件。
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
您也可以使用 Amazon Redshift 主控台編輯資料共用。如需詳細資訊,請參閱編輯在您帳戶中建立的資料共用。
如果您不想再與取用者共用資料,請撤銷命名空間中的資料共用存取權。
REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
您也可以使用 Amazon Redshift 主控台編輯資料共用。如需詳細資訊,請參閱編輯在您帳戶中建立的資料共用。
以取用者叢集管理員的身分共用資料以供讀取
列出可供您使用的資料共用,並檢視資料共用的內容。如需詳細資訊,請參閱 DESC DATASHARE 和 SHOW DATASHARES。
下列範例會顯示指定生產者命名空間的輸入資料共用資訊。當您以取用者叢集管理員DESCDATASHARE身分執行 時,您必須指定檢視傳入資料共用NAMESPACE的選項。
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_DATASHARES 檢視資料共用,以及使用 SVV_DATASHARE_OBJECTS 檢視資料共用中的物件。
下列範例顯示取用者叢集中的輸入資料共用。
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
身為資料庫超級使用者,您可以建立參照資料共用的本機資料庫。如需詳細資訊,請參閱CREATE DATABASE。
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
如果您想要更精細地控制對本機資料庫中物件的存取,請在建立資料庫時使用 WITHPERMISSIONS子句。這可讓您在步驟 4 中為資料庫中的物件授予物件層級權限。
CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
您可以透過查詢 SVV_REDSHIFT_DATABASES 檢視來查看您從資料共用中建立的資料庫。您可以直接連線至這些資料庫,也可以連線至取用者叢集上的本機資料庫,並執行跨資料庫查詢,以查詢來自資料共用資料庫的資料。您不能在現有資料共用中建立的資料庫物件頂端建立資料共用。不過,您可以將資料複製到取用者叢集上的個別資料表中,執行所需的任何處理,然後共用已建立的新物件。
您也可以使用 Amazon Redshift 主控台從資料共用中建立資料共用。如需詳細資訊,請參閱從資料共用中建立資料庫。
(選擇性) 建立外部結構描述,以參照取用者叢集上匯入之取用者資料庫中的特定結構描述,並對其指派精細的許可。如需詳細資訊,請參閱CREATE EXTERNAL SCHEMA。
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
視需要,將從資料共用建立的資料庫和結構描述參照的許可授予使用者叢集中的使用者和角色。如需詳細資訊,請參閱 GRANT 或 REVOKE。
GRANT USAGE ON DATABASE sales_db TO Bob;
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
如果您在沒有 WITH 的情況下建立資料庫PERMISSIONS,您只能將從資料共用建立的整個資料庫的許可指派給您的使用者和角色。在某些情況下,您需要更精細地控制從資料共用中建立的資料庫物件子集。如果是這樣,您可以建立指向資料共用中特定結構描述的外部結構描述參考 (如上一個步驟所述),並在結構描述層級上提供精細的許可。
您也可以在共用物件之上建立近期繫結檢視,並使用這些檢視來指派精細的許可。也可以考慮讓生產者叢集以所需的精細程度為您建立其他資料共用。
如果您在步驟 2 WITH PERMISSIONS 中使用 建立資料庫,則必須為共用資料庫中的物件指派物件層級許可。僅具有 USAGE 許可的使用者在獲得其他物件層級許可WITHPERMISSIONS之前,無法存取使用 建立的資料庫中的任何物件。
GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
查詢資料共用中共用物件的資料。
在取用者資料庫和取用者叢集結構描述上具有許可的使用者和角色,可以探索和瀏覽任何共用物件的中繼資料。他們也可以探索和瀏覽取用者叢集中的本機物件。若要這麼做,他們會使用 JDBC 或 ODBC 驅動程式或 SVV_ALL 和 SVV_REDSHIFT 檢視。
生產者叢集在每個結構描述中可能會有多個資料庫、資料表和檢視的結構描述。取用者端的使用者只能看到透過資料共用提供的物件子集。這些使用者無法從生產者叢集看到整個中繼資料。此方法有助於透過資料共用提供精細的中繼資料安全控制
您可以繼續連線到本機叢集資料庫。但是現在,您也可以使用三部分 database.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;