

 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/)を参照してください。

# Amazon Redshift でデータ共有に対するアクセス許可を管理する
<a name="writes-managing-permissions"></a>

プロデューサー管理者には、共有しているデータセットの管理権限があります。新しいオブジェクトをデータ共有に追加したり、データ共有から削除したりできます。複数のコンシューマークラスター、AWSアカウント、または AWS リージョンに対して、データ共有へのアクセス権をまとめて付与または取り消すこともできます。許可が失効すると、コンシューマークラスターは直ちに共有オブジェクトへのアクセス権を失い、それらのオブジェクトは、SVV\$1DATASHARES の INBUND データ共有の一覧に表示されなくなります。

次の例では、データ共有 `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](r_CREATE_DATASHARE.md)」を参照してください。ALTER DATASHARE の場合、追加または削除するデータ共有オブジェクトに対して必要な許可を持つデータ共有の所有者は、データ共有を変更できます。詳細については、[ALTER DATASHARE](r_ALTER_DATASHARE.md)を参照してください。

プロデューサー管理者として、データ共有を削除すると、コンシューマークラスターに一覧表示されなくなります。削除されたデータ共有からコンシューマークラスター上に作成されたデータベースとスキーマリファレンスは、オブジェクトなしで引き続き存在します。コンシューマー管理者は、これらのデータベースを手動で削除する必要があります。

コンシューマー側では、コンシューマー管理者が、データ共有からデータベースを作成することで、共有データにアクセスする必要があるユーザーとロールを決定できます。データベースの作成時に選択したオプションに応じて、データベースへのアクセスを次のように制御できます。データ共有からデータセットを作成する方法の詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

データ共有の設定とコンシューマーからのデータの読み取りの詳細については、「[AWS アカウント内のデータへの読み取りアクセスの共有](https://docs.aws.amazon.com/redshift/latest/dg/within-account.html)」を参照してください。

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

データベースまたはスキーマへのアクセス許可が付与された後でも、アクセスを認めるデータベースまたはスキーマ内のすべてのオブジェクトについての関連アクセス許可をユーザーに付与する必要があります。

## WITH PERMISSIONS を使用した詳細な共有設定
<a name="share-datashare-writes"></a>

WITH PERMISSIONS を使用してきめ細かく共有を設定すると、クラスターまたは Serverless ワークグループがデータ共有に対してクエリを実行できるようになります。このプロセスでは、データ共有がアカウント内の別のクラスターまたは Amazon Redshift Serverless 名前空間から共有されているか、別のアカウントから共有され、使用している名前空間に関連付けられていることを前提としています。

1. コンシューマーデータベースの管理者は、データ共有からデータベースを作成できます。

   ```
   CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';
   ```

   WITH PERMISSIONS を使用してデータベースを作成する場合は、データ共有オブジェクトに対するきめ細かなアクセス許可をさまざまなユーザーやロールに付与できます。これを行わないと、データ共有データベースの USAGE アクセス許可を付与されたすべてのユーザーとロールに、データ共有データベース内のすべてのオブジェクトに対するすべてのアクセス許可が付与されます。

1. 以下では、Redshift データベースユーザーまたはロールにアクセス許可を付与する方法を示しています。これらのステートメントにローカルデータベースを接続できません。GRANT ステートメントの実行前にデータ共有データベースで 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;
   ```