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

ユーザー (許可 ID で識別される) は、指定された関数を実行する権限を持っている場合にのみ、操作を正常に実行することができます。 表を作成するには、ユーザーに表作成の許可が必要であり、表を変更するには、表変更の許可が必要となります。その他も同様です。

データベース・マネージャーでは、 特定のタスクを実行するのに必要なデータベース機能を使用するために、 各ユーザーが特定の許可を与えられていなければなりません。 ユーザーは、自分のユーザー ID にその許可を付与してもらうか、あるいはその許可を付与されたロールまたはグループのメンバーになることにより、必要な許可を取得できます。

許可には、管理権限特権 および LBAC 信用証明情報 の 3 つの形式があります。 また、オブジェクトの所有権を持つ場合は、作成されるオブジェクトに対して一定の許可が提供されます。 そうした形式の許可について、次のセクションで取り上げます。

管理権限

管理権限のある担当者はいずれも、データベース・マネージャーを制御するタスクに携わり、データの安全と整合性に対する責任を持ちます。

システム・レベルの許可
システム・レベルの権限によって、インスタンス・レベルの機能を様々な度合いで制御できます。
  • SYSADM (システム管理者) 権限

    SYSADM (システム管理者) 権限は、データベース・マネージャーによって作成および保守されるすべてのリソースに対する制御を可能にします。 システム管理者は、SYSCTRL、SYSMAINT、および SYSMON 権限をすべて所有します。 SYSADM 権限を持つユーザーは、データベース・マネージャーの制御、 およびデータの保護と整合性を担当します。

  • SYSCTRL 権限

    SYSCTRL 権限は、 システム・リソースに影響を与える操作に対する制御を可能にします。 例えば、SYSCTRL 権限を持つユーザーは、 データベースの作成、更新、開始、停止、またはドロップを行うことができます。 さらに、このユーザーはインスタンスの開始または停止を行うことができますが、 表データへのアクセスはできません。 SYSCTRL 権限を持つユーザーには、SYSMAINT 権限と SYSMON 権限もあります。

  • SYSMAINT 権限

    SYSMAINT 権限は、 インスタンスに関連したすべてのデータベースに対する保守操作を実行するのに必要な権限を与えます。 SYSMAINT 権限を持つユーザーは、 データベースの更新と構成、データベースまたは表スペースのバックアップ、 既存のデータベースのリストア、およびデータベースのモニターを行うことができます。 SYSCTRL と同様に、SYSMAINT は表データへのアクセス権限を与えません。 SYSMAINT 権限を持つユーザーには、SYSMON 権限もまた与えられます。

  • SYSMON (システム・モニター) 権限

    SYSMON (システム・モニター) 権限は、データベース・システム・モニターの使用に必要な権限を与えます。

データベース・レベルの許可
データベース・レベルの権限により、データベース内における制御が行えます。
  • DBADM (データベース管理者)

    DBADM 権限レベルは、1 つのデータベースに対する管理権限を与えます。 このデータベース管理者は、オブジェクトの作成およびデータベース・コマンドの発行に必要な権限を所有します。

    DBADM 権限の付与は、SECADM 権限を持つユーザーのみが行えます。 DBADM 権限は、PUBLIC には付与できません。

  • SECADM (セキュリティー管理者)

    SECADM 権限レベルは、1 つのデータベースに対するセキュリティーの管理権限を与えます。 セキュリティー管理者権限は、データベース・セキュリティー・オブジェクト (データベースの役割、監査ポリシー、トラステッド・コンテキスト、セキュリティー・ラベル・コンポーネント、およびセキュリティー・ラベル) を管理したり、すべてのデータベース特権と権限の付与および取り消しを行ったりすることができます。 SECADM 権限を持つユーザーは、所有していないオブジェクトの所有権を移行することができます。 また、このようなユーザーは、AUDIT ステートメントを使用して、サーバー側の特定のデータベースまたはデータベース・オブジェクトに監査ポリシーを関連付けることもできます。

    SECADM 権限 には表に格納されたデータにアクセスする固有の特権はありません。 この権限の付与が行えるのは、SECADM 権限をもつユーザーだけとなります。 SECADM 権限は、PUBLIC には付与できません。

  • SQLADM (SQL 管理者)

    SQLADM 権限レベルには、単一のデータベース内の SQL ステートメントをモニターおよびチューニングする管理権限があります。 この権限の付与が行えるのは、ACCESSCTRL または SECADM 権限をもつユーザーです。

  • WLMADM (ワークロード管理の管理者)

    WLMADM 権限には、サービス・クラス、作業アクション・セット、作業クラス・セット、およびワークロードなどのワークロード管理オブジェクトを管理する管理権限があります。 この権限の付与が行えるのは、ACCESSCTRL または SECADM 権限をもつユーザーです。

  • EXPLAIN (Explain 権限)

    EXPLAIN 権限レベルには、データへのアクセス権を取得することなく、照会プランを Explain する管理権限があります。 この権限の付与が行えるのは、ACCESSCTRL または SECADM 権限をもつユーザーだけです。

  • ACCESSCTRL (データベース・アクセス制御権限)
    ACCESSCTRL 権限レベルには、以下の GRANT (および REVOKE) ステートメントを発行する管理権限があります。
    • GRANT (データベース権限)

      ACCESSCTRL 権限によって、その保有者が、ACCESSCTRL、DATAACCESS、DBADM、または SECADM 権限を付与できるようになるわけではありません。 SECADM 権限を持つユーザーだけが、これらの権限を付与できます。

    • GRANT (グローバル変数特権)
    • GRANT (索引特権)
    • GRANT (モジュール特権)
    • GRANT (パッケージ特権)
    • GRANT (ルーチン特権)
    • GRANT (スキーマ特権)
    • GRANT (シーケンス特権)
    • GRANT (Server Privileges)
    • GRANT (表、ビュー、またはニックネーム特権)
    • GRANT (表スペース特権)
    • GRANT (ワークロード特権)
    • GRANT (XSR オブジェクト特権)
    ACCESSCTRL 権限の付与は、SECADM 権限を持つユーザーのみが行えます。 ACCESSCTRL 権限は、PUBLIC には付与できません。
  • DATAACCESS (データベース・データ・アクセス権限)
    DATAACCESS 権限レベルには、以下の特権および権限があります。
    • LOAD 権限
    • 表、ビュー、ニックネーム、およびマテリアライズ照会表での SELECT、INSERT、UPDATE、DELETE 特権
    • パッケージに関する EXECUTE 特権
    • モジュールに関する EXECUTE 特権
    • ルーチンに関する EXECUTE 特権

      監査ルーチンの例外: AUDIT_ARCHIVE、AUDIT_LIST_LOGS、AUDIT_DELIM_EXTRACT。

    • すべてのグローバル変数に対する READ 特権、およびすべてのグローバル変数に対する WRITE 特権 (読み取り専用の変数を除く)
    • すべての XSR オブジェクトに対する USAGE 特権
    • すべてのシーケンスに対する USAGE 特権
    SECADM 権限を持つユーザーだけがこれを付与できます。 DATAACCESS 権限は、PUBLIC には付与できません。
  • データベース権限 (非管理用)

    表やルーチンの作成、表へのデータのロードなどのアクティビティーを実行するには、 特定のデータベース権限が必要です。 例えば、 load ユーティリティーを使用してデータを表にロードするには、LOAD データベース権限が必要です (ユーザーには、表にデータを挿入する特権も必要です)。

スキーマ・レベル権限
スキーマ・レベル権限は、スキーマに対する制御を提供します。 それらは、PUBLIC に付与することも、WITH GRANT OPTION と一緒に付与することもできません。
  • SCHEMAADM (スキーマ管理者)

    SCHEMADM 権限は、1 つのスキーマに対する管理権限を与えます。 スキーマ管理者には、スキーマ内のオブジェクトに対する作成および管理の権限があります。 暗黙的にスキーマ LOAD 権限を持ちます。

  • ACCESSCTRL (スキーマ・アクセス制御権限)

    スキーマ ACCESSCTRL 権限では、スキーマに定義されたオブジェクトに対するすべての特権を付与および取り消すことができます。 またスキーマ ACCESSCTRL 権限は、スキーマ ACCESSCTRL 自体を除く、スキーマに対するすべてのスキーマ・レベルの権限と特権を付与および取り消すこともできます。

  • DATAACCESS (スキーマ・データ・アクセス権限)

    スキーマ DATAACCESS 権限により、ユーザーはスキーマに存在するすべてのオブジェクトに対する読み取りおよび書き込みを行うことができます。 またこの権限により、ユーザーはシーケンスおよび xsrobject の参照、スキーマに定義されたルーチン、モジュール、およびパッケージの実行、および暗黙スキーマ LOAD 権限に対する許可が付与されます。

  • LOAD (スキーマ・ロード権限)

    スキーマ LOAD 権限により、ユーザーは LOAD ユーティリティーを使用してスキーマで定義された表にデータをロードすることができます (ユーザーは、表にデータを挿入する特権も必要です)。

特権

特権とは、アクションまたはタスクを実行する許可です。 許可ユーザーは、オブジェクトを作成することができ、所有しているオブジェクトにアクセス権を持ち、GRANT ステートメントを使用することによって、所有オブジェクトに対する特権を他のユーザーに渡すことができます。

特権は、個々のユーザー、グループ、または PUBLIC に付与できます。 PUBLIC は、将来のユーザーを含むすべてのユーザーで構成される特殊グループです。 グループのメンバーであるユーザーは、グループがサポートされている場合は、グループに付与された特権を間接的に利用できます。

CONTROL 特権: オブジェクトに対する CONTROL 特権を持っているユーザーは、 そのデータベース・オブジェクトにアクセスでき、 そのオブジェクトに対する他のユーザーの特権を付与または取り消すことができます。
注: CONTROL 特権は、表、ビュー、ニックネーム、索引、およびパッケージにのみ適用されます。

他のユーザーがそのオブジェクトに対する CONTROL 特権を要求した場合、 SECADM または ACCESSCTRL 権限を持つユーザーが、 そのオブジェクトに対する CONTROL 特権を付与することができます。 CONTROL 特権は、オブジェクト所有者から取り消されることがありませんが、オブジェクト所有者は、TRANSFER OWNERSHIP ステートメントを使用して変更される場合があります。

個別特権: ユーザーが特定オブジェクトに対して特定のタスクを実行できるようにするために、個別特権を与えることができます。 管理権限 ACCESSCTRL または SECADM、あるいは CONTROL 特権を持つユーザーは、ユーザーに特権を付与したり、ユーザーから特権を取り消したりできます。

個別特権およびデータベース権限は特定の機能の実行を許可しますが、 同じ特権または権限を他のユーザーに与えることはできません。 GRANT ステートメントで WITH GRANT OPTION を使用すれば、 表、ビュー、スキーマ、パッケージ、ルーチン、 シーケンスに関する特権を他のユーザーに対して GRANT できる権利を、 他のユーザーに拡張して与えることができます。 ただし、WITH GRANT OPTION を使用する場合、 特権を GRANT する人が、いったん GRANT された特権を取り消すことはできません。 特権を取り消すためには、SECADM 権限、ACCESSCTRL 権限、 または CONTROL 特権を持っていなければなりません。

パッケージまたはルーチン内のオブジェクトに対する特権: ユーザーにパッケージまたはルーチンを実行する特権があると、パッケージまたはルーチン内で使用されるオブジェクトに対する特定の特権が必ずしも必要とされません。 パッケージまたはルーチンに静的 SQL または XQuery ステートメントが含まれる場合、パッケージの所有者の特権がそれらのステートメントに使用されます。 パッケージまたはルーチンに動的 SQL または XQuery ステートメントが含まれる場合、特権の検査に使用される許可 ID は、動的照会ステートメントを発行するパッケージの DYNAMICRULES BIND オプションの設定と、パッケージがルーチンのコンテキストで使用される際にそれらのステートメントが発行されるかどうかによって異なります (監査ルーチンでの例外: AUDIT_ARCHIVE、AUDIT_LIST_LOGS、AUDIT_DELIM_EXTRACT)。

1 つのユーザーまたはグループに対して、 個々の特権または権限をいくつか組み合わせて許可することもできます。 特権をオブジェクトに関連付ける場合、 そのオブジェクトはすでに存在していなければなりません。 例えば、表がそれ以前に作成されているのでなければ、 その表についての SELECT 特権をユーザーに与えることはできません。

注: ユーザーまたはグループを表す許可名に権限および特権が付与され、その名前で作成されたユーザーまたはグループが存在しない場合は、注意が必要です。 後で、その許可名を使用してユーザーまたはグループが作成され、その許可名に関連するすべての権限と特権を自動的に受け取る可能性があります。

すでに付与された特権を取り消すには、REVOKE ステートメントを使用します。 1 つの許可名から特権を取り消すと、 すべての許可名によって付与された特権が取り消されます。

ある許可名から特権を取り消しても、 その許可名によって特権を付与された他の許可名からその同じ特権が取り消されることはありません。 例えば、ユーザー CLAIRE が SELECT WITH GRANT OPTION をユーザー RICK に与えた後、 RICK が SELECT を BOBBY および CHRIS に与えたとします。 もし CLAIRE が SELECT 特権を RICK から取り消しても、 BOBBY と CHRIS は引き続き SELECT 特権を保持します。

LBAC 信用証明情報

セキュリティー管理者は、ラベル・ベースのアクセス制御 (LBAC) を使用して、個々の行および個々の列ごとに、どのユーザーに書き込みアクセスがあり、どのユーザーに読み取りアクセスがあるのかを厳密に決定することができます。 セキュリティー管理者は、セキュリティー・ポリシーを作成して LBAC システムを構成します。 セキュリティー・ポリシー では、どのデータに誰がアクセスできるかの決定で使用される基準が記述されます。 任意の 1 つの表を保護するために 1 つのセキュリティー・ポリシーしか使用できませんが、複数のセキュリティー・ポリシーを使用して複数の表を保護することができます。

セキュリティー・ポリシーを作成した後、セキュリティー管理者は、そのポリシーの一部分となる、セキュリティー・ラベルおよび免除と呼ばれるデータベース・オブジェクトを作成します。 セキュリティー・ラベルは一連のセキュリティー基準を表現したものとなります。 免除は、作成したセキュリティー・ポリシーで保護されたデータにアクセスする場合に、これを保有するユーザーがセキュリティー・ラベルの比較について、定められた規則を免れることができるものとなります。

作成が完了すると、セキュリティー・ラベルを表の個々の列と行に関連付けてそこに保持されているデータを保護することができます。 セキュリティー・ラベルにより保護されるデータは、保護データと呼ばれます。 セキュリティー管理者は、ユーザーにセキュリティー・ラベルを付与することにより、保護データへのアクセスを許可します。 ユーザーが保護データへのアクセスを試行すると、そのユーザーのセキュリティー・ラベルが、データを保護しているセキュリティー・ラベルと比較されます。 セキュリティー・ラベルには、保護ラベルによってブロックされるものと、されないものがあります。

オブジェクト所有権

オブジェクトが作成されるとき、1 つの許可 ID に対して、 そのオブジェクトの所有権 が割り当てられます。 所有権を付与されるユーザーには、適用可能な任意の SQL または XQuery ステートメントでそのオブジェクトを参照する許可が与えられます。

スキーマ内でオブジェクトを作成するとき、ステートメントの許可 ID は、 暗黙的または明示的に指定されるスキーマ内でオブジェクトを作成するのに必要な特権を持っていなければなりません。 つまり、許可名がスキーマの所有者であるか、 スキーマに対する CREATEIN 特権を持っている必要があります。
注: この要件は、表スペース、バッファー・プール、またはデータベース・パーティション・グループの作成時には適用されません。 これらのオブジェクトはスキーマ内には作成されません。
オブジェクトが作成されるとき、ステートメントの許可 ID がそのオブジェクトの定義者になり、オブジェクトの作成後にデフォルトでオブジェクトの所有者になります。
注: 1 つの例外が存在します。 CREATE SCHEMA ステートメントで AUTHORIZATION オプションを指定した場合、 CREATE SCHEMA 操作の一部として作成されるすべてのオブジェクトは、 AUTHORIZATION オプションが指定する許可 ID によって所有されます。 ただし、最初の CREATE SCHEMA 操作の後でスキーマ内で作成されるすべてのオブジェクトは、 特定の CREATE ステートメントに関連した許可 ID によって所有されます。

例えば、 CREATE SCHEMA SCOTTSTUFF AUTHORIZATION SCOTT CREATE TABLE T1 (C1 INT) というステートメントは、SCOTT が所有するスキーマ SCOTTSTUFF と表 SCOTTSTUFF.T1を作成します。 ここで、ユーザー BOBBY に対して SCOTTSTUFF スキーマに対する CREATEIN 特権が与えられ、 BOBBY が表 SCOTTSTUFF.T1 への索引を作成するとします。 索引はスキーマの後で作成されるため、 SCOTTSTUFF.T1 への索引を所有するのは BOBBY です。

特権は、作成されるオブジェクトのタイプに応じて、 以下のようにオブジェクト所有者に割り当てられます。
  • CONTROL 特権は、新しく作成される表、索引、 およびパッケージに対して暗黙的に付与されます。 この特権を持つオブジェクト作成者は、 そのデータベース・オブジェクトにアクセスでき、 そのオブジェクトに対する他のユーザーの特権を付与または取り消すことができます。 他のユーザーがそのオブジェクトに対する CONTROL 特権を要求した場合、 ACCESSCTRL または SECADM 権限を持つユーザーが、 そのオブジェクトに対する CONTROL 特権を付与する必要があります。 オブジェクト所有者は、CONTROL 特権を取り消すことができません。
  • ビュー定義によって参照されるすべての表、ビュー、 およびニックネームに対する CONTROL 特権をオブジェクト所有者が持っている場合、 新しく作成されるビューに対して CONTROL 特権が暗黙的に付与されます。
  • 他のオブジェクト (トリガー、ルーチン、シーケンス、 表スペース、バッファー・プールなど) には、 CONTROL 特権が関連付けられません。 ただし、オブジェクト所有者は、オブジェクトに関連付けられるそれぞれの特権を自動的に受け取ります。サポートされている場合、それらの特権には WITH GRANT OPTION が付いています。 そのため、オブジェクト所有者は GRANT ステートメントを使用して他のユーザーにこれらの特権を提供できます。 例えば、USER1 が表スペースを作成する場合、USER1 はこの表スペースに関する WITH GRANT OPTION 付きの USEAUTH 特権を自動的に持ち、他のユーザーに対して USEAUTH 特権を付与できます。 また、オブジェクト所有者は、オブジェクトの変更、コメントの追加、 およびオブジェクトのドロップを行うことができます。 これらの許可はオブジェクト所有者に暗黙的に与えられ、 取り消すことはできません。

表の変更など、オブジェクトに対する特定の特権は、所有者によって付与できます。 また ACCESSCTRL または SECADM 権限を持つユーザーによって所有者から取り消せます。 表にコメントする など、オブジェクトに対する特定の特権は、所有者によって付与できません。 また所有者から取り消せません。 TRANSFER OWNERSHIP ステートメントを使用して これらの特権を別のユーザーに移動します。 オブジェクトが作成されるとき、ステートメントの許可 ID がそのオブジェクトの定義者になり、オブジェクトの作成後にデフォルトでオブジェクトの所有者になります。 ただし、BIND コマンドを使用してパッケージを作成し、OWNER authorization id オプションを指定する場合、パッケージ内の静的 SQL ステートメントによって作成されるオブジェクトの所有者は、authorization id の値です。 さらに、AUTHORIZATION 節が CREATE SCHEMA ステートメントに指定される場合、AUTHORIZATION キーワードの後に指定される許可名はスキーマの所有者です。

セキュリティー管理者またはオブジェクト所有者は、TRANSFER OWNERSHIP ステートメントを使用してデータベース・オブジェクトの所有権を変更することができます。 そこで、許可 ID を修飾子として使用してオブジェクトを作成してから TRANSFER OWNERSHIP ステートメント を使用して管理者オブジェクトに持つ所有権を許可 ID に移動することで、管理者は 許可 ID のためにオブジェクトを作成できます。