メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

GRANT

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

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

外部テーブルに対してアクセス権限の GRANT または REVOKE を実行することはできません。代わりに、外部スキーマに対してアクセス権限の付与または削除を実行します。

構文

Copy
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 ON { [ FUNCTION ] function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS 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 } [, ...]

Parameters

SELECT

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

INSERT

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

UPDATE

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

DELETE

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

REFERENCES

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

ALL [ PRIVILEGES ]

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

ON [ TABLE ] table_name

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

ON ALL TABLES IN SCHEMA schema_name

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

TO username

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

WITH GRANT OPTION

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

GROUP group_name

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

PUBLIC

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

CREATE

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

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

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

TEMPORARY | TEMP

指定したデータベースに一時テーブルを作成する権限を付与します。

注記

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

ON DATABASE db_name

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

USAGE

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

ON SCHEMA schema_name

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

EXECUTE ON [ FUNCTION ] function_name

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

EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name

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

USAGE ON LANGUAGE language_name

言語を使用する権限を付与します。 言語権限の使用では、CREATE FUNCTION コマンドを実行して UDF を作成する必要があります。詳細については、「UDF のセキュリティおよび権限」を参照してください。

Python UDF の場合、plpythonu を使用します。SQL UDF の場合、sql を使用します。

使用に関する注意事項

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

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

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

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

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

Copy
grant select on table employees to HR with grant option;

HR が SELECT 以外の操作に関する権限や、employees 以外のテーブルに関する権限を付与できないことに注意してください。

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

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

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

Copy
grant select on table sales to fred;

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

Copy
grant select on all tables in schema qa_tickit to fred;

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

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

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

Copy
grant all on table qa_tickit.sales to group qa_users;

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

Copy
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 テーブルから選択を実行できません。

Copy
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