3 アクセス制御および権限
Oracleでは、ユーザーがラベル付きの行に対して持つことのできるアクセス権のタイプを決定するアクセス制御および権限が提供されています。
- アクセス調整
Oracle Label Securityポリシーで保護されているデータにユーザーがアクセスするには、そのポリシーに定義されているラベルに基づく認可が必要です。 - セッション・ラベルおよび行ラベルの動作
セッション・ラベルおよび行ラベルについて理解しておくことが重要です。 - ユーザー認可の動作
Oracle Label Securityには、Oracle Label Security管理者が設定する認可と、計算されたセッション・ラベルにより設定される認可があります。 - アクセス調整のためのラベルの評価
Oracle Label Securityは、ユーザーのラベル・コンポーネントと行のラベル・コンポーネントを比較することにより、ラベルを評価します。 - Oracle Label Securityの権限
Oracle Label Securityでは、データベースおよび行のラベルの権限のセットが提供されています。 - 複数のOracle Label Securityポリシーの使用
単一データベース環境と分散環境のいずれでも、複数のOracle Label Securityポリシーを使用できます。
関連項目
3.1 アクセス調整
Oracle Label Securityポリシーで保護されているデータにユーザーがアクセスするには、そのポリシーに定義されているラベルに基づく認可が必要です。
次の図は、ユーザー、データおよびラベルの間の関係を示しています。
-
データ・ラベルでは、データ行の機密性が指定されます。
-
ユーザー・ラベルは、ユーザーに適切な認可を付与します。
-
ユーザーとデータ行とのアクセス調整は、ユーザーのラベルに依存します。
ノート:
Oracle Label Securityの施行オプションは、表およびスキーマに対するアクセス制御の適用方法に影響します。この章では、すべてのポリシー施行オプションが有効になっているものとします。
親トピック: アクセス制御および権限
3.2 セッション・ラベルおよび行ラベルの動作
セッション・ラベルおよび行ラベルについて理解しておくことが重要です。
- セッション・ラベル
Oracle Label Securityの各ユーザーには、特殊なコンポーネントを含む認可が付与されています。 - 行ラベル
ユーザーがラベルを指定せずにデータを書き込む場合、ユーザーのセッション・ラベルを使用して行ラベルが自動的に割り当てられます。 - セッション・ラベルの例
セッション・ラベルと行ラベルは、ユーザーのレベル、区分およびグループの認可の範囲内でどこにでも置くことができます。
親トピック: アクセス制御および権限
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.3 ユーザー認可の動作
Oracle Label Securityには、Oracle Label Security管理者が設定する認可と、計算されたセッション・ラベルにより設定される認可があります。
- 管理者が設定する認可
管理者が、レベル、区分およびグループに関する認可を明示的に設定します。 - 計算されるセッション・ラベル
Oracle Label Securityにより、多数のラベルがセッション・ラベルの値に基づいて自動的に計算されます。
親トピック: アクセス制御および権限
3.3.1 管理者が設定する認可
管理者が、レベル、区分およびグループに関する認可を明示的に設定します。
- 認可レベル
管理者が、Oracle Label Securityポリシーに関するレベル認可を明示的に設定します。 - 認可区分
管理者は、ユーザーがセッション・ラベルに配置できる区分のリストを指定します。 - 認可グループ
ユーザーがセッション・ラベルに配置できるグループのリストを指定し、各グループの書込みアクセス権を付与する必要があります。
親トピック: ユーザー認可の動作
3.3.1.1 認可レベル
管理者が、Oracle Label Securityポリシーに関するレベル認可を明示的に設定します。
表3-1に、管理者が設定できる認可レベルを示します。
表3-1 管理者が設定する認可レベル
認可 | 意味 |
---|---|
最大レベル |
ユーザーが読取りおよび書込み操作中にアクセスできる機密性の最大ランキング。 |
最小レベル |
ユーザーが書込み操作中にアクセスできる機密性の最小ランキング。最大レベルは最小レベル以上に設定する必要があります。 |
デフォルト・レベル |
Oracle Databaseへの接続時にデフォルトで想定されるレベル |
デフォルト行レベル |
Oracle Databaseへのデータの挿入時にデフォルトで使用されるレベル |
たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可レベルを設定します。
タイプ | 短縮名 | 詳細名 | 説明 |
---|---|---|---|
最大値 |
|
|
ユーザーの最上位レベル |
最小値 |
|
|
ユーザーの最下位レベル |
デフォルト |
|
|
ユーザーのデフォルト・レベル |
行 |
|
|
|
親トピック: 管理者が設定する認可
3.3.1.2 認可区分
管理者は、ユーザーがセッション・ラベルに配置できる区分のリストを指定します。
管理者は、区分ごとに、ユーザーに書込みアクセス権を明示的に付与する必要があります。ユーザーは、書込み認可を持たない区分を含む行を直接挿入、更新または削除できません。
たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可区分を設定します。
短縮名 | 詳細名 | 書込み | デフォルト | 行 |
---|---|---|---|---|
|
|
あり |
あり |
なし |
|
|
あり |
あり |
なし |
|
|
あり |
あり |
あり |
図3-3では、行指定は、新規に挿入するデータのデフォルト行ラベルの一部として区分を使用する必要があるかどうかを示します。この設定を有効にするには、ポリシー・オプションも有効にする必要があることに注意してください。
親トピック: 管理者が設定する認可
3.3.1.3 認可グループ
ユーザーがセッション・ラベルに配置できるグループのリストを指定し、各グループの書込みアクセス権を付与する必要があります。
たとえば、Oracle Enterprise Managerでは、管理者は次の認可グループを設定します。
短縮名 | 詳細名 | 書込み | デフォルト | 行 | 親 |
---|---|---|---|---|---|
|
|
あり |
あり |
あり |
|
|
|
あり |
あり |
なし |
|
|
|
あり |
あり |
なし |
|
図3-4では、行指定は、新規に挿入するデータのデフォルト行ラベルの一部としてグループを使用する必要があるかどうかを示します。この設定を有効にするには、LABEL_DEFAULT
ポリシー・オプションも有効にする必要があることに注意してください。
親トピック: 管理者が設定する認可
3.3.2 計算されるセッション・ラベル
Oracle Label Securityでは、多数のラベルがセッション・ラベルの値に基づいて自動的に計算されます。
表3-2に、計算されるセッション・ラベルを示します。
表3-2 計算されるセッション・ラベル
計算されるラベル | 定義 |
---|---|
最大読取りラベル |
ユーザーが認可されている区分とグループを組み合せた最大レベル。 |
最大書込みラベル |
ユーザーが書込みアクセス権を付与されている区分とグループを組み合せた最大レベル。 |
最小書込みラベル |
ユーザーの最小レベル。 |
デフォルト読取りラベル |
ユーザーのデフォルトとして指定された区分とグループを組み合せた単一のデフォルト・レベル。 |
デフォルト書込みラベル |
ユーザーが書込みアクセス権を付与されている区分とグループを含む、デフォルト読取りラベルのサブセット。レベル・コンポーネントは、読取りラベルのデフォルト・レベルと同じです。このラベルは、ユーザーの書込み認可に基づいて読取りラベルから自動的に導出されます。 |
デフォルト行ラベル |
挿入されるデータのデータ・ラベルのデフォルト値として指定されている、ユーザーの最小書込みラベルと最大書込みラベル間のコンポーネントの組合せ。 |
関連項目
親トピック: ユーザー認可の動作
3.4 アクセス調整のためのラベルの評価
Oracle Label Securityは、ユーザーのラベル・コンポーネントと行のラベル・コンポーネントを比較することにより、ラベルを評価します。
Oracle Label Securityポリシーは、このようにして、ユーザーがデータにアクセスできるかどうかを決定できます。これにより、Oracle Label Securityは、ユーザーが行のデータに対して要求した操作を実行することを認可されているかどうかを評価できます。
- 読取りアクセスと書込みアクセスについて
データ・ラベルはデータ・レコードの列に格納されますが、ユーザー認可に関する情報はリレーショナル表に格納されます。 - Oracle Label Securityの読取りアクセス・アルゴリズムの動作
READ_CONTROL
の強制により、行のデータを読み取ることができるかどうかが決定されます。 - Oracle Label Securityの書込みアクセス・アルゴリズムの動作
Oracle Label Securityのコンテキストでは、WRITE_CONTROL
の強制により、行のデータを挿入、更新または削除できるかどうかが決定されます。
親トピック: アクセス制御および権限
3.4.1 読取りアクセスと書込みアクセスについて
データ・ラベルはデータ・レコードの列に格納されますが、ユーザー認証に関する情報はリレーショナル表に格納されます。
ユーザーがログオンすると、表を使用して、セッション中に使用するユーザー・ラベルが動的に生成されます。
- 読取り操作と書込み操作の違い
保護された表の中では、データ操作言語(DML)操作に関して、読取りアクセスと書込みアクセスという2つの基本的なタイプのアクセス調整が存在します。 - グループに対する読取り/書込み認可の伝播
グループが階層形式で編成されている場合、ユーザーに割り当てられるグループには、そのユーザーが属しているグループに従属するすべてのサブグループが含まれます。
親トピック: アクセス調整のためのラベルの評価
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.4.2 Oracle Label Securityの読取りアクセス・アルゴリズムの動作
READ_CONTROL
の強制により、行のデータを読み取ることができるかどうかが判断されます。
次のルールが順番に使用され、データ行に対するユーザーの読取りアクセス権が判断されます。
-
ユーザーのレベルは、データのレベル以上であることが必要です。
-
ユーザーのラベルには、データに属する少なくとも1つのグループ(またはそのようなサブグループの親グループ)が含まれている必要があります。
-
ユーザーのラベルは、データに属するすべての区分を含んでいる必要があります。
ユーザーのラベルがこれらのテストにパスした場合、このユーザーのラベルは行のラベルを支配している、と表現されます。
レベルに連結した読取りまたは書込みアクセス権という概念はないことに注意してください。これは、管理者が指定したレベル範囲(最小から最大)内で、ユーザーが潜在的に読取りおよび書込み可能になるためです。ユーザーは、各自の現行セッション・レベル以下のすべてのデータを常に読み取ることができます。ユーザーに最小認可レベルを下回る書込みを許可する権限は(FULL
以外には)ありません。
図3-6は、ラベル評価プロセスがレベル、グループ、区分の順に進行することを示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
Oracle Label Securityは読取りアクセス要求を受け取ると、各行を評価して次のことを判断します。
-
ユーザーのレベルがデータのレベル以上かどうか
-
データのレベル以上の場合、ユーザーはデータ・ラベルに示されたグループのうち1つ以上へのアクセス権を持っているかどうか
-
持っている場合、ユーザーはデータ・ラベルに示されたすべての区分へのアクセス権を持っているかどうか(つまり、データの区分がユーザーの区分のサブセットかどうか)
この評価プロセスのいずれかの段階で答えがいいえになる場合、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および3は、次のように書き換えることができます。
-
ラベルにグループがない場合、ユーザーがデータに書き込むためには、ラベル内のすべての区分に対する書込みアクセス権が必要です。
-
ラベルにグループがあり、ユーザーがグループの1つに対する書込みアクセス権を持つ場合、データに書き込むには区分に対する読取りアクセス権のみ必要です。
読取り操作の場合と同様に、ラベル評価プロセスはレベル、グループ、区分の順に進行します。ユーザーは、最小認可レベルより下位にも、現行セッション・レベルより上位にも、データを書き込むことはできないことに注意してください。最小レベルより下位の読取りは常に可能です。
図3-7は、このプロセスによるINSERT
、UPDATE
およびDELETE
操作の処理方法を示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
Oracle Label Securityはアクセス要求を受け取ると、各行を評価して次のことを判断します。
-
データのレベルがユーザーのレベル以下かどうか
-
データのレベルがユーザーの最小レベル以上かどうか
-
データのレベルが上限以下の場合、ユーザーはデータ・ラベルに示された1つ以上のグループへの書込みアクセス権を持っているか
-
1つ以上のグループへのアクセス権を持っている場合、ユーザーはデータ・ラベルに示された、少なくとも読取りアクセス権付きのすべての区分へのアクセス権を持っているかどうか
-
グループはないが、区分がある場合、ユーザーはすべての区分への書込みアクセス権を持っているかどうか
この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。
セッション・ラベルがS:ALPHA
,BETA
で、区分ALPHA
への書込みアクセス権のみを持っている場合を考えます。この場合、ラベルS:ALPHA
,BETA
が付いた行を読み取ることはできますが、更新はできません。
要約すると、書込みアクセス権は、行データのINSERT
、UPDATE
およびDELETE
操作に対して強制されます。
また、各ユーザーには、書込みできる最小レベルを対応付けることができます。最小レベルより下位のレベルのラベルが付いた行の更新や削除も、最小レベルより下位のレベルを含む行ラベルが付いた行の挿入もできません。
関連項目
親トピック: アクセス調整のためのラベルの評価
3.5 Oracle Label Securityの権限
Oracle Label Securityでは、データベースおよび行のラベルの権限のセットが提供されています。
- Oracle Label Securityポリシーにより定義される権限
Oracle Label Securityでは、認可されたユーザーに対してポリシーの特定部分をバイパスすることを許可する特殊な権限がサポートされます。 - 特殊なアクセス権限
ユーザーの認可は、次の4つの権限のいずれかで変更できます。 - 特殊な行ラベル権限
行にラベルが設定されている場合、そのラベルを変更するにはOracle Label Securityの権限が必要です。 - システム権限、オブジェクト権限およびポリシー権限
Oracle Label Security権限は、標準のOracle Databaseシステムおよびオブジェクト権限とは異なります。 - アクセス調整およびビュー
ビューを通じてデータにアクセスする前に、ユーザーにはビューに対する適切なシステム権限およびオブジェクト権限が必要です。 - アクセス調整およびプログラム・ユニットの実行
Oracle DatabaseとOracle Label Securityでは、各ユーザーが所有するプロシージャの実行で使用される権限が異なります。 - アクセス調整およびポリシー強制オプション
管理者は、Oracle Label Securityポリシーを個々の表に適用するときに、ポリシー強制オプション・セットの中から選択できます。
親トピック: アクセス制御および権限
3.5.1 Oracle Label Securityのポリシーで定義される権限
Oracle Label Securityでは、認可されたユーザーに対してポリシーの特定部分をバイパスすることを許可する特殊な権限がサポートされます。
表3-3に、ユーザーまたはトラステッド・ストアド・プログラム・ユニットに付与できるすべての権限セットのサマリーを示します。各権限については、表の後に詳しく説明します。
表3-3 Oracle Label Securityの権限
セキュリティ権限 | 説明 |
---|---|
|
ポリシーで保護されている全データへの読取りアクセスを許可します。 |
|
ポリシーで保護されている全データへの完全な読取りおよび書込みアクセスを許可します。 |
|
行のグループから独立して、行の区分で認可されているデータへのセッション・アクセスを許可します。 |
|
セッションに対して、そのラベルと権限を別のユーザーのラベルおよび権限に変更することを許可します。 |
|
ユーザーに対して、行ラベル内でそのユーザーが認可されている最大レベル以下のレベルのみの設定または引上げを許可します。( |
|
ユーザーに対して、行ラベル内でそのユーザーが認可されている最小レベル以上のレベルへの設定または引下げを許可します。( |
|
ユーザーに対して、行ラベルのグループと区分の設定または変更は許可し、レベルの変更は禁止します。( |
親トピック: Oracle Label Securityの権限
3.5.2 特殊なアクセス権限
ユーザーの認証は、次の4つの権限のいずれかで変更できます。
- READ権限
READ
権限を持つユーザーは、認可またはセッション・ラベルに関係なく、ポリシーで保護されているすべてのデータを読み取ることができます。 - FULL権限
FULL
権限の効果とメリットはREAD
権限と同じですが、1つ違いがあります。 - COMPACCESS権限
COMPACCESS
権限により、ユーザーは行ラベルのグループとは無関係に、行ラベルの区分に基づいてデータにアクセスできます。 - PROFILE_ACCESS権限
PROFILE_ACCESS
権限により、セッションで、そのセッション・ラベルおよびセッション権限を他のユーザーのラベルおよび権限に変更することが可能になります。
親トピック: Oracle Label Securityの権限
3.5.2.1 READ権限
READ
権限を持つユーザーは、認可またはセッション・ラベルに関係なく、ポリシーで保護されているすべてのデータを読み取ることができます。
ラベル認可がなくてもかまいません。
また、READ
権限を持つユーザーは、ラベル認可に基づいて、書込みアクセス権を持つ任意のデータ行に書き込むことができます。
ノート:
UPDATE
、INSERT
および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-9は、COMPACCESS
権限を持つ書込みアクセスのラベル評価プロセスを示しています。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
親トピック: 特殊なアクセス権限
3.5.2.4 PROFILE_ACCESS権限
PROFILE_ACCESS
権限により、セッションで、そのセッション・ラベルおよびセッション権限を他のユーザーのラベルおよび権限に変更することが可能になります。
ユーザーがFULL
権限を持つユーザーになる可能性があるため、これはきわめて強力な権限です。この権限は、トラステッド・ストアド・プログラム・ユニットには付与できません。
親トピック: 特殊なアクセス権限
3.5.3 特殊な行ラベル権限
行にラベルが設定されている場合、そのラベルを変更するにはOracle Label Securityの権限が必要です。
これらのラベル変更権限を強制するには、LABEL_UPDATE
強制オプションをオンにする必要があることに注意してください。ユーザーが行ラベルを更新すると、新旧のラベルが比較され、必要な権限が判断されます。
特殊な行ラベル権限は次のとおりです。
- WRITEUP権限
WRITEUP
権限により、ユーザーは区分やグループを損なわずに行のデータ・レベルを引き上げることができます。 - WRITEDOWN権限
WRITEDOWN
権限により、ユーザーは区分やグループを損なわずに行のデータ・レベルを引き下げることができます。 - WRITEACROSS権限
WRITEACROSS
権限により、ユーザーは機密性レベルを変更せずにデータの区分およびグループを変更できます。
親トピック: Oracle Label Securityの権限
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
権限を付与されている必要があります。
親トピック: Oracle Label Securityの権限
3.5.5 アクセス調整およびビュー
ビューを通じてデータにアクセスする前に、ユーザーにはビューに対する適切なシステム権限およびオブジェクト権限が必要です。
基礎となる表(ビューの基礎となる表)がOracle Label Securityで保護されている場合、ビューのユーザーがラベル付きデータの特定行にアクセスするには、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のラベルおよび権限に基づいて、データ行へのアクセスを調整します。
ストアド・プログラム・ユニットは、管理者によって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ポリシーを使用できます。
- 単一データベース内での複数のOracle Label Securityポリシー
単一データベース内のデータを複数のOracle Label Securityポリシーで保護できます。 - 分散環境での複数のOracle Label Securityポリシー
Oracle Label Securityを使用する分散環境では、Oracle Label Securityによってリモート接続が制御されます。
親トピック: アクセス制御および権限
3.6.1 単一データベース内の複数のOracle Label Securityポリシー
単一データベース内のデータを複数のOracle Label Securityポリシーで保護できます。
定義済の各ポリシーは、そのポリシーでのみ使用されるラベル・セットに対応付けられています。データ・ラベルには、各ポリシーの定義済ラベル・セットによる制約が適用されます。
各ポリシーは異なる表を保護しますが、複数のポリシーを単一の表に適用することもできます。データにアクセスするには、そのデータを保護しているポリシーすべてについて、ラベル認可が必要です。特定の行にアクセスするには、目的の行を含む表を保護するすべてのポリシーによって認可されている必要があります。権限が必要な場合は、作業に影響するすべてのポリシーの権限を必要とする場合があります。