DB2 Version 9.7 for Linux, UNIX, and Windows

スキーマ

スキーマ とは、名前を持つオブジェクトの集合のことです。 これにより、それらのオブジェクトを論理的にグループ化できます。 スキーマは、名前修飾子でもあります。これにより、複数のオブジェクトに対して同じ自然名を使用しながら、それらのオブジェクトに対するあいまい参照を防ぐことができます。

例えば、「INTERNAL」および「EXTERNAL」というスキーマ名によって、2 つの異なる SALES 表を識別することが容易になります (INTERNAL.SALES、EXTERNAL.SALES)。

スキーマによって、複数のアプリケーションがネーム・スペースの衝突を生じることなく、単一のデータベースにデータを保管できるようにもなります。

スキーマと XML スキーマ とは別個のものなので混同しないでください。後者は、XML 文書の構造を記述し、その内容を妥当性検査するための標準です。

表、ビュー、ニックネーム、トリガー、関数、パッケージ、および他のオブジェクトをスキーマに入れることができます。 スキーマ自体が 1 つのデータベース・オブジェクトです。 現行ユーザーを指定するか、またはスキーマ所有者と記録された指定の許可 ID を指定した CREATE SCHEMA ステートメントを使用して、スキーマは明示的に作成されます。 また、ユーザーが IMPLICIT_SCHEMA 権限を持っている場合には、他のオブジェクトを作成する際に暗黙的に作成することもできます。

スキーマ名 は、 2 つの部分から成るオブジェクト名の高位の部分として使用されます。 オブジェクトを作成する際にスキーマを使用して固有に修飾すると、オブジェクトはこのスキーマに割り当てられます。 オブジェクトを作成する際にスキーマ名を指定しないと、 デフォルトのスキーマ名 (CURRENT SCHEMA 特殊レジスターで指定されたもの) が使用されます。

例えば、DBADM 権限を有するユーザーが、ユーザー A に対して C と呼ばれるスキーマを作成するとします。
   CREATE SCHEMA C AUTHORIZATION A
次にユーザー A は、以下のステートメントを出して、 スキーマ C 内に X という名前の表を作成することができます (ただし、 ユーザー A が CREATETAB データベース権限をもつことを前提とします)。
   CREATE TABLE C.X (COL1 INT)

予約済みのスキーマ名があります。 例えば、組み込み関数は SYSIBM スキーマに属し、 プリインストールされたユーザー定義関数は SYSFUN スキーマに属します。

データベースが作成される場合に、それが RESTRICTIVE オプションを使用して作成されるのではない場合は、すべてのユーザーが IMPLICIT_SCHEMA 権限を持ちます。 この権限を使用して、ユーザーは、まだ存在していないスキーマ名を持つオブジェクトを作成するときに、常に暗黙にスキーマを作成します。 スキーマが暗黙的に作成されるときは、CREATEIN 特権が付与されます。この特権により、どのようなユーザーも、そのスキーマに他のオブジェクトを作成することができます。別名、特殊タイプ、関数、およびトリガーなどのオブジェクトの作成能力は、暗黙的に作成されるスキーマにまで拡張されます。 暗黙的に作成されるスキーマについてのデフォルトの特権には、旧バージョンとの後方互換性があります。

IMPLICIT_SCHEMA 権限が PUBLIC から取り消される場合、スキーマは、 CREATE SCHEMA ステートメントを使用して明示的に作成されるか、 または IMPLICIT_SCHEMA 権限が与えられているユーザー (例えば、 DBADM 権限のあるユーザー) によって暗黙的に作成されます。 PUBLIC から IMPLICIT_SCHEMA 権限を取り消すことは、スキーマ名の使用に対する制御が増す一方で、 既存のアプリケーションがオブジェクトの作成を試みる時に許可エラーが生じる可能性があります。

スキーマには特権もあるので、スキーマ所有者がその特権を使用すれば、どのようなユーザーがスキーマ中のオブジェクトを作成、変更、コピー、およびドロップする権限をもつかを制御することができます。 これにより、データベース内にあるオブジェクトのサブセットの操作を制御できます。 当初、スキーマの所有者にはスキーマに関するこれらのすべての特権が与えられ、 それらの特権を他のユーザーに付与することもできます。 暗黙的に作成されたスキーマはシステムによって所有され、 当初、そのようなスキーマにオブジェクトを作成する権限がすべてのユーザーに与えられます。ACCESSCTRL または SECADM 権限を有するユーザーは、 任意のスキーマでユーザーが保持する特権を変更することができます。 したがって、任意のスキーマ (暗黙的に作成されたスキーマであっても) のオブジェクトを作成、変更、コピー、およびドロップするためのアクセスを制御することができます。