デフォルトでは、標準アカウントには権限がありません。 特権アカウント (初期アカウントを含む) では、データベースオブジェクトに対する操作権限を標準アカウントに付与できます。
次のいずれかの方法を使用して、データベースアカウントに権限を付与できます。
データベースオブジェクトに対する操作権限をデータベースアカウントに付与します。
ロールに基づいてアカウント権限を付与します。
この方法により、複数のデータベースアカウントの権限管理が簡素化されます。 たとえば、テーブルの読み取り権限を複数のデータベースアカウントに付与する場合は、テーブルの読み取り権限をロールに付与してから、そのロールを複数のアカウントに割り当てることができます。
データベースオブジェクトに対する操作権限をデータベースアカウントに付与する
データベース、スキーマ、テーブル、ビュー、シーケンス、関数などのデータベースオブジェクトが作成されると、オブジェクトのすべての権限はオブジェクトの所有者に属します。 既定では、オブジェクト所有者とRDS_SUPERUSER権限を持つデータベースアカウントのみが、オブジェクトに対する操作を実行する権限を持っています。 他のデータベースアカウントがオブジェクトに対して操作を実行する場合は、アカウントに必要な権限が必要です。
次の表に、さまざまなデータベースオブジェクトに対する権限を示します。
データベースオブジェクト | 権限 |
テーブル、ビュー、およびシーケンス | SELECT INSERT UPDATE DELETE RULE ALL |
テーブル列 | SELECT INSERT UPDATE |
外部テーブル | ルールをすべて選択 |
データベース | CONNECT CREATE TEMPORARY | TEMP ALL |
関数 | EXECUTE |
手続き言語 | 使用法 |
スキーマ | すべての使用を作成する |
各タイプのオブジェクトに個別に権限を付与する必要があります。 たとえば、データベースに対してgrant ALL権限を付与すると、データベース内のテーブルにアクセスできなくなります。 CONNECT、CREATE、およびTEMP権限があるのは、データベースのみです。
mytableテーブルに対するINSERT権限をjsmithに付与します。 例:
GRANT INSERT ON mytable TO jsmith;myschemaスキーマ内のすべてのテーブルに対するSELECTおよびTRUNCATE権限をjsmithに付与します。 例:
GRANT SELECT,TRUNCATE ON ALL TABLES IN SCHEMA myschema TO jsmith;mytableテーブルのcol1列に対するSELECT権限をjsmithに付与します。 例:
GRANT SELECT (col1) on TABLE mytable TO jsmith;jsmithからmytableテーブルに対するすべての権限を取り消します。 例:
REVOKE ALL PRIVILEGES ON mytable FROM jsmith;
ロールに基づいてアカウント権限を付与する
ロールに基づいてデータベースアカウントの権限を付与できます。 ロールを作成し、ロールに権限を付与してから、そのロールを1つ以上のデータベースアカウントに割り当てることができます。 操作が完了すると、アカウントはロールのすべての権限を継承します。 次のセクションでは、ロールに基づいてアカウント権限を付与する方法の例を示します。
CREATEROLEおよびCREATEDB権限を持つadminという名前のロールを作成します。
CREATE ROLE admin CREATEROLE CREATEDB;管理者ロールをjohn、sally、bobに割り当てます。
GRANT admin TO john, sally, bob;ボブから管理者ロールを取り消します。
REVOKE admin FROM bob;データベースオブジェクトに対する権限を管理者ロールに付与します。 これにより、管理者ロールを持つすべてのデータベースアカウントが権限を継承します。
GRANT ALL ON TABLE mytable TO admin;
GRANT ALL ON SCHEMA myschema TO admin;
GRANT ALL ON DATABASE mydb TO admin;よくある質問
DROP TABLE権限を付与するにはどうすればよいですか?
GRANTステートメントを実行して、データベースアカウントにテーブルを削除する権限を付与することはできません。 ただし、テーブルまたはスキーマの所有者はテーブルを削除できます。
特権アカウントまたはテーブルまたはスキーマの所有者を使用して、テーブルまたはスキーマの所有者を別のデータベースアカウントに変更できます。 これにより、新しい所有者はテーブルを削除できます。
-- Change the owner of the mytable table to new_owner. This way, new_owner can delete the mytable table.
ALTER Table mytable OWNER TO new_owner;
-- Change the owner of the myshema schema to new_role. This way, new_owner can delete the mytable table and all the other tables in the myschema schema.
ALTER SCHEMA myschema OWNER TO new_owner; 複数のデータベースアカウントに同じテーブルまたはスキーマを削除する権限が必要な場合は、ロール権限の継承を利用して、テーブルまたはスキーマの所有者を特定のロールに変更し、そのロールを複数のアカウントに割り当てることができます。
-- Create a role named new_role.
CREATE ROLE new_role;
-- Change the owner of the mytable table to new_role. This way, new_role can delete the mytable table.
ALTER Table mytable OWNER TO new_role;
-- Change the owner of the myshema schema to new_role. This way, new_owner can delete the mytable table and all the other tables in the myschema schema.
ALTER SCHEMA myschema OWNER TO new_role;
-- Grant the permissions of new role to myuser.
GRANT new_role To myuser; 関連ドキュメント
特権アカウントと標準アカウントの作成方法については、「データベースアカウントの作成と管理」をご参照ください。
アカウントへのアクセスを許可し、アカウントへのアクセス権限を取り消す方法については、SQL構文トピックの「grant」および「revoke」を参照してください。