スキーマ とは、 名前を持つオブジェクトの集合です。 スキーマは、データベースのオブジェクトを論理的に区分します。 スキーマに入れることができるオブジェクトには、 表、視点、ニックネーム、トリガー、関数、およびパッケージが含まれます。
スキーマはデータベースのオブジェクトでもあります。 スキーマは、 ユーザーを所有者として記録する CREATE SCHEMA ステートメントを使用して明示的に作成されます。 また、他のオブジェクトを作成する際に、 ユーザーが IMPLICIT_SCHEMA 権限を持っている場合には、 暗黙的に作成することもできます。
スキーマ名 は、 2 つの部分から成るオブジェクト名の高位の部分として使用されます。 スキーマに含まれるオブジェクトは、その作成時点で、スキーマに割り当てられます。 オブジェクトが割り当てられるスキーマは、 特定のスキーマ名で修飾されている場合にはそのオブジェクトの名前によって、 あるいは修飾されていない場合はデフォルトのスキーマ名によって判別されます。
たとえば、DBADM 権限を有するユーザーが、 ユーザー A に対して C と呼ばれるスキーマを作成するとします。
CREATE SCHEMA C AUTHORIZATION A
ユーザー A は、以下のステートメントを出して、 スキーマ C に X という名前の表を作成することができます。
CREATE TABLE C.X (COL1 INT)
データベースが作成される場合に、 すべてのユーザーが IMPLICIT_SCHEMA 権限を持ちます。 これにより、すべてのユーザーが、 まだ存在しない任意のスキーマにオブジェクトを作成することができます。 暗黙的に作成されたスキーマに対して、どのようなユーザーも、 そのスキーマに他のオブジェクトを作成することができます。 1
IMPLICIT_SCHEMA 権限が PUBLIC から取り消される場合、スキーマは、 CREATE SCHEMA ステートメントを使用して明示的に作成されるか、 または IMPLICIT_SCHEMA 権限が与えられているユーザー (たとえば、 DBADM 権限のあるユーザー) によって暗黙的に作成されます。 PUBLIC から IMPLICIT_SCHEMA 権限を取り消すことは、 スキーマ名の使用に対する制御が増すと同時に、 オブジェクトの作成を試みる時に既存のアプリケーションで許可エラーが生じる可能性があります。
また、スキーマに関連する特権には、 どのようなユーザーがスキーマ中のオブジェクトを作成、更新、 および除去する権限をもつかを制御するものもあります。
当初、スキーマの所有者にはスキーマに関するこれらのすべての特権が与えられ、 それらの特権を他のユーザーに付与することもできます。 暗黙的に作成されたスキーマはシステムによって所有され、 当初、そのようなスキーマにオブジェクトを作成する権限がすべてのユーザーに与えられます。 DBADM または SYSADM 権限を有するユーザーは、 任意のスキーマでユーザーが保持する特権を変更することができます。 したがって、任意のスキーマ (暗黙的に作成されたスキーマであっても) のオブジェクトを作成、 更新、および除去するためのアクセスを制御することができます。