本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
共用資料共用
只有在不同的 Amazon Redshift 佈建叢集或無伺服器工作群組之間共用資料時,才需要資料共用。在同一個叢集中,只要您擁有其他資料庫中物件的必要權限,就可以使用簡單的三部分標記法 database.schema.table
來查詢另一個資料庫。
在 Amazon Redshift 中管理資料共用的許可
身為生產者叢集管理員,您可以保留所共用資料集的控制權。您可以將新物件新增至資料共用,或從資料共用中移除物件。您也可以授與或撤銷取用者叢集、 AWS 帳戶或區域的整體資料存取權。 AWS 當許可被撤銷時,取用者叢集會立即失去共用物件的存取權,並無法在 SVV_DATASHARES 的 INBOUND 資料共用清單中看到共用物件。
下列範例會建立資料清單salesshare
、新增結構描述public
,並將資料表public.tickit_sales_redshift
新增至。salesshare
它也會授與指定叢集命名空間的使用權限。salesshare
CREATE DATASHARE salesshare; ALTER DATASHARE salesshare ADD SCHEMA public; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
對於 CREATE DATASHARE,超級使用者和資料庫擁有者可以建立資料庫。如需詳細資訊,請參閱 CREATE DATASHARE。對於 ALTER DATASHARE,在要新增或移除的資料共用物件上有所需許可的資料共用擁有者可以修改資料共用。如需相關資訊,請參閱ALTER DATASHARE。
身為生產者管理員,當您捨棄資料共用時,資料共用不會再列在取用者叢集上。使用者叢集上從捨棄的資料共用中建立的資料庫和結構描述參考會繼續存在,但其中沒有任何物件。取用者叢集管理員必須手動刪除這些資料庫。
在取用者方面,取用者叢集管理員可以透過從資料共用建立資料庫來決定哪些使用者和角色應該可以存取共用資料。根據您在建立資料庫時所選擇的選項,您可以按照下列方式控制對資料庫的存取。如需從資料共用建立資料庫的詳細資訊,請參閱 CREATE DATABASE。
建立沒有 WITH PERMISSIONS 子句的資料庫
管理員可以在資料庫或結構描述層級上控制存取權。若要在結構描述層級上控制存取權,管理員必須從在資料共用中建立的 Amazon Redshift 資料庫建立外部結構描述。
下列範例會授予在資料庫層級和結構描述層級上存取共用資料表的許可。
GRANT USAGE ON DATABASE sales_db TO Bob; CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE sales_db SCHEMA 'public'; GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
若要進一步限制存取權,您可以在共用物件頂端建立檢視,僅公開必要的資料。然後,您可以使用這些視觀表將存取權提供給使用者和角色。
一旦授予使用者資料庫或結構描述的存取權後,他們就可以存取該資料庫或結構描述中的所有共用物件。
使用 WITH PERMISSIONS 子句建立資料庫
授予資料庫或結構描述的使用權之後,系統管理員可以使用與本機資料庫或結構描述相同的權限授予程序,進一步控制存取權。如果沒有個別物件權限,使用者就無法存取資料附屬資料庫或結構描述中的任何物件,即使在被授予 USAGE 權限之後也一樣。
下列範例會授予在資料庫層級上存取共用資料表的許可。
GRANT USAGE ON DATABASE sales_db TO Bob; GRANT USAGE FOR SCHEMAS IN DATABASE sales_db TO Bob; GRANT SELECT ON sales_db.public.tickit_sales_redshift TO Bob;
授予資料庫或結構描述的存取權之後,使用者仍然需要獲得資料庫或結構描述中任何您要讓他們存取之物件的相關權限。
使用「使用權限」進行精細共享(預覽
讓叢集或 Serverless 工作群組查詢資料共用
此步驟假設資料共用源自您帳戶中的其他叢集或 Amazon Redshift Serverless 命名空間,或者來自另一個帳戶,且已與您正在使用的命名空間相關聯。
取用者資料庫管理員可以從資料共用建立資料庫。
CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';
如果您建立具有權限的資料庫,您可以將資料共用物件的細微權限授予不同的使用者和角色。如果沒有這個功能,所有被授予資料共用資料庫 USAGE 權限的使用者和角色,都會被授予資料共用資料庫內所有物件的所有權限。
以下說明如何將權限授予 Redshift 資料庫使用者或角色。您必須連線到本機資料庫,才能執行這些陳述式。如果您在執行授予陳述式之前,在資料共用資料庫上執行 USE 命令,則無法執行這些陳述式。
GRANT USAGE ON DATABASE my_ds_db TO ROLE data_eng; GRANT CREATE, USAGE ON SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT ALL ON ALL TABLES IN SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT USAGE ON DATABASE my_ds_db TO bi_user; GRANT USAGE ON SCHEMA my_ds_db.my_shared_schema TO bi_user; GRANT SELECT ON my_ds_db.my_shared_schema.table1 TO bi_user;
在 Amazon Redshift 資料共用中使用檢視
生產者叢集可以共用一般、近期繫結和具體化視觀表。共用一般檢視或近期繫結檢視時,您不需要共用基底資料表。下表顯示資料共用如何支援檢視。
檢視表名稱 | 可以將此檢視新增到資料共用嗎? | 取用者可以在跨叢集的資料共用物件上建立此檢視嗎? |
---|---|---|
一般檢視 | 是 | 否 |
近期繫結檢視 | 是 | 是 |
具體化視觀表 | 是 | 是,但僅限完整的重新整理 |
下面的查詢顯示資料共用支援的一般檢視輸出。如需一般檢視定義的資訊,請參閱 CREATE VIEW。
SELECT * FROM tickit_db.public.myevent_regular_vw ORDER BY eventid LIMIT 5; eventid | eventname ----------+------------- 3835 | LeAnn Rimes 3967 | LeAnn Rimes 4856 | LeAnn Rimes 4948 | LeAnn Rimes 5131 | LeAnn Rimes
下面的查詢顯示資料共用支援的近期繫結檢視輸出。如需近期繫結檢視的詳細資訊,請參閱 CREATE VIEW。
SELECT * FROM tickit_db.public.event_lbv ORDER BY eventid LIMIT 5; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+------------------------------+--------------------- 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00
下面的查詢顯示資料共用支援的具體化視觀表輸出。如需具體化視觀表的詳細資訊,請參閱 CREATE MATERIALIZED VIEW。
SELECT * FROM tickit_db.public.tickets_mv; catgroup | qtysold ----------+--------- Concerts | 195444 Shows | 149905
您可以維護生產者叢集中所有租用戶的通用資料表。您也可以與取用者叢集共用依維度資料欄 (例如 tenant_id
(account_id
或 namespace_id
)) 篩選的資料子集。若要這麼做,您可以在基底資料表上定義檢視,並在這些 ID 欄上使用篩選,例如 current_aws_account = tenant_id
。在取用者方面,當您查詢檢視時,您只會看到符合您帳戶資格的資料列。若要這麼做,您可以使用 Amazon Redshift 內容函數 current_aws_account
和 current_namespace
。
下列查詢會傳回目前 Amazon Redshift 叢集所在的帳戶 ID。如果您已連線到 Amazon Redshift,則可以執行此查詢。
select current_user, current_aws_account; current_user | current_aws_account -------------+-------------------- dwuser | 111111111111 (1row)
下列查詢會傳回目前 Amazon Redshift 叢集的命名空間。如果您已連線到資料庫,則可以執行此查詢。
select current_user, current_namespace; current_user | current_namespace -------------+-------------------------------------- dwuser | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8 (1 row)
資料命名中具體化視觀表的累加式重新整理
Amazon Redshift 支援在共用基礎資料表時,針對消費者資料保護中的具體化視圖進行累加式重新整理。累加式重新整理是一項操作,Amazon Redshift 會識別基礎資料表或上次重新整理後發生的資料表中的變更,並僅更新具體化視觀表中的對應記錄。如需此行為的相關資訊,請參閱建立具體化視觀表。
使用 IAM 政策管理資料共用 API 操作的存取
若要控制資料共用 API 操作的存取權,請使用 IAM 動作型政策。如需有關管理 IAM 政策的詳細資訊,請參閱《IAM 使用者指南》中的理 IAM 政策。
如需使用資料共用 API 操作所需許可的相關資訊,請參閱《Amazon Redshift 管理指南》中的使用資料共用 API 操作所需的權限。
若要讓跨帳戶資料共用更安全,您可以使用條件式金鑰 ConsumerIdentifier
進行 AuthorizeDataShare
和 DeauthorizeDataShare
API 操作。這樣,您可以明確控制哪些 AWS 帳戶 可以對兩個 API 操作進行調用。
對於不是您自己帳戶的取用者,您可以拒絕授權或取消授權資料共用。若要這麼做,請在 IAM 政策中指定 AWS 帳戶 數字。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "*", "Condition": { "StringNotEquals": { "redshift:ConsumerIdentifier": "555555555555" } } } ] }
您可以允許具有 a 的生產者明確地與 IAM 政策中具有 111122223333 AWS 帳戶 的消費者共享。 DataShareArn testshare2
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "arn:aws:redshift:us-east-1:666666666666:datashare:af06285e-8a45-4ee9-b598-648c218c8ff1/testshare2", "Condition": { "StringEquals": { "redshift:ConsumerIdentifier": "111122223333" } } } ] }