3 アクセス制御および権限

Oracleでは、ユーザーがラベル付きの行に対して持つことのできるアクセス権のタイプを決定するアクセス制御および権限が提供されています。

3.1 アクセス調整

Oracle Label Securityポリシーで保護されているデータにユーザーがアクセスするには、そのポリシーに定義されているラベルに基づく認可が必要です。

次の図は、ユーザー、データおよびラベルの間の関係を示しています。

  • データ・ラベルでは、データ行の機密性が指定されます。

  • ユーザー・ラベルは、ユーザーに適切な認可を付与します。

  • ユーザーとデータ行とのアクセス調整は、ユーザーのラベルに依存します。

図3-1 ユーザー、データおよびラベルの間の関係

図3-1の説明が続きます
「図3-1 ユーザー、データおよびラベルの間の関係」の説明

ノート:

Oracle Label Securityの施行オプションは、表およびスキーマに対するアクセス制御の適用方法に影響します。この章では、すべてのポリシー施行オプションが有効になっているものとします。

3.2 セッション・ラベルおよび行ラベルの動作

セッション・ラベルおよび行ラベルについて理解しておくことが重要です。

3.2.1 セッション・ラベル

Oracle Label Securityの各ユーザーには、特殊なコンポーネントを含む認可が付与されています。

  • 最大レベルと最小レベル

  • 認可された区分のセット

  • 認可されたグループのセット

  • 区分およびグループごとの、読取り専用アクセスまたは読取り/書込みアクセスの指定

管理者はユーザーに対してこれらの認可を設定するときに、そのユーザーの初期セッション・ラベルも指定します。セッション・ラベルは、ユーザーが任意の時点で作業する、レベル、区分およびグループの特定の組合せです。ユーザーは、認可されているコンポーネントを任意に組み合せてセッション・ラベルを変更できます。

3.2.2 行ラベル

ユーザーがラベルを指定せずにデータを書き込む場合、ユーザーのセッション・ラベルを使用して行ラベルが自動的に割り当てられます。

ただし、ユーザーは書き込んだ行のラベルを、指定したラベルのコンポーネントに関する特定の制限の範囲内で設定できます。このラベルのレベルは、管理者が指定した範囲内で任意に設定できます。たとえば、ユーザーの現行のセッション・ラベルのレベルから最小レベルの間に設定できます。ただし、この行の新規ラベルの区分とグループは、さらに制限されます。新規ラベルに含めることができるのは、現行のセッション・ラベルに含まれていて、ユーザーが書込みアクセス権を持っている区分とグループのみです。

管理者はユーザー認証を設定するときに、初期のデフォルト行ラベルも指定します。

3.2.3 セッション・ラベルの例

セッション・ラベルと行ラベルは、ユーザーのレベル、区分およびグループの認可の範囲内でどこにでも置くことができます。

次の図では、ユーザーの最大レベルはSENSITIVE、最小レベルはUNCLASSIFIEDです。ただし、ユーザーのデフォルトのセッション・ラベルはC:FIN,OP:WRです。この例では、管理者は、ユーザーがCONFIDENTIALレベルでデータベースに接続するように、そのセッション・ラベルを設定しています。

同様に、ユーザーは区分FINおよびOPとグループWRに対して認可されていても、管理者はそのユーザーが区分FINとグループWRにのみ接続するように、セッション・ラベルを設定できます。

図3-2 ユーザー・セッション・ラベル

図3-2の説明が続きます
「図3-2 ユーザー・セッション・ラベル」の説明

3.3 ユーザー認可の動作

Oracle Label Securityには、Oracle Label Security管理者が設定する認可と、計算されたセッション・ラベルにより設定される認可があります。

3.3.1 管理者が設定する認可

管理者が、レベル、区分およびグループに関する認可を明示的に設定します。

3.3.1.1 認可レベル

管理者が、Oracle Label Securityポリシーに関するレベル認可を明示的に設定します。

表3-1に、管理者が設定できる認可レベルを示します。

表3-1 管理者が設定する認可レベル

認可 意味

最大レベル

ユーザーが読取りおよび書込み操作中にアクセスできる機密性の最大ランキング。

最小レベル

ユーザーが書込み操作中にアクセスできる機密性の最小ランキング。最大レベルは最小レベル以上に設定する必要があります。

デフォルト・レベル

Oracle Databaseへの接続時にデフォルトで想定されるレベル

デフォルト行レベル

Oracle Databaseへのデータの挿入時にデフォルトで使用されるレベル

たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可レベルを設定します。

タイプ 短縮名 詳細名 説明

最大値

HS

HIGHLY_SENSITIVE

ユーザーの最上位レベル

最小値

P

PUBLIC

ユーザーの最下位レベル

デフォルト

C

CONFIDENTIAL

ユーザーのデフォルト・レベル

C

CONFIDENTIAL

INSERTの行レベル

3.3.1.2 認可区分

管理者は、ユーザーがセッション・ラベルに配置できる区分のリストを指定します。

管理者は、区分ごとに、ユーザーに書込みアクセス権を明示的に付与する必要があります。ユーザーは、書込み認可を持たない区分を含む行を直接挿入、更新または削除できません。

たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可区分を設定します。

短縮名 詳細名 書込み デフォルト

CHEM

CHEMICAL

あり

あり

なし

FINCL

FINANCIAL

あり

あり

なし

OP

OPERATIONAL

あり

あり

あり

図3-3では、行指定は、新規に挿入するデータのデフォルト行ラベルの一部として区分を使用する必要があるかどうかを示します。この設定を有効にするには、ポリシー・オプションも有効にする必要があることに注意してください。

図3-3 Enterprise Managerでの認可区分の設定

図3-3の説明が続きます
「図3-3 Enterprise Managerでの認可区分の設定」の説明
3.3.1.3 認可グループ

ユーザーがセッション・ラベルに配置できるグループのリストを指定し、各グループの書込みアクセス権を付与する必要があります。

たとえば、Oracle Enterprise Managerでは、管理者は次の認可グループを設定します。

短縮名 詳細名 書込み デフォルト

WR_HR

WR_HUMAN_RESOURCES

あり

あり

あり

WR

WR_AP

WR_ACCOUNTS_PAYABLE

あり

あり

なし

WR_FIN

WR_AR

WR_ACCOUNTS_RECEIVABLE

あり

あり

なし

WR_FIN

図3-4では、行指定は、新規に挿入するデータのデフォルト行ラベルの一部としてグループを使用する必要があるかどうかを示します。この設定を有効にするには、LABEL_DEFAULTポリシー・オプションも有効にする必要があることに注意してください。

図3-4 Enterprise Managerでの認可グループの設定

図3-4の説明が続きます
「図3-4 Enterprise Managerでの認可グループの設定」の説明

3.3.2 計算されるセッション・ラベル

Oracle Label Securityでは、多数のラベルがセッション・ラベルの値に基づいて自動的に計算されます。

表3-2に、計算されるセッション・ラベルを示します。

表3-2 計算されるセッション・ラベル

計算されるラベル 定義

最大読取りラベル

ユーザーが認可されている区分とグループを組み合せた最大レベル。

最大書込みラベル

ユーザーが書込みアクセス権を付与されている区分とグループを組み合せた最大レベル。

最小書込みラベル

ユーザーの最小レベル。

デフォルト読取りラベル

ユーザーのデフォルトとして指定された区分とグループを組み合せた単一のデフォルト・レベル。

デフォルト書込みラベル

ユーザーが書込みアクセス権を付与されている区分とグループを含む、デフォルト読取りラベルのサブセット。レベル・コンポーネントは、読取りラベルのデフォルト・レベルと同じです。このラベルは、ユーザーの書込み認可に基づいて読取りラベルから自動的に導出されます。

デフォルト行ラベル

挿入されるデータのデータ・ラベルのデフォルト値として指定されている、ユーザーの最小書込みラベルと最大書込みラベル間のコンポーネントの組合せ。

3.4 アクセス調整のためのラベルの評価

Oracle Label Securityは、ユーザーのラベル・コンポーネントと行のラベル・コンポーネントを比較することにより、ラベルを評価します。

Oracle Label Securityポリシーは、このようにして、ユーザーがデータにアクセスできるかどうかを決定できます。これにより、Oracle Label Securityは、ユーザーが行のデータに対して要求した操作を実行することを認可されているかどうかを評価できます。

3.4.1 読取りアクセスと書込みアクセスについて

データ・ラベルはデータ・レコードの列に格納されますが、ユーザー認証に関する情報はリレーショナル表に格納されます。

ユーザーがログオンすると、表を使用して、セッション中に使用するユーザー・ラベルが動的に生成されます。

3.4.1.1 読取り操作と書込み操作の違い

保護された表の中では、データ操作言語(DML)操作に関して、読取りアクセスと書込みアクセスという2つの基本的なタイプのアクセス調整が存在します。

ユーザーは、読み取ることができるデータについての最大認可を持ち、ユーザーの書込み認可はそのサブセットです。最小書込みレベルにより、ユーザーが機密性を下げてデータを送信できるかどうかが制御されます。ユーザーは、管理者から各自に割り当てられた最小レベルより低いレベルのデータは書き込めません。

また、ユーザーが認可されている(つまり、ユーザーが少なくとも読取りアクセス権を持つ)区分とグループのリストが個別にあります。アクセス・フラグは、ユーザーが個々の区分またはグループに書き込むこともできるかどうかを示します。

3.4.1.2 グループに対する読取り/書込み認可の伝播

グループが階層形式で編成されている場合、ユーザーに割り当てられるグループには、そのユーザーが属しているグループに従属するすべてのサブグループが含まれます。

この場合、親グループに対するユーザーの読取り/書込み認可は、すべてのサブグループに伝播します。

図3-5のように、3つのサブグループを持つ親グループWESTERN_REGIONを考えます。ユーザーがWESTERN_REGIONへの読取りアクセス権を持っている場合は、3つのサブグループへの読取りアクセス権も付与されていることになります。管理者は、ユーザーにWESTERN_REGION親グループ(または他のサブグループ)への書込みアクセス権を付与せずに、サブグループWR_FINANCEへの書込みアクセス権を付与できます。これに対して、ユーザーがWESTERN_REGIONへの読取り/書込みアクセス権を持っている場合は、ツリー上でこのグループより下位にあるすべてのサブグループへの読取り/書込みアクセス権も付与されていることになります。

グループに対する書込み認可があっても、親グループに対する書込み認可が与えられるわけではありません。ユーザーがWESTERN_REGIONおよびWR_FINANCEへの読取り専用アクセス権を持っている場合に、管理者はそのユーザーが持っている上位レベルのグループへの読取り専用アクセス権に影響を与えずに、WR_ACCOUNTS_RECEIVABLEへの書込みアクセス権を付与できます。

図3-5 サブグループによる読取り/書込みアクセス権の継承

図3-5の説明が続きます
「図3-5 サブグループによる読取り/書込みアクセス権の継承」の説明

3.4.2 Oracle Label Securityの読取りアクセス・アルゴリズムの動作

READ_CONTROLの強制により、行のデータを読み取ることができるかどうかが判断されます。

次のルールが順番に使用され、データ行に対するユーザーの読取りアクセス権が判断されます。

  1. ユーザーのレベルは、データのレベル以上であることが必要です。

  2. ユーザーのラベルには、データに属する少なくとも1つのグループ(またはそのようなサブグループの親グループ)が含まれている必要があります。

  3. ユーザーのラベルは、データに属するすべての区分を含んでいる必要があります。

ユーザーのラベルがこれらのテストにパスした場合、このユーザーのラベルは行のラベルを支配している、と表現されます。

レベルに連結した読取りまたは書込みアクセス権という概念はないことに注意してください。これは、管理者が指定したレベル範囲(最小から最大)内で、ユーザーが潜在的に読取りおよび書込み可能になるためです。ユーザーは、各自の現行セッション・レベル以下のすべてのデータを常に読み取ることができます。ユーザーに最小認可レベルを下回る書込みを許可する権限は(FULL以外には)ありません。

図3-6は、ラベル評価プロセスがレベル、グループ、区分の順に進行することを示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-6 読取りアクセス権のラベル評価プロセス

図3-6の説明が続きます
「図3-6 読取りアクセス権のラベル評価プロセス」の説明

Oracle Label Securityは読取りアクセス要求を受け取ると、各行を評価して次のことを判断します。

  1. ユーザーのレベルがデータのレベル以上かどうか

  2. データのレベル以上の場合、ユーザーはデータ・ラベルに示されたグループのうち1つ以上へのアクセス権を持っているかどうか

  3. 持っている場合、ユーザーはデータ・ラベルに示されたすべての区分へのアクセス権を持っているかどうか(つまり、データの区分がユーザーの区分のサブセットかどうか)

この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。

Oracle Label Securityポリシーは、ユーザー・セッションにラベル以下の行の読取りを許可します。これを下位読取りと呼びます。セッションでは、支配していないラベルの行を読み取ることはできません。

たとえば、SENSITIVE:ALPHA,BETAでログインすると、ラベルは行のラベルSENSITIVE:ALPHAを支配しているため、このラベルが付いた行を読み取ることができます。ただし、ラベルは行のラベルSENSITIVE:ALPHA,GAMMAを支配していないため、このラベルが付いた行を読み取ることはできません。

ユーザーが特殊なOracle Label Security権限を持っていると、他の場合には拒否される行へのアクセスを取得できることに注意してください。

3.4.3 Oracle Label Securityの書込みアクセス・アルゴリズムの動作

Oracle Label Securityのコンテキストでは、WRITE_CONTROLの強制により行データを挿入、更新または削除できるかどうかが決定されます。

WRITE_CONTROLにより、データへのアクセスをより細かい最小単位で制御できます。レベルに区分を追加すると最小単位は細かくなります。区分にグループを追加するとさらに細かくなります。アクセス制御は、ユーザーが読み取れるデータを書き込む権限を管理できれば、ファイングレイン・アクセス・コントロールとなります。

ユーザーが特定のデータ行を書き込むことができるかどうかを判断するために、Oracle Label Securityは次のルールを順番に評価します。

  1. データ・ラベル内のレベルは、ユーザーの最小レベル以上で、かつユーザーのセッション・レベル以下であることが必要です。

  2. グループが存在する場合、ユーザーのラベルには、データ・ラベルに表示される書込みアクセス権のある少なくとも1つのグループ(またはそのようなサブグループの親)が含まれている必要があります。また、ユーザーのラベルには、データ・ラベルにすべての区分が含まれている必要があります。

  3. グループが存在しない場合、ユーザーのラベルには、データ・ラベル内のすべての区分に対する書込みアクセス権が必要です。

テスト2および3は、次のように書き換えることができます。

  • ラベルにグループがない場合、ユーザーがデータに書き込むためには、ラベル内のすべての区分に対する書込みアクセス権が必要です。

  • ラベルにグループがあり、ユーザーがグループの1つに対する書込みアクセス権を持つ場合、データに書き込むには区分に対する読取りアクセス権のみ必要です。

読取り操作の場合と同様に、ラベル評価プロセスはレベル、グループ、区分の順に進行します。ユーザーは、最小認可レベルより下位にも、現行セッション・レベルより上位にも、データを書き込むことはできないことに注意してください。最小レベルより下位の読取りは常に可能です。

図3-7は、このプロセスによるINSERTUPDATEおよびDELETE操作の処理方法を示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-7 書込みアクセス権のラベル評価プロセス

図3-7の説明が続きます
「図3-7 書込みアクセス権のラベル評価プロセス」の説明

Oracle Label Securityはアクセス要求を受け取ると、各行を評価して次のことを判断します。

  1. データのレベルがユーザーのレベル以下かどうか

  2. データのレベルがユーザーの最小レベル以上かどうか

  3. データのレベルが上限以下の場合、ユーザーはデータ・ラベルに示された1つ以上のグループへの書込みアクセス権を持っているか

  4. 1つ以上のグループへのアクセス権を持っている場合、ユーザーはデータ・ラベルに示された、少なくとも読取りアクセス権付きのすべての区分へのアクセス権を持っているかどうか

  5. グループはないが、区分がある場合、ユーザーはすべての区分への書込みアクセス権を持っているかどうか

この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。

セッション・ラベルがS:ALPHA,BETAで、区分ALPHAへの書込みアクセス権のみを持っている場合を考えます。この場合、ラベルS:ALPHA,BETAが付いた行を読み取ることはできますが、更新はできません。

要約すると、書込みアクセス権は、行データのINSERTUPDATEおよびDELETE操作に対して強制されます。

また、各ユーザーには、書込みできる最小レベルを対応付けることができます。最小レベルより下位のレベルのラベルが付いた行の更新や削除も、最小レベルより下位のレベルを含む行ラベルが付いた行の挿入もできません。

3.5 Oracle Label Securityの権限

Oracle Label Securityでは、データベースおよび行のラベルの権限のセットが提供されています。

3.5.1 Oracle Label Securityのポリシーで定義される権限

Oracle Label Securityでは、認可されたユーザーに対してポリシーの特定部分をバイパスすることを許可する特殊な権限がサポートされます。

表3-3に、ユーザーまたはトラステッド・ストアド・プログラム・ユニットに付与できるすべての権限セットのサマリーを示します。各権限については、表の後に詳しく説明します。

表3-3 Oracle Label Securityの権限

セキュリティ権限 説明

READ

ポリシーで保護されている全データへの読取りアクセスを許可します。

FULL

ポリシーで保護されている全データへの完全な読取りおよび書込みアクセスを許可します。

COMPACCESS

行のグループから独立して、行の区分で認可されているデータへのセッション・アクセスを許可します。

PROFILE_ACCESS

セッションに対して、そのラベルと権限を別のユーザーのラベルおよび権限に変更することを許可します。

WRITEUP

ユーザーに対して、行ラベル内でそのユーザーが認可されている最大レベル以下のレベルのみの設定または引上げを許可します。(LABEL_UPDATEがアクティブな場合にのみアクティブです。)

WRITEDOWN

ユーザーに対して、行ラベル内でそのユーザーが認可されている最小レベル以上のレベルへの設定または引下げを許可します。(LABEL_UPDATEがアクティブな場合にのみアクティブです。)

WRITEACROSS

ユーザーに対して、行ラベルのグループと区分の設定または変更は許可し、レベルの変更は禁止します。(LABEL_UPDATEがアクティブな場合にのみアクティブです。)

3.5.2 特殊なアクセス権限

ユーザーの認証は、次の4つの権限のいずれかで変更できます。

3.5.2.1 READ権限

READ権限を持つユーザーは、認可またはセッション・ラベルに関係なく、ポリシーで保護されているすべてのデータを読み取ることができます。

ラベル認可がなくてもかまいません。

また、READ権限を持つユーザーは、ラベル認可に基づいて、書込みアクセス権を持つ任意のデータ行に書き込むことができます。

ノート:

UPDATEINSERTおよびDELETE操作に対しては、アクセス調整が適用されます。

この権限は、データ変更が許可されていないシステム管理者がデータをエクスポートする場合に便利です。また、データ変更を行わないユーザーがレポートを実行して情報をコンパイルする場合にも便利です。READ権限により、システムはOracle Label Securityポリシーが存在しないかのように動作するため、SELECT文のパフォーマンスが最適化されます。

3.5.2.2 FULL権限

FULL権限の効果とメリットはREAD権限と同じですが、1つ違いがあります。

FULL権限を持つユーザーは、すべてのデータに書き込むこともできます。FULL権限を持つユーザーの場合、READおよびWRITEのアルゴリズムは強制されません。

Oracleシステムおよびオブジェクトに対する認可が、FULL権限を付与されたユーザーに対して引き続き強制されます。たとえば、ユーザーがアプリケーション表に対するSELECTシステム権限を引き続き所有している必要があります。FULL認可では、個々の行レベルでのアクセス調整チェックがオフになります。

3.5.2.3 COMPACCESS権限

COMPACCESS権限により、ユーザーは行ラベルのグループとは無関係に、行ラベルの区分に基づいてデータにアクセスできます。

行ラベルに区分がない場合、アクセスはグループの認可により決定されます。ただし、区分が存在し、かつ、その区分へのアクセスが認可されていれば、グループの認可はバイパスされます。これにより、データの全区分と一致するラベルを持つ、権限を持ったユーザーは、所有グループが何かということによるデータ・アクセス許可とは関係なく、特定の区分内のデータにアクセスできます。

図3-8は、COMPACCESS権限を使用した読取りアクセスのラベル評価プロセスを示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-8 COMPACCESS権限を持つ読取りアクセスのラベル評価プロセス

図3-8の説明が続きます
「図3-8 COMPACCESS権限を持つ読取りアクセスのラベル評価プロセス」の説明

図3-9は、COMPACCESS権限を持つ書込みアクセスのラベル評価プロセスを示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。

図3-9 COMPACCESS権限を持つ書込みアクセスのラベル評価プロセス

図3-9の説明が続きます
「図3-9 COMPACCESS権限を持つ書込みアクセスのラベル評価プロセス」の説明
3.5.2.4 PROFILE_ACCESS権限

PROFILE_ACCESS権限により、セッションで、そのセッション・ラベルおよびセッション権限を他のユーザーのラベルおよび権限に変更することが可能になります。

ユーザーがFULL権限を持つユーザーになる可能性があるため、これはきわめて強力な権限です。この権限は、トラステッド・ストアド・プログラム・ユニットには付与できません。

3.5.3 特殊な行ラベル権限

行にラベルが設定されている場合、そのラベルを変更するにはOracle Label Securityの権限が必要です。

これらのラベル変更権限を強制するには、LABEL_UPDATE強制オプションをオンにする必要があることに注意してください。ユーザーが行ラベルを更新すると、新旧のラベルが比較され、必要な権限が判断されます。

特殊な行ラベル権限は次のとおりです。

3.5.3.1 WRITEUP権限

WRITEUP権限により、ユーザーは区分やグループを損なわずに行のデータ・レベルを引き上げることができます。

この権限を使用すると、ユーザーは自分の最大認可レベルにまで引き上げることができます。ユーザーが持っている権限は、ALL_SA_USER_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。

たとえば、認可されたユーザーは、各自の最小レベルより下位のレベルを持つデータ行のレベルを引き上げることができます。行がUNCLASSIFIEDでユーザーの最大レベルがSENSITIVEであれば、その行のレベルをSENSITIVEに引き上げることができます。現行セッション・レベルより上位に引き上げることはできますが、区分は変更できません。

3.5.3.2 WRITEDOWN権限

WRITEDOWN権限により、ユーザーは区分やグループを損なわずに行のデータ・レベルを引き下げることができます。

ユーザーの最小認可レベル以上のレベルであれば、どのレベルにでも引き下げることができます。ユーザーに付与されている権限は、ALL_SA_USER_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。

3.5.3.3 WRITEACROSS権限

WRITEACROSS権限により、ユーザーは機密性レベルを変更せずにデータの区分およびグループを変更できます。

これにより、たとえばSENSITIVEデータはSENSITIVEレベルにしたままで、データの送信を管理できることが保証されます。

これにより、ユーザーはレベルを変更せずに、区分とグループを、ポリシー内で有効として現在定義されている他の区分またはグループに変更できます。WRITEACROSS権限があれば、1つ(以上)のグループへの読取りアクセス権を持つユーザーは、アクセス権を明示的に付与されていなくても、別のグループに書き込むことができます。

ユーザーに付与されている権限は、ALL_SA_USER_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。

3.5.4 システム権限、オブジェクト権限およびポリシー権限

Oracle Label Security権限は、標準のOracle Databaseシステムおよびオブジェクト権限とは異なります。

表3-4 権限のタイプ

ソース 権限 定義

Oracle Database

システム権限

特定タイプのSQL文を実行する権限

Oracle Database

オブジェクト権限

別のユーザーのオブジェクトにアクセスする権限

Oracle Label Security

ポリシー権限

Label Securityポリシーの特定部分をバイパスする権限

Oracle Databaseは、ユーザーに付与された任意アクセス制御権限を強制します。デフォルトでは、ユーザーはPUBLICユーザー・グループに付与される権限のみを持ちます。ユーザーが操作を実行するには、該当する権限を明示的に付与される必要があります。

たとえば、Oracle Databaseでオブジェクトを読み取るには、そのオブジェクトの所有者であるか、オブジェクトに対するSELECT権限を付与されているか、SELECT ANY TABLEシステム権限を付与されている必要があります。同様に、オブジェクトを更新するには、そのオブジェクトの所有者であるか、オブジェクトに対するUPDATE権限を付与されているか、UPDATE ANY TABLE権限を付与されている必要があります。

3.5.5 アクセス調整およびビュー

ビューを通じてデータにアクセスする前に、ユーザーにはビューに対する適切なシステム権限およびオブジェクト権限が必要です。

基礎となる表(ビューの基礎となる表)がOracle Label Securityで保護されている場合、ビューのユーザーがラベル付きデータの特定行にアクセスするには、Oracle Label Securityから認可を受ける必要があります。

3.5.6 アクセス調整およびプログラム・ユニットの実行

Oracle DatabaseとOracle Label Securityでは、各ユーザーが所有するプロシージャの実行で使用される権限が異なります。

たとえば、Oracle Databaseでユーザー1ユーザー2に属するプロシージャを実行する場合、このプロシージャはユーザー2のシステム権限およびオブジェクト権限で実行されます。ユーザーに付与されている権限は、DBA_SYS_PRIVSデータ・ディクショナリ・ビューを問い合せることで確認できます。ただし、ユーザー1により実行されるプロシージャはすべて、ユーザー1自身のOracle Label Securityのラベルおよび権限で実行されます。これは、ユーザー1が、他のユーザーが所有しているストアド・プログラム・ユニットを実行する場合も同じです。

図3-10は、このプロセスを示しています。

  • ストアド・プログラム・ユニットは、プロシージャの所有者(ユーザー2)のDAC権限で実行されます。

  • また、Oracle Label Securityで保護されている表にアクセスするストアド・プログラム・ユニットは、行に連結されているラベルと、プロシージャの実行者(ユーザー1)のOracle Label Securityのラベルおよび権限に基づいて、データ行へのアクセスを調整します。

図3-10 ストアド・プログラム・ユニットの実行

図3-10の説明が続きます
「図3-10 ストアド・プログラム・ユニットの実行」の説明

ストアド・プログラム・ユニットは、管理者によってOracle Label Security権限を割り当てられた場合にトラステッドになります。ストアド・プログラム・ユニットは、それをコールするユーザーの権限ではなく、固有の自律型Oracle Label Security権限で実行できます。たとえば、ユーザーの権利にOracle Label Security権限がなくても、WRITEDOWN権限を持つストアド・プログラム・ユニットを実行すれば、ラベルを更新できます。この場合、使用されるのは、ユーザー自身の権限ではなくストアド・プログラム・ユニットの権限です。

トラステッド・プログラム・ユニットにより、権限付きの操作を制御された方法でカプセル化できます。権限が割り当てられているプロシージャ、パッケージおよびファンクションを使用することで、各自のラベルと権限では認可されないデータにアクセスできます。たとえば、参照可能なデータのみでなく、表のすべてのデータに対して集計関数を実行するには、管理者により設定されたトラステッド・プログラムを使用します。これにより、プログラム・ユニットでユーザーのかわりに操作を実行でき、ユーザーに権限を直接付与する必要はありません。

3.5.7 アクセス調整およびポリシー強制オプション

管理者は、Oracle Label Securityポリシーを個々の表に適用するときに、ポリシー施行オプション・セットの中から選択できます。

これらのオプションを使用すると、データベース表ごとに施行を様々に調整できます。ラベルに基づくアクセス制御のみでなく、SQL述語を各表に関連付けることもできます。述語により、表のうちユーザーがアクセスできる行をさらに厳密に定義できます。

新規または更新する行に対応付けられているラベルを自動的に計算する必要がある場合、管理者はポリシーの適用時にラベル付けファンクションを指定できます。アクティブなラベル付けファンクションはラベルを提供する他の手段よりも優先されるため、以降、そのファンクションは常にコールされ、ポリシーに基づいて書き込まれるデータ・ラベルを提供します。

特に明記されている場合を除き、このマニュアルではすべての施行オプションが有効になっているものと想定しています。

3.6 複数のOracle Label Securityポリシーの処理

単一データベース環境と分散環境のいずれでも、複数のOracle Label Securityポリシーを使用できます。

3.6.1 単一データベース内の複数のOracle Label Securityポリシー

単一データベース内のデータを複数のOracle Label Securityポリシーで保護できます。

定義済の各ポリシーは、そのポリシーでのみ使用されるラベル・セットに対応付けられています。データ・ラベルには、各ポリシーの定義済ラベル・セットによる制約が適用されます。

各ポリシーは異なる表を保護しますが、複数のポリシーを単一の表に適用することもできます。データにアクセスするには、そのデータを保護しているポリシーすべてについて、ラベル認可が必要です。特定の行にアクセスするには、目的の行を含む表を保護するすべてのポリシーによって認可されている必要があります。権限が必要な場合は、作業に影響するすべてのポリシーの権限を必要とする場合があります。

3.6.2 分散環境での複数のOracle Label Securityポリシー

Oracle Label Securityを使用する分散環境では、Oracle Label Securityによってリモート接続が制御されます。