Amazon Redshift
データベース開発者ガイド

GRANT

ユーザーまたはユーザーグループのアクセス権を定義します。

権限には、テーブルとビューのデータの読み取り、データの書き込み、テーブルの作成など、アクセスオプションが含まれます。このコマンドを使用して、テーブル、データベース、スキーマまたは関数に対する特定の権限を付与します。データベースオブジェクトから権限を削除するには、REVOKE コマンドを使用します。

ON SCHEMA 構文を使用するデータベースユーザーおよびユーザーグループには、外部スキーマに対する USAGE 権限の GRANT (付与) または REVOKE (取り消し) のみを行うことができます。AWS Lake Formation で ON EXTERNAL SCHEMA を使用する場合は、AWS Identity and Access Management (IAM) ロールに対して、権限の GRANT (付与) および REVOKE (取り消し) のみ行うことができます。権限のリストについては、該当する構文を参照してください。

ストアドプロシージャの場合、付与できる権限は EXCUTE のみです。

構文

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

以下の構文では、Redshift Spectrum と Lake Formation を統合します。

GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list ) ON EXTERNAL TABLE schema_name.table_name TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ] GRANT { { SELECT | ALTER | DROP | DELETE | INSERT } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL TABLE schema_name.table_name [, ...] TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ] GRANT { { CREATE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL SCHEMA schema_name [, ...] TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]

パラメータ

SELECT

SELECT ステートメントを使用して、テーブルまたはビューからデータを選択する権限を付与します。UPDATE 操作または DELETE 操作で既存の列値を参照するには、SELECT 権限も必要です。

INSERT

INSERT ステートメントまたは COPY ステートメントを使用して、データをテーブルにロードする権限を付与します。

UPDATE

UPDATE ステートメントを使用して、テーブルの列を更新する権限を付与しますUPDATE 操作には、SELECT 権限も必要です。これは、更新する行、または列の新しい値を計算する行を決定するには、テーブルの列を参照する必要があるためです。

DELETE

テーブルからデータ行を削除する権限を付与しますDELETE 操作には、SELECT 権限も必要です。これは、削除する行を決定するには、テーブルの列を参照する必要があるためです。

REFERENCES

外部キーの制約を作成する権限を付与します。参照されるテーブルと参照するテーブルの両方で、この権限を付与する必要があります。そうしないと、ユーザーは制約を作成できません。

ALL [ PRIVILEGES ]

指定したユーザーまたはユーザーグループに、すべての使用できる権限を 1 度で付与します。PRIVILEGES キーワードはオプションです。

GRANT ALL ON SCHEMA は、外部スキーマに対する CREATE 権限を付与しません。

Lake Formation で有効になっている AWS Glue データカタログ のテーブルに対するすべての権限を付与することができます。この場合、個々の権限 (SELECT、ALTER など) は、Data Catalog に記録されます。

ALTER

Lake Formation で有効になっている AWS Glue データカタログ のテーブルを変更する権限を付与します。この権限は、Lake Formation を使用する場合にのみ適用されます。

DROP

Lake Formation で有効になっている AWS Glue データカタログ のテーブルを削除する権限を付与します。この権限は、Lake Formation を使用する場合にのみ適用されます。

ON [ TABLE ] table_name

テーブルまたはビューに、指定した権限を付与します。TABLE キーワードはオプションです。1 つのステートメントで、複数のテーブルとビューを列挙できます。

ON ALL TABLES IN SCHEMA schema_name

参照されたスキーマ内のすべてのテーブルおよびビューに指定された権限を付与します。

(column_list) ON EXTERNAL TABLE schema_name.table_name

参照されるスキーマの指定された Lake Formation テーブルの IAM ロールに、指定されたアクセス許可を付与します。

ON EXTERNAL TABLE schema_name.table_name

参照されるスキーマの指定された Lake Formation テーブルの IAM ロールに指定された権限を付与します。

ON EXTERNAL SCHEMA schema_name

参照されるスキーマの IAM ロールに指定された権限を付与します。

TO username

権限を付与されるユーザーを示します。

TO IAM_ROLE iam_role

権限を付与される IAM ロールを示します。

WITH GRANT OPTION

権限を付与されるユーザーが、他のユーザーにも同じ権限を付与できることを示します。WITH GRANT OPTION をグループや PUBLIC に付与することはできません。

GROUP group_name

権限をユーザーグループに付与します。

PUBLIC

指定した権限を、後で作成されるユーザーを含め、すべてのユーザーに付与します。PUBLIC は、常にすべてのユーザーを含むグループを表します。各ユーザーの権限には、PUBLIC に付与された権限、ユーザーが属するグループに付与された権限、およびそのユーザーに付与された権限のすべてが含まれます。

PUBLIC を Lake Formation EXTERNAL TABLE に付与すると、Lake Formation の everyone グループに権限が付与されます。

CREATE

データベースオブジェクトに応じて、次の権限をユーザーまたはユーザーグループに付与します。

  • データベースの場合、CREATE はデータベース内にスキーマを作成することをユーザーに許可します。

  • スキーマの場合、CREATE はスキーマ内にオブジェクトを作成することをユーザーに許可します。オブジェクトの名前を変更するには、CREATE 権限と、名前を変更するオブジェクトを所有している必要があります。

  • CREATE ON SCHEMA は、Amazon Redshift Spectrum 用の外部スキーマではサポートされていません。外部スキーマの外部テーブルの使用を許可するには、アクセスする必要のあるユーザーに USAGE ON SCHEMA を付与します。外部スキーマの所有者またはスーパーユーザーのみが外部スキーマ内に外部テーブルを作成できます。外部スキーマの所有者を移行するには、「ALTER SCHEMA」を使用して所有者を変更します。

TEMPORARY | TEMP

指定したデータベースに一時テーブルを作成する権限を付与します。Amazon Redshift Spectrum クエリを実行するには、データベースユーザーがデータベースに一時テーブルを作成するアクセス権限を持っている必要があります。

注記

デフォルトでは、PUBLIC グループの自動メンバーシップにより、一時テーブルを作成する権限がユーザーに付与されます。ユーザーが一時テーブルを作成する権限を削除するには、PUBLIC グループから TEMP 権限を取り消し、特定のユーザーまたはユーザーのグループに対して、一時テーブルを作成する権限を明示的に付与します。

ON DATABASE db_name

データベースに対する指定された権限を付与します。

USAGE

特定のスキーマに対して USAGE 権限を付与します。これによって、そのスキーマ内のオブジェクトにユーザーがアクセスできるようになります。これらのオブジェクトに対する特定のアクションは、個別に許可する必要があります (例: テーブルに対する SELECT または UPDATE の権限)。デフォルトでは、すべてのユーザーは PUBLIC スキーマに対して、CREATE 権限と USAGE 権限を所有しています。

ON SCHEMA schema_name

スキーマに対する指定された権限を付与します。

GRANT CREATE ON SCHEMA および GRANT ALL ON SCHEMA の CREATE 権限は、Amazon Redshift Spectrum 外部スキーマではサポートされていません。外部スキーマの外部テーブルの使用を許可するには、アクセスする必要のあるユーザーに USAGE ON SCHEMA を付与します。外部スキーマの所有者またはスーパーユーザーのみが外部スキーマ内に外部テーブルを作成できます。外部スキーマの所有者を移行するには、「ALTER SCHEMA」を使用して所有者を変更します。

EXECUTE ON FUNCTION function_name

特定の関数に対する EXECUTE 権限を付与します。関数名が重複する場合があるため、関数の引数リストが含まれている必要があります。詳細については、「UDF の命名」を参照してください。

EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name

参照されたスキーマ内のすべての関数に対する指定された権限を付与します。

EXECUTE ON PROCEDURE procedure_name

特定のストアドプロシージャに対する EXECUTE 権限を付与します。ストアドプロシージャ名は重複する場合があるため、プロシージャの引数リストを含める必要があります。詳細については、「ストアドプロシージャの名前付け」を参照してください。

EXECUTE ON ALL PROCEDURES IN SCHEMA schema_name

参照されたスキーマ内のすべてのストアドプロシージャに対する指定された権限を付与します。

USAGE ON LANGUAGE language_name

言語に対する USAGE 権限を付与します。

USAGE ON LANGUAGE 権限は、CREATE FUNCTION コマンドを実行してユーザー定義関数 (UDF) を作成するために必要です。詳細については、「UDF のセキュリティおよび権限」を参照してください。

USAGE ON LANGUAGE は、CREATE PROCEDURE コマンドを実行してストアドプロシージャを作成するために必要です。詳細については、「ストアドプロシージャのセキュリティおよび権限 」を参照してください。

Python UDF の場合、plpythonu を使用します。SQL UDF の場合、sql を使用します。ストアドプロシージャの場合、plpgsql を使用します。

使用に関する注意事項

オブジェクトに対する権限を付与するには、次の条件のうち 1 つを満たす必要があります。

  • オブジェクトの所有者であること。

  • スーパーユーザーであること。

  • そのオブジェクトと権限に関する付与権限があること。

たとえば、次のコマンドは、employees テーブルに対する SELECT コマンドの実行と、他のユーザーに対する同じ権限の付与と取り消しの両方をユーザー HR に許可します。

grant select on table employees to HR with grant option;

HR は、SELECT 以外のオペレーションに関する権限や employees 以外のテーブルに関する権限を付与することはできません。

ビューに対する権限が付与されていても、その基礎となるテーブルに対する権限を持っていることにはなりません。同様に、スキーマに対する権限が付与されていても、スキーマ内のテーブルに対する権限を持っていることにはなりません。基となるテーブルに対するアクセス権を明示的に付与する必要があります。

AWS Lake Formation テーブルに権限を付与するには、テーブルの外部スキーマに関連付けられた IAM ロールに、外部テーブルに権限を付与する権限が必要です。次の例では、IAM ロール myGrantor に関連付けられた外部スキーマを作成します。IAM ロール myGrantor には、他のユーザーにアクセス許可を付与するアクセス許可があります。GRANT コマンドは、外部スキーマに関連付けられている IAM ロール myGrantor のアクセス許可を使用して、IAM ロール myGrantee にアクセス許可を付与します。

create external schema mySchema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myGrantor' create external database if not exists;
grant select on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

IAM ロールに権限を GRANT ALL すると、関連する Lake Formation で有効になっている Data Catalog に個々の権限が付与されます。たとえば、次の GRANT ALL を実行すると、付与された個々の権限 (SELECT、ALTER、DROP、DELETE、および INSERT) が Lake Formation コンソールに表示されます。

grant all on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

スーパーユーザーは、オブジェクトの権限を設定する GRANT コマンドと REVOKE コマンドに関係なく、すべてのオブジェクトにアクセスできます。

次の例では、SALES テーブルに対する SELECT 権限をユーザーに付与します。fred

grant select on table sales to fred;

次の例では、QA_TICKIT スキーマのすべてのテーブルに対する SELECT 権限をユーザー fred に付与します。

grant select on all tables in schema qa_tickit to fred;

次の例では、スキーマ QA_TICKIT に対するすべてのスキーマ権限をユーザーグループ QA_USERS に付与します。スキーマに対する権限は CREATE と USAGE です。USAGE は、スキーマ内のオブジェクトに対するアクセス権限をユーザーに付与しますが、それらのオブジェクトに対する INSERT や SELECT などの権限は付与しません。権限は、各オブジェクトで個別に付与する必要があります。

create group qa_users; grant all on schema qa_tickit to group qa_users;

次の例では、グループ QA_USERS のすべてのユーザーに対して、QA_TICKIT スキーマの SALES テーブルに対するすべての権限を付与します。

grant all on table qa_tickit.sales to group qa_users;

次の一連のコマンドは、スキーマに対するアクセス権限があっても、スキーマ内のテーブルに対する権限は付与されていないことを示しています。

create user schema_user in group qa_users password 'Abcd1234'; create schema qa_tickit; create table qa_tickit.test (col1 int); grant all on schema qa_tickit to schema_user; set session authorization schema_user; select current_user; current_user -------------- schema_user (1 row) select count(*) from qa_tickit.test; ERROR: permission denied for relation test [SQL State=42501] set session authorization dw_user; grant select on table qa_tickit.test to schema_user; set session authorization schema_user; select count(*) from qa_tickit.test; count ------- 0 (1 row)

次の一連のコマンドは、ビューに対するアクセス権限があっても、基礎となるテーブルに対するアクセス権限は付与されていないことを示しています。VIEW_USER というユーザーには VIEW_DATE に関するすべての権限が付与されていますが、DATE テーブルから選択することはできません。

create user view_user password 'Abcd1234'; create view view_date as select * from date; grant all on view_date to view_user; set session authorization view_user; select current_user; current_user -------------- view_user (1 row) select count(*) from view_date; count ------- 365 (1 row) select count(*) from date; ERROR: permission denied for relation date