

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 共用 內資料的讀取存取權 AWS 帳戶
<a name="within-account"></a>

使用 Amazon Redshift，您可以在相同 AWS 帳戶中跨不同的資料庫使用者或群組共用資料的讀取存取權。此功能可讓您精細控制資料存取權限，確保只有經授權的使用者或群組才能讀取特定資料集。

## 以生產者管理員或資料庫擁有者的身分共用資料以供讀取
<a name="share-producer"></a>

1. 在叢集中建立資料共用。如需詳細資訊，請參閱[CREATE DATASHARE](r_CREATE_DATASHARE.md)。

   ```
   CREATE DATASHARE salesshare;
   ```

   叢集超級使用者和資料庫擁有者可以建立資料共用。每個資料共用都會在建立期間與資料庫相關聯。只有來自該資料庫的物件才能在該資料共用中共用。可以在具有相同或不同物件細微程度的相同資料庫上建立多個資料共用。叢集可以建立的資料共用數量不限。

   您也可以使用 Amazon Redshift 主控台建立資料共用。如需詳細資訊，請參閱[建立資料共用](datashare-creation.md#create-datashare-console)。

1. 委派在資料共用上操作的許可。如需詳細資訊，請參閱 [GRANT](r_GRANT.md) 或 [REVOKE](r_REVOKE.md) 。

   下列範例政策會授予許給 `salesshare` 上的 `dbuser`。

   ```
   GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
   ```

   叢集超級使用者和資料共用的擁有者可以對其他使用者授與或撤銷資料共用的修改許可。

1. 在資料庫共用中新增物件或移除物件。若要將物件新增至資料共用，請在新增物件之前先新增結構描述。當您新增結構描述時，Amazon Redshift 不會在其下方新增所有物件。務必明確地新增這些物件。如需詳細資訊，請參閱[ALTER DATASHARE](r_ALTER_DATASHARE.md)。

   ```
   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 VIEW public.sales_data_summary_view;
   ```

   使用 ALTER DATASHARE 來共用結構描述及指定結構描述中的資料表、檢視和函數。超級使用者、資料共用擁有者或在資料共用上擁有 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 使用者定義函數 (UDF) 新增至資料共用。只有超級使用者可以為每個「資料共用-結構描述」配對修改此屬性。

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

   您也可以使用 Amazon Redshift 主控台在資料共用中新增或移除物件。如需詳細資訊，請參閱[將資料共用物件新增到資料共用](datashare-creation.md#add-datashare-object-console)、[從資料共用中移除資料共用物件](manage-datashare-existing-console.md#remove-datashare-object-console)及[編輯在您帳戶中建立的資料共用](manage-datashare-existing-console.md#edit-datashare-console)。

1. 在資料共用中新增或移除取用者。下列範例會將取用者命名空間新增至 `salesshare`。命名空間是帳戶中取用者叢集的命名空間全域唯一識別碼 (GUID)。如需詳細資訊，請參閱 [GRANT](r_GRANT.md) 或 [REVOKE](r_REVOKE.md) 。

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

   在 GRANT 陳述式中，您只能將許可授予一個資料共用取用者。

   叢集超級使用者和資料共用物件的擁有者或在資料共用上擁有 SHARE 許可的使用者，都可以在資料共用中新增或移除將取用者。為了這麼做，他們會使用 GRANT USAGE 或 REVOKE USAGE。

   若要尋找目前所見之叢集的命名空間，您可以使用 SELECT CURRENT\$1NAMESPACE 命令。若要尋找相同 中不同叢集的命名空間 AWS 帳戶，請前往 Amazon Redshift 主控台叢集詳細資訊頁面。在該頁面上，找到新增的命名空間欄位。

   您也可以使用 Amazon Redshift 主控台在資料共用中新增或移除資料取用者。如需詳細資訊，請參閱[將資料取用者新增至資料共用](datashare-creation.md#add-data-consumer-console)及[從資料共用中移除資料取用者](manage-datashare-existing-console.md#remove-data-consumer-console)。

1. (選擇性) 將安全性限制新增至資料共用。下列範例顯示具有公用 IP 存取權的取用者叢集可以讀取資料共用。如需詳細資訊，請參閱[ALTER DATASHARE](r_ALTER_DATASHARE.md)。

   ```
   ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;
   ```

   您可以在建立資料共用之後修改有關取用者類型的屬性。例如，您可以定義要使用指定資料共用中資料的叢集無法公開存取。若查詢來自不符合資料共用中所指定安全性限制的取用者叢集，則會在查詢執行期遭到拒絕。

   您也可以使用 Amazon Redshift 主控台編輯資料共用。如需詳細資訊，請參閱[編輯在您帳戶中建立的資料共用](manage-datashare-existing-console.md#edit-datashare-console)。

1. 列出在叢集中建立的資料共用，並查看資料共用的內容。

   下列範例會顯示名為 `salesshare` 之資料共用的資訊。

   ```
   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](r_DESC_DATASHARE.md)及[SHOW DATASHARES](r_SHOW_DATASHARES.md)。

   您也可以使用 [SVV\$1DATASHARES](r_SVV_DATASHARES.md)、[SVV\$1DATASHARE\$1CONSUMERS](r_SVV_DATASHARE_CONSUMERS.md) 和 [SVV\$1DATASHARE\$1OBJECTS](r_SVV_DATASHARE_OBJECTS.md) 來檢視資料共用、資料共用中的物件，以及資料共用取用者。

1. 捨棄資料共用。如需詳細資訊，請參閱[DROP DATASHARE](r_DROP_DATASHARE.md)。

   您可以在任何時間點使用 [DROP DATASHARE](r_DROP_DATASHARE.md) 刪除資料共用物件。叢集超級使用者和資料共用擁有者可以捨棄資料共用。

   以下範例會捨棄名為 `salesshare` 的資料共用。

   ```
   DROP DATASHARE salesshare;
   ```

   您也可以使用 Amazon Redshift 主控台刪除資料共用。如需詳細資訊，請參閱[刪除在您帳戶中建立的資料共用](manage-datashare-existing-console.md#delete-datashare-console)。

1. 使用 ALTER DATASHARE 隨時從資料共用中點移除物件。使用 REVOKE USAGE ON 來撤銷特定取用者在資料共用上的許可。它會撤銷資料共用中物件的 USAGE 許可，並立即停止對所有取用者叢集的存取。存取權被撤銷後，列出資料共用和中繼資料查詢 (例如列出資料庫和資料表) 不會傳回共用物件。

   ```
   ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
   ```

   您也可以使用 Amazon Redshift 主控台編輯資料共用。如需詳細資訊，請參閱[編輯在您帳戶中建立的資料共用](manage-datashare-existing-console.md#edit-datashare-console)。

1. 如果您不想再與取用者共用資料，請撤銷命名空間中的資料共用存取權。

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

   您也可以使用 Amazon Redshift 主控台編輯資料共用。如需詳細資訊，請參閱[編輯在您帳戶中建立的資料共用](manage-datashare-existing-console.md#edit-datashare-console)。

## 以取用者管理員的身分共用資料以供讀取
<a name="share-consumer"></a>

1. 列出可供您使用的資料共用，並檢視資料共用的內容。如需詳細資訊，請參閱[DESC DATASHARE](r_DESC_DATASHARE.md)及[SHOW DATASHARES](r_SHOW_DATASHARES.md)。

   下列範例會顯示指定生產者命名空間的輸入資料共用資訊。當您以取用者管理員身分執行 DESC DATASHARE 時，您必須指定 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\$1DATASHARES 來檢視資料共用，以及使用 SVV\$1DATASHARE\$1OBJECTS 來檢視資料共用內的物件。

   下列範例顯示取用者叢集中的輸入資料共用。

   ```
   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
   ```

1. 身為資料庫超級使用者，您可以建立參照資料共用的本機資料庫。如需詳細資訊，請參閱[CREATE DATABASE](r_CREATE_DATABASE.md)。

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

   如果您想要對本機資料庫中物件的存取進行更精細的控制，請在建立資料庫時使用 WITH PERSOMMENTS 子句。這可讓您在步驟 4 中為資料庫中的物件授予物件層級權限。

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

   您可以透過查詢 [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) 檢視來查看您從資料共用中建立的資料庫。您可以直接連線到這些資料庫，或是連線到取用者叢集上的本機資料庫，並執行跨資料庫查詢，以查詢資料共用資料庫中的資料。您不能在現有資料共用中建立的資料庫物件頂端建立資料共用。不過，您可以將資料複製到取用者叢集上的個別資料表中，執行所需的任何處理，然後共用已建立的新物件。

   您也可以使用 Amazon Redshift 主控台從資料共用中建立資料共用。如需詳細資訊，請參閱[從資料共用中建立資料庫](query-datashare-console.md#create-database-from-datashare-console)。

1. (選擇性) 建立外部結構描述，以參照取用者叢集上匯入之取用者資料庫中的特定結構描述，並對其指派精細的許可。如需詳細資訊，請參閱[CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)。

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 視需要，將從資料共用建立的資料庫和結構描述參照的許可授予使用者叢集中的使用者和角色。如需詳細資訊，請參閱 [GRANT](r_GRANT.md) 或 [REVOKE](r_REVOKE.md) 。

   ```
   GRANT USAGE ON DATABASE sales_db TO Bob;
   ```

   ```
   GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
   ```

   如果您在沒有 WITH PERSOMMENCE 的情況下建立資料庫，則只能將從資料共用建立的整個資料庫的權限指派給您的使用者和角色。在某些情況下，您需要更精細地控制從資料共用中建立的資料庫物件子集。如果是這樣，您可以建立指向資料共用中特定結構描述的外部結構描述參考 (如上一個步驟所述)，並在結構描述層級上提供精細的許可。

   您也可以在共用物件之上建立近期繫結檢視，並使用這些檢視來指派精細的許可。也可以考慮讓生產者叢集以所需的精細程度為您建立其他資料共用。

   如果您在步驟 2 中使用 WITH PERMISSIONS 建立資料庫，則必須為共用資料庫中的物件指派物件層級權限。只有 USAGE 權限的使用者在獲得額外的物件層級權限之前，不能存取使用 WITH PERMISSIONS 建立的資料庫中的任何物件。

   ```
   GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
   ```

1. 查詢資料共用中共用物件的資料。

   在取用者資料庫和取用者叢集結構描述上具有許可的使用者和角色，可以探索和瀏覽任何共用物件的中繼資料。他們也可以探索和瀏覽取用者叢集中的本機物件。若要做到這一點，他們會使用 JDBC 或 ODBC 驅動程式或 SVV\$1ALL 和 SVV\$1REDSHIFT 檢視。

   生產者叢集在每個結構描述中可能會有多個資料庫、資料表和檢視的結構描述。取用者端的使用者只能看到透過資料共用提供的物件子集。這些使用者無法從生產者叢集看到整個中繼資料。此方法有助於透過資料共用提供精細的中繼資料安全控制

   您可以繼續連線到本機叢集資料庫。但是現在，您也可以使用三部分 database.schema.table 表示法，從資料共用中建立的資料庫和結構描述中讀取。您可以執行跨越任何和所有可見資料庫的查詢。這些資料庫可以是叢集上的本機資料庫，也可以是從資料共用建立的資料庫。取用者叢集無法連線至從資料共用建立的資料庫。

   您可以使用完整資格存取資料。如需詳細資訊，請參閱[跨資料庫查詢範例](cross-database_example.md)。

   ```
   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](r_CREATE_VIEW.md)。

   ```
   // 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;
   ```