GRANT コマンドのこの変種は、データベースオブジェクトに対する特定の権限をロールに付与します。 これらの権限は、ロールにすでに付与されている権限に追加されます。

PUBLIC キーワードは、権限を後で作成するロールを含め、すべてのロールに付与することを示します。 PUBLIC はすべてのロールを含む暗黙的に定義されたグループです。 ロールには、そのロールに直接付与される権限、そのロールがメンバーになっている別のロールに付与される権限、および PUBLIC に付与される権限があります。

WITHGRANT OPTION を指定した場合、権限を付与された者はそれを他のロールに付与できます。 これらのキーワードを指定しない場合、付与された者は権限を付与することはできません。 付与オプションは PUBLIC には付与できません。

所有者はデフォルトですべての権限を持っているため、オブジェクトの所有者 (通常はオブジェクトを作成したユーザー) に権限を付与する必要はありません。 所有者は、安全のために自分の権限の一部を取り消すことを選択できます。 付与可能な権限には、オブジェクトを削除したり、その定義を変更したりする権限は含まれません。 付与できない権限は所有者に固有のものであり、付与または取り消すことはできません。 さらに、所有者は暗黙的にオブジェクトのすべての付与オプションを持っています。

オブジェクトのタイプに応じて、特定の権限を PUBLIC に付与することができます。 デフォルトの権限は、テーブルの非パブリックアクセスと、関数、プロシージャ、およびパッケージに対する EXECUTE 権限です。 オブジェクト所有者は、これらの権限を取り消すことができます。 最大限のセキュリティを確保するために、オブジェクトの作成と同じトランザクションで REVOKE コマンドを発行することができます。 これにより、他のユーザーはどのウィンドウでもオブジェクトを使用できません。

以下の表は、可能な権限について説明しています。

権限 説明
SELECT 指定されたテーブル、ビュー、またはシーケンスの列から SELECT することができます。 シーケンスの場合、この権限によって currval 関数を使用することができます。
INSERT 指定されたテーブルに新しい行を INSERT することができます。
UPDATE 指定されたテーブルの列を UPDATE することができます。 SELECT ... FOR UPDATE には、この権限に加えて SELECT 権限が必要です。
DELETE 指定されたテーブルの行を DELETE することができます。
REFERENCES 外部キー制約を作成できます。 外部キー制約を作成する場合は、参照するテーブルと参照されるテーブルの両方に対してこの権限が必要です。
EXECUTE 指定したパッケージ、ストアドプロシージャ、または関数を使用できます。 パッケージに対するこの権限により、パッケージ内のすべてのパブリックストアドプロシージャ、パブリック関数、パブリック変数、レコード、カーソル、およびその他のパブリックオブジェクトとオブジェクトタイプを使用できます。 これは、関数、ストアドプロシージャ、およびパッケージに適用できる唯一の権限タイプです。

Oracle と互換性のある PolarDB データベースの EXECUTE 権限を付与するための構文は、Oracle データベースとは完全な互換性がありません。 Oracle と互換性のある PolarDB データベースでは、FUNCTIONPROCEDURE、および PACKAGE のいずれかのキーワードによるプログラム名の修飾が必要です。 ただし、Oracle データベースでは、これらのキーワードを省略する必要があります。 関数の場合、Oracle と互換性のある PolarDB データベースでは関数名の後にすべての入力 (IN および IN OUT) 引数のデータ型が必要です。 関数の引数が存在しない場合は、関数名の後に空の括弧のペアを入力する必要があります。 ストアドプロシージャの場合、プロシージャに 1 つ以上の入力引数がある場合、すべての入力引数のデータ型を指定する必要があります。 Oracle では、関数とストアドプロシージャのシグネチャを省略しなければなりません。 これは、Oracle ではすべてのプログラムが同じ名前空間を共有するためです。 ただし、関数、ストアドプロシージャ、およびパッケージは、Oracle と互換性のある PolarDB データベースに独自の名前空間を持っています。 これにより、プログラム名のオーバーロードがある程度可能になります。

ALL PRIVILEGES 使用可能なすべての権限を一度に付与します。

他のコマンドに必要な権限の詳細については、対応するコマンドのページをご参照ください。