

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の 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="across-account"></a>

AWS アカウント間で、読み取りのためにデータを共有することができます。AWS アカウント間でのデータの共有は、アカウント内でのデータの共有と同じような仕組みになっていますが、AWS アカウント間でのデータの共有では双方向ハンドシェイクが必要となる点が異なります。プロデューサアカウント管理者は、コンシューマーアカウントにデータ共有へのアクセスを許可するか、アクセスを許可しないかのいずれかを選択できます。承認されたデータ共有を使用するために、コンシューマーアカウントの管理者はデータ共有を関連付けることができます。この管理者は、データ共有を AWS アカウント全体またはコンシューマーアカウント内の特定のクラスターに関連付けることや、データ共有を拒否することができます。アカウント内でのデータ共有の詳細については、[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)を参照してください。

データ共有では、同じアカウント内または異なる AWS アカウントの名前空間がデータコンシューマーとなる場合があります。アカウント内での共有やクロスアカウントの共有用に別々のデータ共有を作成する必要はありません。

クロスアカウントデータ共有の場合、プロデューサクラスターとコンシューマクラスターの両方を暗号化する必要があります。

AWS アカウントとデータを共有する場合、プロデューサー管理者は、エンティティとして AWS アカウントと共有します。コンシューマー管理者は、コンシューマーアカウントのどの名前空間がデータ共有にアクセスできるかを決定できます。

**Topics**
+ [プロデューサー管理者のアクション](producer-cluster-admin.md)
+ [コンシューマーアカウント管理者のアクション](consumer-account-admin.md)
+ [コンシューマー管理者のアクション](consumer-cluster-admin.md)

# プロデューサー管理者のアクション
<a name="producer-cluster-admin"></a>

Amazon Redshift では、プロデューサークラスターで管理タスクを実行して、データの取り込みとロード処理を管理できます。

**プロデューサー管理者またはデータベース所有者である場合** – 以下の手順に従ってください。

1. クラスターにデータ共有を作成し、データ共有オブジェクトをデータ共有に追加します。データ共有を作成し、データ共有オブジェクトをデータ共有に追加する方法についての詳細なステップについては、「[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)」を参照してください。CREATE DATASHARE および ALTER DATASHARE については、「[CREATE DATASHARE](r_CREATE_DATASHARE.md)」および「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

   次の例では、異なるデータ共有オブジェクトをデータ共有 `salesshare` に追加しています。

   ```
   -- Add schema to datashare
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   
   -- Add table under schema to datashare
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   
   -- Add view to datashare 
   ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;
   
   -- Add all existing tables and views under schema to datashare (does not include future table)
   ALTER DATASHARE salesshare ADD ALL TABLES in schema public;
   ```

   Amazon Redshift コンソールを使用して、データ共有を作成または編集することもできます。詳細については、「[データ共有を作成する](datashare-creation.md#create-datashare-console)」および「[アカウントで作成されたデータ共有の編集](manage-datashare-existing-console.md#edit-datashare-console)」を参照してください。

1. データ共有を操作するための権限を委任します。詳細については、「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   次の例では、`salesshare`上の `dbuser` にアクセス許可を付与しています。

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

   クラスターのスーパーユーザーとデータ共有の所有者は、追加のユーザーに対してデータ共有の変更許可の付与または取り消しを実行できます。

1. コンシューマーをデータ共有に追加するか、データ共有からコンシューマーを削除します。次の例は、AWS アカウントID を `salesshare` に追加します。詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012';
   ```

   GRANT ステートメントでは、1 つのデータコンシューマーにしか許可を付与できません。

   クラスターのスーパーユーザーおよびデータ共有オブジェクトの所有者、またはデータ共有に対する SHARE 許可を持つユーザーは、コンシューマーをデータ共有に追加したり、データ共有からコンシューマーを削除したりできます。そのために、GRANT USAGE または REVOKE USAGE を使用します。

   また、Amazon Redshift コンソールを使用して、データ共有に対しデータコンシューマーを追加したり削除したりできます。詳細については、「[データ共有にデータコンシューマーを追加する](datashare-creation.md#add-data-consumer-console)」および「[データ共有からのデータコンシューマーの削除](manage-datashare-existing-console.md#remove-data-consumer-console)」を参照してください。

1. (オプション) コンシューマーとデータを共有する必要がなくなった場合は、AWS アカウントからデータ共有へのアクセス権を取り消します。

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012';
   ```

**プロデューサーアカウントの管理者である場合** – 以下のステップに従います。

AWS アカウントに使用を許可すると、データ共有のステータスが `pending_authorization` になります。プロデューサーアカウントの管理者は、Amazon Redshift コンソールを使用してデータ共有を認可し、データコンシューマーを選択する必要があります。

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) にサインインします。次に、データ共有へのアクセスを許可する、またはその許可を削除するデータコンシューマーを選択します。認可されたデータコンシューマーは、データ共有でアクションを実行するための通知を受け取ります。名前空間をデータコンシューマーとして追加する場合は、承認を行う必要はありません。データコンシューマーが認可されると、データ共有オブジェクトにアクセスし、データをクエリするコンシューマデータベースを作成できます。詳細については、「[データ共有の承認と承認の取り消し](authorize-datashare-console.md)」を参照してください。

## 複数のアカウントでデータへの書き込みアクセス許可を共有する
<a name="within-account-multi-warehouse-consumer-associate"></a>

Amazon Redshift では、AWS アカウント間でデータを共有し、書き込み許可を付与して、チームまたは組織間のコラボレーションとデータ共有を行うことができます。クロスアカウントデータ共有を使用すると、データベース、スキーマ、テーブルを作成および管理するデータプロバイダーアカウントを作成し、データコンシューマーアカウントと安全に共有できます。以下のセクションでは、クロスアカウントデータ共有を設定し、Amazon Redshift で書き込み許可を付与するプロセスについて説明します。

# コンシューマーアカウント管理者のアクション
<a name="consumer-account-admin"></a>

Amazon Redshift では、コンシューマーアカウントの管理、およびデータウェアハウスリソースへのアクセス制御を行えます。

**コンシューマーアカウントの管理者である場合** – 以下のステップに従います。

他のアカウントから共有されている 1 つまたは複数のデータ共有を、AWS アカウント全体、またはアカウント内の特定の名前空間に関連付けるには、Amazon Redshift コンソールを使用します。

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) にサインインします。次に、他のアカウントから共有されている 1 つまたは複数のデータ共有を、AWS アカウント全体、またはアカウント内の特定の名前空間と関連付けます。詳細については、「[Amazon Redshift で他の AWS アカウントからのデータ共有を関連付ける](writes-associating.md)」を参照してください。

AWS アカウント または特定の名前空間が関連付けられたら、データ共有を利用できるようになります。データ共有の関連付けはいつでも変更できます。関連付け先を個々の名前空間から AWS アカウントに変更すると、Amazon Redshift が名前空間を AWS アカウントの情報で上書きします。関連付け先を AWS アカウントから特定の名前空間に変更すると、Amazon Redshift が AWS アカウントの情報を名前空間の情報で上書きします。アカウント内のすべての名前空間が、データにアクセスします。

# コンシューマー管理者のアクション
<a name="consumer-cluster-admin"></a>

Amazon Redshift では、コンシューマークラスターで管理タスクを実行して、データの取り込みとロード処理を管理できます。

**コンシューマー管理者である場合** – 以下の手順に従ってください。

1. 利用可能なデータ共有を一覧表示し、データ共有のコンテンツを表示します。データ共有のコンテンツは、プロデューサー管理者がデータ共有を承認し、コンシューマー管理者がデータ共有を受け入れて関連付けた場合にのみ使用できます。詳細については、「[DESC DATASHARE](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   次の例では、指定されたプロデューサー名前空間のインバウンドデータ共有の情報を表示します。コンシューマー管理者として 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\$1DATASHARES を使用してデータ共有を表示し、SVV\$1DATASHARE\$1OBJECTS を使用してデータ共有内のオブジェクトを表示することもできます。

   次の例では、コンシューマークラスター内のインバウンドデータ共有を表示します。

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

1. データ共有を参照するローカルデータベースを作成します。データ共有からデータベースを作成する際に、NAMESPACE とアカウント ID を指定します。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

   ```
   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\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) ビューにクエリを実行すると、データ共有から作成したデータベースを確認できます。これらのデータベースに直接接続したり、コンシューマークラスターのローカルデータベースに接続し、データベース間クエリを実行して、データ共有データベースのデータをクエリしたりすることができます。既存のデータ共有から作成されたデータベースオブジェクトの上にデータ共有を作成することはできません。ただし、コンシューマークラスター上の個別のテーブルにデータをコピーし、必要な処理を実行してから、作成された新しいオブジェクトを共有することは可能です。

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 PERMISSIONS を使用することなくデータベースを作成している場合は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。その場合は、前のステップでの説明にあるように、データ共有内の特定のスキーマを指す外部スキーマ参照を作成できます。その後、スキーマレベルで詳細なアクセス許可を指定します。また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターで必要な粒度で追加のデータ共有を作成するよう検討することもできます。データ共有から作成されたデータベースへのスキーマ参照は、必要な数を作成できます。

   ステップ 2 で WITH PERMISSIONS を使用してデータベースを作成した場合は、共有データベース内のオブジェクトにオブジェクトレベルのアクセス許可を割り当てる必要があります。USAGE アクセス許可のみを持つユーザーは、追加のオブジェクトレベルのアクセス許可が付与されるまで、WITH PERMISSIONS を使用して作成されたデータベース内のオブジェクトにはアクセスできません。

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

1. データ共有内の共有オブジェクト内のデータをクエリします。

   コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、または SVV\$1ALL および SVV\$1REDSHIFT ビューを使用します。

   プロデューサークラスターには、各スキーマ内のデータベース、テーブル、およびビューに多数のスキーマが含まれる場合があります。コンシューマー側のユーザーは、データ共有を通じて利用可能になったオブジェクトのサブセットのみを表示できます。これらのユーザーは、プロデューサークラスターからのメタデータ全体を表示することはできません。このアプローチは、データ共有による詳細なメタデータセキュリティの制御を提供します。

   引き続きローカルクラスターのデータベースに接続します。ただし、3 つの部分からなる database.schema.table 表記を使用して、データ共有から作成されたデータベースとスキーマから読み込むこともできるようになりました。表示されているすべてのデータベースにまたがるクエリを実行できます。これらは、クラスター上のローカルデータベースでも、データ共有から作成されたデータベースでもかまいません。コンシューマークラスターは、データ共有から作成されたデータベースに接続できません。

   完全な資格を使用してデータにアクセスできます。詳細については、「[クロスデータベースクエリの例](cross-database_example.md)」を参照してください。

   ```
   SELECT * FROM sales_db.public.tickit_sales_redshift;
   ```

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