このページでは、詳細なアクセス制御のためにデータベースのロールに付与できる権限について説明します。
データベースのロールと詳細なアクセス制御については、詳細なアクセス制御についてをご覧ください。
SELECT
ロールによってテーブルで SELECT
ステートメントを実行できるようにします。列リストが指定されている場合、権限は対象の列でのみ有効です。列リストが指定されていない場合、特権はテーブルに追加されたすべての列を含め、テーブル内のすべての列に対して有効です。
テーブルの列のサブセットに
SELECT
を付与すると、FGAC ユーザーはそのテーブルでSELECT *
を使用できなくなります。そのテーブルに対するクエリには、含めるすべての列に名前を付ける必要があります。生成された列に付与された
SELECT
は、基になるベース列に対するSELECT
を付与しません。インターリーブされたテーブルの場合、親テーブルに付与された
SELECT
は子テーブルには伝播されません。SELECT
が特定の列(SUM(col_a)
など)に対する集計関数とともに使用されている場合、ロールにはその列に対するSELECT
権限が必要です。集計関数でCOUNT(*)
などの列が指定されていない場合、ロールにはテーブル内の少なくとも 1 つの列に対するSELECT
権限が必要です。
例
GRANT SELECT ON TABLE employees TO ROLE hr_director; GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep;
上記の最後の例では、すべての名前付き列が両方のテーブルに存在する必要があります。
INSERT
指定したテーブルに行を挿入することを許可します。列リストが指定されている場合、権限はそれらの列に対してのみ有効です。列リストが指定されていない場合、権限はテーブル内のすべての列で有効です。
列名を指定した場合、含まれていない列は挿入時にデフォルト値になります。
生成された列には
INSERT
を付与することができません。
例
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
UPDATE
指定したテーブルの行の更新をロールに許可します。更新は、テーブル列のサブセットに限定できます。
このロールには、
UPDATE
権限に加えて、すべてのキー列とクエリ対象のすべての列に対するSELECT
権限が必要です。クエリ対象の列には、WHERE
句の列と、更新された列の新しい値と生成された列のコンピューティングに使用される列が含まれます。生成された列には
UPDATE
を付与することができません。
例
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
DELETE
指定したテーブルから行を削除することをロールに許可します。
列レベルで
DELETE
を付与することはできません。また、ロールにはすべてのキー列と、クエリの
WHERE
句に含まれる可能性のある列に対してSELECT
も必要です。インターリーブされたテーブルの場合、
DELETE
権限は親テーブルでのみ必要です。子テーブルでON DELETE CASCADE
が指定されている場合は、子テーブルに対するDELETE
権限がなくても、子テーブルの行が削除されます。
例
GRANT DELETE ON TABLE employees, contractors TO ROLE admin;
詳細情報
詳しくは以下をご覧ください。