権限、特権、およびオブジェクト所有権

ユーザーは (権限 ID によって識別され) 指定した機能を行う権限がある場合にのみ、 SQL ステートメントを正しく実行することができます。 表を作成するには、表を作成する権限が必要であり、 表を除去するには、表を除去する権限が必要であるという具合です。

許可には、管理権限と特権の 2 つの形式があります。

管理権限

管理権限の所有者は、 リレーショナル・データベースを管理する作業を担当し、データの安全と保全性について責任を負います。
データベース管理者権限
データベース管理者権限は、 リレーショナル・データベース内のすべてのオブジェクトの作成と管理を行う 能力をユーザーに付与します。データベース管理者権限の保有者は、 リレーショナル・データベース内のすべてのオブジェクトに対して暗黙的にすべての特権を持ちます。

セキュリティー担当者、および *ALLOBJ 権限を持つすべてのユーザーは、データベース管理者権限を持っています。

セキュリティー管理者権限
セキュリティー管理者権限は、 リレーショナル・データベースのセキュリティーを管理する能力をユーザーに付与します。セキュリティー管理者権限の保有者 は、リレーショナル・データベースのすべての特権および権限の認可と取り消し、およびオブジェクトの所有権移動を 行う能力を持ちます。セキュリティー管理者権限の保有者は、機密データを含む表の行および列のアクセス制御を実施することにより、セキュリティー・ポリシーも管理します。

セキュリティー管理者権限には、 表に保管されたデータにアクセスするための特権は包含されません。

QIBM_DB_SECADM 機能使用を 持つユーザーはセキュリティー管理者権限を保有します。

特権

特権 とは、 ユーザーが実行することを許可されているアクティビティーのことです。 権限を持つユーザーは、任意のオブジェクトを作成し、 ユーザー自身が所有するオブジェクトにアクセスし、また GRANT ステートメントを使用して、 そのユーザー自身が所有するオブジェクトに関する特権 を他のユーザーに与えることができます。

特権は、特定のユーザーまたは PUBLIC に対して認可することができます。 PUBLIC を指定すると、特権はユーザー (権限 ID) の集合に対して認可されます。 この集合は、該当の表またはビューに対して私的に認可された特権を持っていないユーザー (後で追加されるユーザーも含む) で構成されます。 このことは、私的な認可に影響します。 例えば、SELECT が PUBLIC に認可されている場合に、 UPDATE が HERNANDZ に認可されると、この私的な認可により、 HERNANDZ は SELECT 特権を持つのを妨げられます。

REVOKE ステートメントを使用して、 以前に与えた特権 を取り消すことができます。 1 つの権限 ID からある特権を取り消すと、 すべての権限 ID によって認可されているその特権は取り消されます。 ある権限 ID からある特権を取り消したとき、 その権限 ID によって同じ特権が他の権限 ID に対して認可されているとしても、 その特権がそれらの他の権限 ID から取り消されることはありません。

行の許可および列マスク

行の許可 は、特定の表の行のアクセス制御ルールを 表します。行の許可は、ユーザーがいずれの行に対してアクセス権限を持つのかを記述する検索条件の形式をしています。行の許可は、表特権 (SELECT や INSERT など) を検査した後で適用されます。

列マスク は、 表の特定の列のアクセス制御ルールを表します。列マスクは、ユーザーがいずれの列値に対してアクセス権限を持つのかを記述する CASE 式の形式をしています。列マスクは、表特権 (SELECT や INSERT など) を検査した後で適用されます。

データベース・セキュリティー管理者権限の保有者のみが、 CREATE MASK、CREATE PERMISSION、ALTER MASK、ALTER PERMISSION、 および DROP ステートメントを使用して、行の許可および列マスクを、作成、変更、および除去することができます。アクセス権またはマスクの定義では、他のオブジェクトを参照できます。データベース・セキュリティー管理者権限 の保有者は、それらのオブジェクトを参照するために、行の許可または列マスクの定義内に追加 の権限 (表からの取り出しのための SELECT 権限、ユーザー定義関数を呼び出すための EXECUTE 権限など) を 必要としません。単一の表に対して、複数の行の許可および列マスクを作成できます。 表内の各列に対して作成できる列マスクは 1 つのみです。行の許可や列マスクを 作成できるのは、行または列のアクセス制御が表に実施されるまでです。 行の許可および列マスクの定義は、DB2® カタログに保管されます。ただし、 このアクセス権およびマスクは、表に対して ACTIVATE ROW ACCESS CONTROL 文節を持つ ALTER TABLE ステートメントによって行のアクセス制御が実施されるか、ACTIVATE COLUMN ACCESS CONTROL 文節を持つ ALTER TABLE ステートメントによって列のアクセス制御が実施されて初めて有効になります。

ALTER TABLE ステートメントを使用して、表の行アクセス制御を明示的に活動化すると、表に対するアクセスをすべて防止する、表のデフォルトの行の許可が暗黙で作成されます。表に対する行アクセス制御が活動化された後で、この表がデータ変更ステートメントで明示的に参照されており、この表に対して複数の行の許可が定義されている場合は、定義されている各行の許可の検索条件で論理 OR 演算子を使用して、行アクセス制御検索条件が派生されます。

ALTER TABLE ステートメントを使用して、表の列アクセス制御を明示的に活動化した場合に、表に対するアクセスは制限されません。ただし、SQL ステートメントでこの表が参照されている場合は、この表に対して作成されているすべての列マスクを適用して、照会の出力で参照されている列値をマスクしたり、データ変更ステートメントで使用される列値が決定されたりします。

行の許可または列マスクが適用されている表を参照する SQL ステートメントの権限 ID は、それらの行の許可または列マスクの定義内で指定されているオブジェクトを参照する権限を必要としません。

所有権

オブジェクトを作成するときには、ステートメントの権限 ID に、 指定したスキーマ内で暗黙的にまたは明示的にオブジェクトを作成する特権が必要です。 以下のいずれかの場合に、ステートメントの権限 ID はスキーマ内でオブジェクトを作成する特権を持ちます。

  • スキーマの所有者である。
  • スキーマに対する *OBJOPR、*EXECUTE、*ADD を持っている。

オブジェクトを作成すると、1 つの権限 ID にそのオブジェクトの所有権 が割り当てられます。所有権を持つユーザーは、オブジェクトを完全に管理することができます (オブジェクトを除去する特権も持ちます)。オブジェクトに対する特権は、 オブジェクトの所有者が付与することも、取り消すこともできます。 この場合、その所有者は、その特権を必要とする操作を一時的に行うことができなくなります。ただし、所有者なので、常に、その特権を自分自身に復権することができます。

オブジェクトを作成したときに、所有者は次のようになります。

  • SQL 名を指定した場合は、オブジェクトの所有者 は、 作成したオブジェクトが入れられるスキーマと同じ名前のユーザー・プロファイルが存在していれば、そのユーザー・プロファイルです。 その他の場合は、オブジェクトの所有者 は、この ステートメントを実行しているスレッドのユーザー・プロファイルまたは グループ・ユーザー・プロファイルです。
  • システム名を指定した場合は、オブジェクトの所有者 は、この ステートメントを実行しているスレッドのユーザー・プロファイルまたはグループ・ユーザー・プロファイルです。

SQL オブジェクトの *PUBLIC に認可される権限は、オブジェクトを作成した時に使用した命名規則に依存します。 *SYS 命名規則を使用している場合には、*PUBLIC はそのオブジェクトが作成 されたライブラリーの作成権限 ((CRTAUT)) を獲得します。 *SQL 命名規則を使用した場合は、*PUBLIC は *EXCLUDE 権限を獲得します。

本書の権限の項では、オブジェクトの所有者が、その作成以降にオブジェクトからどのような特権も取り消していないことを前提にしています。 オブジェクトがビューの場合には、そのビューの所有者が、直接、または間接に従属する表やビューからシステム権限の *READ を取り消していないことを前提にしています。 所有者は、そのビューの定義で参照されている表やビューのすべてに対してシステム権限の *READ を持ち、またあるビューが参照されている場合には、そのビューの定義で参照されている表やビューのすべてに対してシステム権限の *READ を持ちます。以下同様です。 権限および特権について詳しくは、「機密保護解説書」を参照してください。