第2章「データ・ラベルおよびユーザー・ラベル」では、ラベル(そのレベル、区分およびグループ)の概念と、行のデータ・ラベルとユーザーのラベルに基づくアクセス制御の基礎について説明しました。この章では、ユーザーがラベル付きの行に対して持つことのできるアクセス権のタイプを決定するアクセス制御と権限について検証します。
この章には、次の項が含まれます。
Oracle Label Securityポリシーで保護されているデータにユーザーがアクセスするには、そのポリシーに定義されているラベルに基づく認可が必要です。図3-1「ユーザー、データおよびラベル間の関係」に、ユーザー、データおよびラベルの相互関係を示します。
データ・ラベルでは、データ行の機密性が指定されます。
ユーザー・ラベルは、ユーザーに適切な認可を付与します。
ユーザーとデータ行とのアクセス調整は、ユーザーのラベルに依存します。
注意: Oracle Label Securityの施行オプションは、表およびスキーマに対するアクセス制御の適用方法に影響します。この章では、すべてのポリシー施行オプションが有効になっているものとします。 |
この項では、基本的なユーザー・ラベルについて説明します。
各Oracle Label Securityユーザーは、次を含む認可セットを持ちます。
最大レベルと最小レベル
認可された区分のセット
認可されたグループのセット
区分およびグループごとの、読取り専用アクセスまたは読取り/書込みアクセスの指定
管理者はユーザーに対してこれらの認可を設定するときに、そのユーザーの初期セッション・ラベルも指定します。
セッション・ラベルは、ユーザーが任意の時点で作業する、レベル、区分およびグループの特定の組合せです。ユーザーは、認可されているコンポーネントを任意に組み合せてセッション・ラベルを変更できます。
ユーザーがラベルを指定せずにデータを書き込む場合、ユーザーのセッション・ラベルを使用して行ラベルが自動的に割り当てられます。ただし、ユーザーは書き込んだ行のラベルを、指定したラベルのコンポーネントに関する特定の制限の範囲内で設定できます。
このラベルのレベルは、管理者が指定した範囲内で任意に設定できます。たとえば、ユーザーの現行のセッション・ラベルのレベルから最小レベルの間に設定できます。ただし、この行の新規ラベルの区分とグループは、さらに制限されます。新規ラベルに含めることができるのは、現行のセッション・ラベルに含まれていて、ユーザーが書込みアクセス権を持っている区分とグループのみです。
管理者はユーザー認証を設定するときに、初期のデフォルト行ラベルも指定します。
セッション・ラベルと行ラベルは、ユーザーのレベル、区分およびグループの認可の範囲内でどこにでも置くことができます。図3-2「ユーザー・セッション・ラベル」では、ユーザーの最大レベルはSENSITIVE、最小レベルはUNCLASSIFIEDです。ただし、デフォルトのセッション・ラベルはC:FIN,OP:WRです。この例では、管理者は、ユーザーがCONFIDENTIALレベルでデータベースに接続するように、そのセッション・ラベルを設定しています。
同様に、ユーザーは区分FINおよびOPとグループWRに対して認可されていても、管理者はそのユーザーが区分FINとグループWRにのみ接続するように、セッション・ラベルを設定できます。
管理者は、次のように多数のユーザー認証を明示的に設定します。
表3-1 管理者が設定する認可レベル
認可レベル | 意味 |
---|---|
最大レベル |
ユーザーが読取りおよび書込み操作中にアクセスできる機密性の最大ランキング。 |
最小レベル |
ユーザーが書込み操作中にアクセスできる機密性の最小ランキング。最大レベルは最小レベル以上に設定する必要があります。 |
デフォルト・レベル |
Oracle Databaseへの接続時にデフォルトで想定されるレベル |
デフォルト行レベル |
Oracle Databaseへのデータの挿入時にデフォルトで使用されるレベル |
たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可レベルを設定します。
型 | 短縮名 | 詳細名 | 説明 |
---|---|---|---|
最大値 | HS | HIGHLY_SENSITIVE | ユーザーの最上位レベル |
最小値 | P | PUBLIC | ユーザーの最下位レベル |
デフォルト | C | CONFIDENTIAL | ユーザーのデフォルト・レベル |
行 | C | CONFIDENTIAL | INSERT の行レベル |
管理者は、ユーザーがセッション・ラベルに使用できる区分のリストを指定します。区分ごとに、書込みアクセス権を明示的に指定する必要があります。ユーザーは、書込み認可を持たない区分を含む行を直接挿入、更新または削除することはできません。
たとえば、Oracle Enterprise Managerでは、管理者がユーザーJoeに対して次の認可区分を設定します。
短縮名 | 詳細名 | 書込み | デフォルト | 行 |
---|---|---|---|---|
CHEM | CHEMICAL | あり | あり | なし |
FINCL | FINANCIAL | あり | あり | なし |
OP | OPERATIONAL | あり | あり | あり |
図3-4「Enterprise Managerでの認可区分の設定」では、「行」指定は、新規に挿入するデータのデフォルト行ラベルの一部として、区分を使用する必要があるかどうかを示します。この設定を有効にするには、LABEL_DEFAULTポリシー・オプションも有効にする必要があることに注意してください。
管理者は、ユーザーがセッション・ラベルに使用できるグループのリストを指定します。リストに含めるグループごとに、書込みアクセス権を明示的に指定する必要があります。
たとえば、Oracle Enterprise Managerでは、管理者は次の認可グループを設定します。
短縮名 | 詳細名 | 書込み | デフォルト | 行 | 親 |
---|---|---|---|---|---|
WR_HR | WR_HUMAN_RESOURCES | あり | あり | あり | WR |
WR_AP | WR_ACCOUNTS_PAYABLE | あり | あり | なし | WR_FIN |
WR_AR | WR_ACCOUNTS_RECEIVABLE | あり | あり | なし | WR_FIN |
図3-5「Enterprise Managerでの認可グループの設定」では、「行」指定は、新規に挿入するデータのデフォルト行ラベルの一部として、グループを使用する必要があるかどうかを示します。この設定を有効にするには、LABEL_DEFAULTポリシー・オプションも有効にする必要があることに注意してください。
Oracle Label Securityでは、多数のラベルがセッション・ラベルの値に基づいて自動的に計算されます。計算されるセッション・ラベルを次に示します。
表3-2 計算されるセッション・ラベル
計算されるラベル | 定義 |
---|---|
ユーザーが認可されている区分とグループを組み合せた最大レベル。 |
|
ユーザーが書込みアクセス権を付与されている区分とグループを組み合せた最大レベル。 |
|
最小書込みラベル |
ユーザーの最小レベル。 |
デフォルト読取りラベル |
ユーザーのデフォルトとして指定された区分とグループを組み合せた単一のデフォルト・レベル。 |
デフォルト書込みラベル |
ユーザーが書込みアクセス権を付与されている区分とグループを含む、デフォルト読取りラベルのサブセット。レベル・コンポーネントは、読取りラベルのデフォルト・レベルと同じです。このラベルは、ユーザーの書込み認可に基づいて読取りラベルから自動的に導出されます。 |
挿入されるデータのデータ・ラベルのデフォルト値として指定されている、ユーザーの最小書込みラベルと最大書込みラベル間のコンポーネントの組合せ。 |
表がOracle Label Securityポリシーで保護されている場合は、ユーザーのラベル・コンポーネントが行のラベル・コンポーネントと比較され、そのユーザーがデータにアクセスできるかどうかが判断されます。Oracle Label Securityでは、このようにして、ユーザーが行のデータに対して要求した操作を実行できるように認可されているかどうかが評価されます。この項では、ユーザー・アクセスの調整に使用されるルールとオプションについて説明します。この項の内容は、次のとおりです。
データ・ラベルはデータ・レコードの列に格納されますが、ユーザー認証に関する情報はリレーショナル表に格納されます。ユーザーがログオンすると、表を使用して、セッション中に使用するユーザー・ラベルが動的に生成されます。
保護された表には、データ操作言語(DML)操作に関して次の2つの基本的なタイプのアクセス調整が存在します。
ユーザーは、読み取ることができるデータについての最大認可を持ち、ユーザーの書込み認可はそのサブセットです。最小書込みレベルにより、ユーザーが機密性を下げてデータを送信できるかどうかが制御されます。ユーザーは、管理者から各自に割り当てられた最小レベルより低いレベルのデータは書き込めません。
また、ユーザーが認可されている(つまり、ユーザーが少なくとも読取りアクセス権を持つ)区分とグループのリストが個別にあります。アクセス・フラグは、ユーザーが個々の区分またはグループに書き込むこともできるかどうかを示します。
グループが階層形式で編成されている場合、ユーザーに割り当てられるグループには、そのユーザーが属しているグループに従属するすべてのサブグループが含まれます。この場合、親グループに対するユーザーの読取り/書込み認可は、すべてのサブグループに伝播します。
図3-6「サブグループによる読取り/書込みアクセス権の継承」のように、3つのサブグループを持つ親グループWESTERN_REGIONを考えます。ユーザーがWESTERN_REGIONへの読取りアクセス権を持っている場合は、3つのサブグループへの読取りアクセス権も付与されていることになります。管理者は、ユーザーにWESTERN_REGION親グループ(または他のサブグループ)への書込みアクセス権を付与せずに、サブグループWR_FINANCEへの書込みアクセス権を付与できます。これに対して、ユーザーがWESTERN_REGIONへの読取り/書込みアクセス権を持っている場合は、ツリー上でこのグループより下位にあるすべてのサブグループへの読取り/書込みアクセス権も付与されていることになります。
グループに対する書込み認可があっても、親グループに対する書込み認可が与えられるわけではありません。ユーザーがWESTERN_REGIONおよびWR_FINANCEへの読取り専用アクセス権を持っている場合に、管理者はそのユーザーが持っている上位レベルのグループへの読取り専用アクセス権に影響を与えずに、WR_ACCOUNTS_RECEIVABLEへの書込みアクセス権を付与できます。
READ_CONTROLの施行により、行のデータを読み取ることができるかどうかが判断されます。次のルールが順番に使用され、データ行に対するユーザーの読取りアクセス権が判断されます。
ユーザーのレベルは、データのレベル以上であることが必要です。
ユーザーのラベルには、データに属する少なくとも1つのグループ(またはそのようなサブグループの親グループ)が含まれている必要があります。
ユーザーのラベルは、データに属するすべての区分を含んでいる必要があります。
ユーザーのラベルがこれらのテストにパスした場合、このユーザーのラベルは行のラベルを支配している、と表現されます。
レベルに連結した読取りまたは書込みアクセス権という概念はないことに注意してください。これは、管理者が指定したレベル範囲(最小から最大)内で、ユーザーが潜在的に読取りおよび書込み可能になるためです。ユーザーは、各自の現行セッション・レベル以下のすべてのデータを常に読み取ることができます。ユーザーに最小認可レベルを下回る書込みを許可する権限は(FULL以外には)ありません。
図3-7「読取りアクセス権のラベル評価プロセス」のように、ラベル評価プロセスは、レベル、グループ、区分の順に進行します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
Oracle Label Securityは読取りアクセス要求を受け取ると、各行を評価して次のことを判断します。
ユーザーのレベルがデータのレベル以上かどうか
データのレベル以上の場合、ユーザーはデータ・ラベルに示されたグループのうち1つ以上へのアクセス権を持っているかどうか
持っている場合、ユーザーはデータ・ラベルに示されたすべての区分へのアクセス権を持っているかどうか(つまり、データの区分がユーザーの区分のサブセットかどうか)
この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。
Oracle Label Securityポリシーでは、ユーザー・セッションはラベル以下の行の読取りを許可されます。これを下位読取りと呼びます。セッションでは、支配していないラベルの行を読み取ることはできません。
たとえば、SENSITIVE:ALPHA,BETAでログインすると、ラベルは行のラベルSENSITIVE:ALPHAを支配しているため、このラベルが付いた行を読み取ることができます。ただし、ラベルは行のラベルSENSITIVE:ALPHA,GAMMAを支配していないため、このラベルが付いた行を読み取ることはできません。
ユーザーが特殊なOracle Label Security権限を持っていると、他の場合には拒否される行へのアクセスを取得できることに注意してください。
Oracle Label Securityのコンテキストでは、WRITE_CONTROLの施行により行データを挿入、更新または削除できるかどうかが決定されます。
WRITE_CONTROLにより、データへのアクセスをより細かい最小単位で制御できます。レベルに区分を追加すると最小単位は細かくなります。区分にグループを追加するとさらに細かくなります。アクセス制御は、ユーザーが読み取れるデータを書き込む権限を管理できれば、ファイングレイン・アクセス・コントロールとなります。
ユーザーが特定のデータ行を書き込むことができるかどうかを判断するために、Oracle Label Securityは次のルールを順番に評価します。
データ・ラベル内のレベルは、ユーザーの最小レベル以上で、かつユーザーのセッション・レベル以下であることが必要です。
グループが存在する場合、ユーザーのラベルには、データ・ラベルに表示される書込みアクセス権のある少なくとも1つのグループ(またはそのようなサブグループの親)が含まれている必要があります。また、ユーザーのラベルには、データ・ラベルにすべての区分が含まれている必要があります。
グループが存在しない場合、ユーザーのラベルには、データ・ラベル内のすべての区分に対する書込みアクセス権が必要です。
テスト2および3は、次のように書き換えることができます。
ラベルにグループがない場合、ユーザーがデータに書き込むためには、ラベル内のすべての区分に対する書込みアクセス権が必要です。
ラベルにグループがあり、ユーザーがグループの1つに対する書込みアクセス権を持つ場合、データに書き込むには区分に対する読取りアクセス権のみ必要です。
読取り操作の場合と同様に、ラベル評価プロセスはレベル、グループ、区分の順に進行します。ユーザーは、最小認可レベルより下位にも、現行セッション・レベルより上位にも、データを書き込むことはできないことに注意してください。最小レベルより下位の読取りは常に可能です。
次の図に、このプロセスによるINSERT、UPDATEおよびDELETE操作の処理方法を示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
Oracle Label Securityはアクセス要求を受け取ると、各行を評価して次のことを判断します。
データのレベルがユーザーのレベル以下かどうか
データのレベルがユーザーの最小レベル以上かどうか
データのレベルが上限以下の場合、ユーザーはデータ・ラベルに示された1つ以上のグループへの書込みアクセス権を持っているか
1つ以上のグループへのアクセス権を持っている場合、ユーザーはデータ・ラベルに示された、少なくとも読取りアクセス権付きのすべての区分へのアクセス権を持っているかどうか
グループはないが、区分がある場合、ユーザーはすべての区分への書込みアクセス権を持っているかどうか
この評価プロセスのいずれかの段階で答えがいいえになる場合、Oracle Label Securityはその行へのアクセスを拒否して、次のデータ行の評価に移ります。
セッション・ラベルがS:ALPHA,BETAで、区分ALPHAへの書込みアクセス権のみを持っている場合を考えます。この場合、ラベルS:ALPHA,BETAが付いた行を読み取ることはできますが、更新はできません。
要約すると、書込みアクセス権は、行データのINSERT、UPDATEおよびDELETE操作に対して施行されます。
また、各ユーザーには、書込みできる最小レベルを対応付けることができます。最小レベルより下位のレベルのラベルが付いた行の更新や削除も、最小レベルより下位のレベルを含む行ラベルが付いた行の挿入もできません。
この項では、Oracle Label Securityのデータベースおよび行のラベルの権限について説明します。
Oracle Label Securityでは、認可されたユーザーに対してポリシーの特定部分をバイパスすることを許可する特殊な権限がサポートされます。表3-3に、ユーザーまたはトラステッド・ストアド・プログラム・ユニットに付与できるすべての権限セットのサマリーを示します。各権限については、表の後に詳しく説明します。
表3-3 Oracle Label Securityの権限
ユーザーの認証は、次の4つの権限のいずれかで変更できます。
READ権限を持つユーザーは、認可またはセッション・ラベルに関係なく、ポリシーで保護されているすべてのデータを読み取ることができます。ラベル認可がなくてもかまいません。また、READ権限を持つユーザーは、ラベル認可に基づいて、書込みアクセス権を持つ任意のデータ行に書き込むことができます。
注意: UPDATE 、INSERT およびDELETE 操作に対しては、アクセス調整が適用されます。 |
この権限は、データ変更が許可されていないシステム管理者がデータをエクスポートする場合に便利です。また、データ変更を行わないユーザーがレポートを実行して情報をコンパイルする場合にも便利です。READ権限により、システムはOracle Label Securityポリシーが存在しないかのように動作するため、SELECT文のパフォーマンスが最適化されます。
FULL権限の効果とメリットはREAD権限と同じですが、1つ違いがあります。FULL権限を持つユーザーは、すべてのデータに書き込むこともできます。FULL権限を持つユーザーの場合、READおよびWRITEのアルゴリズムは適用されません。
この場合でもOracleのシステムおよびオブジェクトに対する認可は適用されることに注意してください。たとえば、この場合でもユーザーはアプリケーション表に対するSELECT権限が必要です。FULL認可では、個々の行レベルでのアクセス調整チェックがオフになります。
COMPACCESS権限により、ユーザーは行ラベルのグループとは無関係に、行ラベルの区分に基づいてデータにアクセスできます。行ラベルに区分がない場合、アクセスはグループの認可により決定されます。ただし、区分が存在し、かつ、その区分へのアクセスが認可されていれば、グループの認可はバイパスされます。これにより、データの全区分と一致するラベルを持つ、権限を持ったユーザーは、所有グループが何かということによるデータ・アクセス許可とは関係なく、特定の区分内のデータにアクセスできます。
図3-9「COMPACCESS権限を持つ読取りアクセスのラベル評価プロセス」に、COMPACCESS権限を持つ読取りアクセスのラベル評価プロセスを示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
図3-10「COMPACCESS権限を持つ書込みアクセスのラベル評価プロセス」に、COMPACCESS権限を持つ書込みアクセスのラベル評価プロセスを示します。データ・ラベルがNULLまたは無効の場合、ユーザーのアクセスは拒否されます。
行にラベルが設定されている場合、そのラベルを変更するにはOracle Label Securityの権限が必要です。この権限には、WRITEUP、WRITEDOWNおよびWRITEACROSSがあります。
これらのラベル変更権限を施行するには、LABEL_UPDATE施行オプションをオンにする必要があることに注意してください。ユーザーが行ラベルを更新すると、新旧のラベルが比較され、必要な権限が判断されます。
WRITEUP権限により、ユーザーは区分やグループを損わずに行のデータ・レベルを引き上げることができます。引き上げることができるのは、ユーザーの最大認可レベルまでです。
たとえば、認可されたユーザーは、各自の最小レベルより下位のレベルを持つデータ行のレベルを引き上げることができます。行がUNCLASSIFIEDでユーザーの最大レベルがSENSITIVEであれば、その行のレベルをSENSITIVEに引き上げることができます。現行セッション・レベルより上位に引き上げることはできますが、区分は変更できません。
Oracle Label Security権限は、標準Oracle Databaseシステムおよびオブジェクト権限とは異なります。
表3-4 権限のタイプ
ソース | 権限 | 定義 |
---|---|---|
Oracle Database |
特定タイプのSQL文を実行する権限 |
|
別のユーザーのオブジェクトにアクセスする権限 |
||
Oracle Label Security |
Label Securityポリシーの特定部分をバイパスする権限 |
Oracle Databaseは、ユーザーに付与された任意アクセス制御権限を強制します。デフォルトでは、ユーザーはPUBLICユーザー・グループに付与される権限のみを持ちます。ユーザーが操作を実行するには、該当する権限を明示的に付与される必要があります。
たとえば、Oracle Databaseでオブジェクトを読み取るには、そのオブジェクトの所有者であるか、オブジェクトに対するSELECT権限を付与されているか、SELECT ANY TABLEシステム権限を付与されている必要があります。同様に、オブジェクトを更新するには、そのオブジェクトの所有者であるか、オブジェクトに対するUPDATE権限を付与されているか、UPDATE ANY TABLE権限を付与されている必要があります。
関連項目: 特定の操作の実行に必要なOracle Databaseの権限と、これらの任意アクセス制御権限を付与および取り消す方法の詳細は、Oracle Database管理者ガイドを参照してください。 |
ビューを通じてデータにアクセスする前に、ユーザーにはビューに対する適切なシステム権限およびオブジェクト権限が必要です。基礎となる表(ビューの基礎となる表)がOracle Label Securityで保護されている場合、ビューのユーザーがラベル付きデータの特定行にアクセスするには、Oracle Label Securityから認可を受ける必要があります。
Oracle Databaseでは、ユーザー1がユーザー2に属するプロシージャを実行した場合、プロシージャはユーザー2のシステムおよびオブジェクト権限で実行されます。ただし、ユーザー1により実行されるプロシージャは、ユーザー1自身のOracle Label Securityのラベルおよび権限で実行されます。これは、ユーザー1が、他のユーザーが所有しているストアド・プログラム・ユニットを実行する場合も同じです。
図3-11「ストアド・プログラム・ユニットの実行」に、このプロセスを示します。
ストアド・プログラム・ユニットは、プロシージャの所有者(ユーザー2)のDAC権限で実行されます。
また、Oracle Label Securityで保護されている表にアクセスするストアド・プログラム・ユニットは、行に連結されているラベルと、プロシージャの実行者(ユーザー1)のOracle Label Securityのラベルおよび権限に基づいて、データ行へのアクセスを調整します。
ストアド・プログラム・ユニットは、管理者によってOracle Label Security権限を割り当てられた場合にトラステッドになります。ストアド・プログラム・ユニットは、それをコールするユーザーの権限ではなく、固有の自律型Oracle Label Security権限で実行できます。たとえば、ユーザーの権利にOracle Label Security権限がなくても、WRITEDOWN権限を持つストアド・プログラム・ユニットを実行すれば、ラベルを更新できます。この場合、使用されるのは、ユーザー自身の権限ではなくストアド・プログラム・ユニットの権限です。
トラステッド・プログラム・ユニットにより、権限付きの操作を制御された方法でカプセル化できます。権限が割り当てられているプロシージャ、パッケージおよびファンクションを使用することで、各自のラベルと権限では認可されないデータにアクセスできます。たとえば、参照可能なデータのみでなく、表のすべてのデータに対して集計関数を実行するには、管理者により設定されたトラステッド・プログラムを使用します。これにより、プログラム・ユニットでユーザーのかわりに操作を実行でき、ユーザーに権限を直接付与する必要はありません。
管理者は、Oracle Label Securityポリシーを個々の表に適用するときに、ポリシー施行オプション・セットの中から選択できます。これらのオプションを使用すると、データベース表ごとに施行を様々に調整できます。ラベルに基づくアクセス制御のみでなく、SQL述語を各表に関連付けることもできます。述語により、表のうちユーザーがアクセスできる行をさらに厳密に定義できます。ポリシー施行オプションと述語については、第9章「ポリシー施行オプションとラベル付けファンクションの実装」を参照してください。
新規または更新する行に対応付けられているラベルを自動的に計算する必要がある場合、管理者はポリシーの適用時にラベル付けファンクションを指定できます。アクティブなラベル付けファンクションはラベルを提供する他の手段よりも優先されるため、以降、そのファンクションは常にコールされ、ポリシーに基づいて書き込まれるデータ・ラベルを提供します。
特に明記されている場合を除き、このマニュアルではすべての施行オプションが有効になっているものと想定しています。
この項では、複数のポリシーを使用する場合の様々な側面について説明します。
単一データベース内のデータが複数のOracle Label Securityポリシーで保護されている場合があります。定義済の各ポリシーは、そのポリシーでのみ使用されるラベル・セットに対応付けられています。データ・ラベルには、各ポリシーの定義済ラベル・セットによる制約が適用されます。
各ポリシーは異なる表を保護しますが、複数のポリシーを単一の表に適用することもできます。データにアクセスするには、そのデータを保護しているポリシーすべてについて、ラベル認可が必要です。特定の行にアクセスするには、目的の行を含む表を保護するすべてのポリシーによって認可されている必要があります。権限が必要な場合は、作業に影響するすべてのポリシーの権限を必要とする場合があります。