Oracle Label Securityにより、行レベルのセキュリティを強制できます。
トピック:
関連項目:
Oracle Label Security管理者ガイド
Oracle Label Security(OLS)は、データベース表に行レベルのセキュリティを提供します。セキュリティのレベルを定義する1つまたは複数のセキュリティ・ラベルを表のデータ行に割り当てることで、セキュリティを実装できます。
この機能では、データベース表を行レベルで保護し、セキュリティ・ラベルに基づいてこれらの行に異なるセキュリティ・レベルを割り当てます。その後、OLSラベルに基づいてユーザーのセキュリティ認可を作成できます。
たとえば、非常に機密性の高いデータを含む行にはHIGHLY SENSITIVE
というラベルを割り当て、機密性がそれほど高くないデータを含む行にはSENSITIVE
というラベルを割り当てたりできます。すべてのユーザーがアクセスできる行にはPUBLIC
というラベルを割り当てます。ラベルは必要なだけ作成でき、使用する環境のセキュリティ要件に適合させることができます。マルチテナント環境では、ラベルはローカル・プラガブル・データベース(PDB)に適用され、セッション・ラベルはローカル・ユーザーに適用されます。
ラベルを作成して割り当てたら、Oracle Label Securityを使用して、これらのラベルに基づき特定の行に特定のユーザー認可を割り当てます。以降、Oracle Label Securityはデータ行のラベルとユーザーのセキュリティ・クリアランスを自動的に比較し、行のデータにユーザーがアクセスできるかどうかを決定します。
Oracle Label Securityポリシーには次のコンポーネントがあります。
ラベル。データおよびユーザー、ユーザーとプログラム・ユニットの認証のラベルは、保護されている特定のオブジェクトへのアクセスを制御します。ラベルは、次の要素で構成されています。
レベル。レベルにより、行に割り当てる機密性のタイプ(たとえば、SENSITIVE
やHIGHLY SENSITIVE
など)が指定されます。
コンパートメント。(オプション)データは、レベルが同じでも、企業内の別々のプロジェクト(たとえばACME MergerやIT Securityなど)に属すことができます。コンパートメントはこの例ではプロジェクトのことで、より厳密なアクセス制御を定義できます。コンパートメントは行政環境でよく使用されます。
グループ。(オプション)グループは、データを所有する組織またはデータにアクセスする組織を識別します。たとえば、UK、US、Asia、Europeなどです。グループは商業環境と行政環境の両方で使用され、柔軟性が高いことからコンパートメントのかわりに使用されることもあります。
ポリシー。ポリシーは、ラベル、ルール、認証と関連付けられる名前です。
Oracle Label Securityのラベルとポリシーは、Enterprise Managerで作成するか、SA_SYSDBA
、SA_COMPONENTS
、SA_LABEL_ADMIN
PL/SQLパッケージを使用して作成できます。PL/SQLパッケージの詳細は、Oracle Label Security管理者ガイドを参照してください。このマニュアルには、Enterprise Managerを使用してOracle Label Securityのラベルとポリシーを作成する方法が記載されています。
たとえば、ユーザーがアプリケーション表のSELECT
権限を持っているとします。次の図にあるように、ユーザーがSELECT
文を実行すると、Oracle Label Securityは選択された各行を評価して、このユーザーがアクセスできるかどうかを決定します。決定は、セキュリティ管理者がユーザーに割り当てた権限とアクセス・ラベルに基づいて行われます。Oracle Label Securityを設定して、UPDATE
、DELETE
、INSERT
文でもセキュリティ・チェックを行うことができます。
Oracle仮想プライベート・データベース(VPD)、Oracle Label Security (OLS)およびOracle Data Redactionでは、データベース表で表示できるデータをユーザーごとに制限することができます。
しかし、どの機能を使用すべきでしょうか。仮想プライベート・データベースは、アクセス要件の決定に利用できる既存のデータがある場合に効果的です。たとえば、営業担当者はその本人が入力した顧客注文表の行と列しか閲覧できないように構成できます。Oracle Label Securityは、表のアクセス要件の指定に利用できる一般的なデータ(ユーザー・アカウント、従業員IDなど)がないときに便利です。このタイプのユーザー・アクセス権を決定する場合は、表の行に機密性のレベルを割り当てます。Oracle Data Redactionでは、3つの異なる(リダクション)スタイルから選択できます。リダクションは、ユーザーがデータにアクセスしたときに適用され、データベース表に直接は適用されません。
Oracle Virtual Private DatabaseとOracle Label Securityが相互に補完しあう場合もあります。次の実習形式のOracle Technology Networkチュートリアルでは、仮想プライベート・データベース・ポリシーでOracle Label Securityユーザー・クリアランスと最小クリアランスを比較する方法が示されています。ユーザー・クリアランスがしきい値を超えている場合、Salary
列は非表示になりません。
http://www.oracle.com/technetwork/database/security/ols-cs1-099558.html
表8-1では、Oracle Virtual Private Database,、Oracle Label SecurityおよびOracle Data Redactionの機能を比較しています。
表8-1 Virtual Private Database、Label SecurityおよびData Redactionの比較
機能 | VPD | OLS | Data Redaction |
---|---|---|---|
完全マスキング、部分マスキングおよびランダム・マスキングを提供 |
不可 |
不可 |
可 |
ユーザーのアクセス時にリアルタイムでデータをリダクション |
不可 |
不可 |
可 |
行レベル・セキュリティの提供 |
可 |
可 |
不可 |
列レベル・セキュリティ(列マスク)の提供 |
可 |
不可 |
可 |
表、ビューまたはシノニムへのユーザー定義のPL/SQLパッケージのバインド |
可 |
なし脚注 1 |
不可 |
PL/SQLプロシージャから戻される |
可 |
不可 |
不可 |
権限を持っているユーザーによるデータベース操作の制限 2 |
不可 |
不可 |
不可 |
行の機密性ラベルおよびユーザーのセキュリティ・レベルに基づいた一連の行へのアクセスの制御 |
不可 |
可 |
不可 |
保護されている表に行の機密性ラベルを格納するように設計された列(オプションで非表示)の追加 3 |
不可 |
可 |
不可 |
自身を管理するユーザー・アカウントの提供 |
なし脚注4 |
あり脚注5 |
不可 |
行レベル・セキュリティに対する事前定義済のPL/SQLパッケージの提供 |
不可 |
可 |
不可 |
Oracle Databaseのデフォルトのインストールでの提供 |
可 |
可 |
可 |
Oracle Databaseの追加オプションとしての提供(ライセンスが付与されている必要あり) |
不可 |
不可 |
可 |
脚注1
Oracle Label Securityは、表にセキュリティ・ポリシーをアタッチする際に、ユーザーが作成したパッケージではなく、事前定義されたPL/SQLパッケージを使用します。
脚注2
権限ユーザーのアクセスを制限する場合は、Oracle Database Vaultの使用を検討してください。
脚注3
透明性を確保し、追加の列を表示するように設計されていないアプリケーションを破損しないために、通常この列は非表示です。
脚注4
Oracle Virtual Private Databaseはユーザー・アカウントを提供しませんが、Virtual Private Databaseポリシーの管理のみを目的としたユーザー・アカウントを作成できます。
脚注5
LBACSYS
アカウントは、Oracle Label Securityポリシーを管理します。これによって、特定のユーザー・アカウントがこれらのポリシーに対して責任を負うことから、セキュリティの層が増し、別のユーザーがポリシーを不正に変更する危険性が軽減されます。
Oracle Label Securityポリシーを作成する前 に、アプリケーション・スキーマにラベルを適用する場所と方法を決定する必要があります。
アプリケーション・データのOracle Label Securityポリシーを適用する場所と方法を決定するには、次のガイドラインに従います。
アプリケーション・スキーマを分析します。Oracle Label Securityポリシーを適用する必要がある表を特定します。多くの場合、Oracle Label Securityポリシーが必要となるアプリケーションの表は限られています。たとえば、ルックアップ値や定数を格納している表などは、通常セキュリティ・ポリシーで保護する必要はありません。ただし、患者の病歴や従業員の給与などの機密データを含む表は、ポリシーを使用して保護する必要があります。
データ・レベルの使用状況を分析します。表の特定後、表のデータを評価して、表のセキュリティ・レベルを決定します。分析のこの段階では、ビジネス活動について熟知しているユーザーの意見も参考にしてください。
データ・レベルはデータの機密性を表します。データ・レベルには、PUBLIC
、SENSITIVE
、HIGHLY SENSITIVE
などがあります。今後、機密性がどう変化するかも考慮する必要があります。そうすることで、強固なラベル定義が作成できます。
データ・レコードに割り当てられた機密性ラベルのレベル・コンポーネントが、ユーザーのクリアランスより低いレベルの場合、このレコードにアクセスするユーザーにはこの行へのアクセス権が付与されます。
データ・コンパートメントの使用状況を分析します。データ・コンパートメントは主に、行政環境で使用されます。使用するアプリケーションが商業アプリケーションの場合、多くの場合はデータ・コンパートメントを作成しません。
データ・グループを分析します。データ・グループとデータ・コンパートメントは通常、組織、地域、データ所有者によってデータへのアクセスを制御するために使用されます。たとえば、アプリケーションが販売アプリケーションの場合、国または地域によって販売データへのアクセスを制御できます。
コンパートメントおよびグループと一緒に機密性ラベルがデータ・レコードに割り当てられた場合、このデータを読み取るユーザーは、データ・ラベル、データ・ラベルのすべてのコンパートメント、機密性ラベル内の少なくとも1つのグループのレベルと同等またはそれ以上のレベルのユーザー・クリアランスを持っている必要があります。グループは階層になっているため、データ・ラベルに割り当てられた機密性ラベルの1つのグループの親を所有している場合は、そのレコードにもアクセスできます。
ユーザー分布を分析します。ユーザーを複数のユーザー・タイプに分類します。たとえば、通常ユーザー、特権ユーザー、管理ユーザーのいずれかに指定します。ユーザーのカテゴリを作成したら、手順2で作成したデータ・レベルと比較します。カテゴリは、手順1で実行したスキーマ分析で識別した各表に正確に対応する必要があります。次に、ユーザー分布の組織構造を手順4で識別したデータ・グループと比較します。
特権ユーザーと管理ユーザーを確認して、割り当てるOracle Label Security認可を決定します。Oracle Label Securityには、ユーザーに割り当てることのできる特別な認可が複数あります。多くの場合、通常ユーザーに特別な認可は必要ありません。認可の詳細は、『Oracle Label Security管理者ガイド』を参照してください。
収集したデータを確認し、ドキュメント化します。この手順は企業全体の連続性を維持するために重要であり、ドキュメントは企業のセキュリティ・ポリシーの一部となります。たとえば、このドキュメントには保護されるアプリケーションのリストとその理由などが含まれます。
ユーザーに基づいて異なるレベルで表データへのOracle Label Securityアクセスを作成できます。
トピック:
このチュートリアルでは、Oracle Label Securityを使用する一般的な方法を説明します。
このチュートリアルでは、HR.LOCATIONS
表にセキュリティ・ラベルを適用します。ユーザーsking
、kpartner
、ldoran
は、この表内の特定の行に対して、LOCATIONS
表の都市に基づくアクセス権を持っています。
Oracle Label Securityを使用して、行データに焦点を当て、データの機密性に基づいて様々なアクセス・レベルを設計することにより、ユーザーによるデータ・アクセスを制限します。ユーザー権限または組織内のユーザーのジョブ・タイトルなどの他の方法に焦点を当ててユーザー・アクセスを制限する必要がある場合、仮想プライベート・データベース・ポリシーとともに使用するPL/SQLファンクションまたはプロシージャを作成できます。詳細は、「Oracle Virtual Private Databaseを使用したアクセスの制限」 を参照してください。
HR.LOCATIONS
のスキーマは次のようになります。
Name Null? Type ----------------------------------------- -------- ------------- LOCATION_ID NOT NULL NUMBER(4) STREET_ADDRESS VARCHAR2(40) POSTAL_CODE VARCHAR2(12) CITY NOT NULL VARCHAR2(30) STATE_PROVINCE VARCHAR2(25) COUNTRY_ID CHAR(2)
次のラベルを適用します。
ラベル | 権限 |
---|---|
|
ミュンヘン、オックスフォード、ローマに読取りアクセス権を付与します。 |
|
北京、東京、シンガポールに読取りアクセス権を付与します。 |
|
|
デフォルトのOracle DatabaseのインストールでOracle Label Securityはインストールされますが、手動で有効にする必要があります。
Oracle Label Securityを有効にする手順:
SYSDBA
管理権限を持つユーザーSYS
として、データベース・インスタンスにログインします。
次に例を示します。
sqlplus sys as sysdba
Enter password: password
Oracle Label Securityがデータベースに登録されているかどうかを確認します。
SELECT STATUS FROM DBA_OLS_STATUS WHERE NAME = 'OLS_CONFIGURE_STATUS';
TRUE
が返される場合、Oracle Label Securityはデータベースに登録されています。出力がFALSE
の場合は、次の手順を実行します。
EXEC LBACSYS.CONFIGURE_OLS;
Oracle Label Securityが有効がどうかを確認します。PARAMETER
列では大/小文字が区別されるため、ここに示されているとおりに入力してください。
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';
TRUE
が返される場合、Oracle Label Securityは有効です。「手順2: LBACSYSアカウントの有効化」に進みます。FALSE
が返される場合は、次の手順を実行して有効にします。
EXEC LBACSYS.OLS_ENFORCEMENT.ENABLE_OLS;
Oracle Label Securityの登録と有効化が必要だった場合は、SYSOPER
権限を使用してユーザーSYS
として接続します。
CONNECT sys as sysoper
Enter password: password
データベースを再起動します。
SHUTDOWN IMMEDIATE STARTUP
Oracle Label Securityを有効にしたら、LBACSYS
と呼ばれるデフォルトのOracle Label Securityアカウントを有効にする必要があります。
Oracle Label SecurityのLBACSYSユーザー・アカウントを有効にするには、次のようにします。
ターゲット・データベースのデータベース・ホームページに、SYSDBA
管理権限を使用してユーザーSYS
としてアクセスします。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。
「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。
LBACSYSアカウントを選択し、「編集」をクリックします。
アカウントがアクティブ(ステータスがOPEN
)の場合、「手順3: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成する」に進みます。
ユーザーの編集: LBACSYSページで、次の設定を入力します。
「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。
ステータス: ステータスをロック解除に設定します。
「適用」をクリックします。
「システム権限」タブを選択します。
システム権限ページで「リストの編集」ボタンを選択します。
システム権限の変更ページで、「使用可能なシステム権限」リストから「SELECT ANY DICTIONARY」を選択し、「選択したシステム権限」リストに移動します。「OK」をクリックします。
ユーザーの編集ページで「適用」をクリックします。
emp_role
ロールは、これから作成する3人のユーザーに必要な権限を付与します。
emp_roleロールを作成するには、次のようにします。
データベースのホームページにアクセスします。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。NORMAL
権限を持つユーザーSYSTEM
としてログインします。
「管理」メニューから、「セキュリティ」を選択し、「ロール」を選択します。
ロール・ページで、「作成」をクリックします。
ロールの作成ページの「名前」フィールドでEMP_ROLE
と入力し、「認証」は「なし」のままにします。
「オブジェクト権限」サブページを選択します。
「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。
「表オブジェクト権限の追加」ページが表示されます。
「表オブジェクトの選択」でHR.LOCATIONS
と入力し、HR
スキーマのLOCATIONS
表を選択します。次に「使用可能な権限」で、SELECT
を「選択した権限」リストに移動します。
「OK」をクリックして「ロールの作成」ページに戻り、「OK」をクリックして「ロール」ページに戻ります。
作成する必要がある3人のユーザーは、その職に応じて、HR.LOCATIONS
表への異なるレベルのアクセス権を持つことになります。
Steven King(sking
)は広報部長で、HR.LOCATIONS
表への完全な読取りアクセス権を持ちます。Karen Partners(kpartner
)は販売部マネージャでより制限されたアクセス権を持ち、Louise Doran(ldoran
)は販売担当者でアクセス権が最も制限されています。
ユーザーを作成するには、次のようにします。
「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。
ユーザー・ページが表示されます。
「作成」をクリックします。
ユーザーの作成ページで、次の情報を入力します。
名前: SKING
プロファイル: DEFAULT
認証: パスワード
「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。
デフォルト表領域: EXAMPLE
一時表領域: TEMP
ステータス: 「ロック解除」に設定します。
ロール: 「ロール」サブページを選択し、「リストを編集」を選択してemp_role
ロールをsking
に付与します。「使用可能なロール」リストからemp_role
を選択し、「移動」をクリックして「選択したロール」リストに移動します。「OK」をクリックします。「ユーザーの作成」ページで、CONNECT
ロールとemp_role
ロールの両方で「デフォルト」ボックスが選択されていることを確認します。
システム権限: システム権限サブページを選択し、「リストの編集」をクリックしてCREATE SESSION
権限を付与します。sking
にはADMIN OPTION
オプションを付与しないでください。
「OK」をクリックして「ユーザーの作成」ページに戻り、そこで「OK」をクリックして「ユーザー」ページに戻ります。
「ユーザー」ページでSKING
を選択し、「アクション」を「類似作成」に設定して「実行」をクリックします。
ユーザーの作成ページで、kpartner
およびldoran
にアカウントを作成してください。
名前とパスワードを作成します。(「パスワードの作成要件」を参照してください。)ロールやシステム権限を付与する必要はありません。これらのアカウントのロールおよびシステム権限は、sking
アカウントで定義され、自動的に作成されます。
この段階で、同じ権限を持つ3人のユーザーが作成されました。これらのすべてのユーザーは、EMP_ROLE
ロールによってHR.LOCATIONS
表に対するSELECT
権限を持っています。
ユーザー・アカウントを作成した後、ACCESS_LOCATIONS
ポリシーを作成できます。
ACCESS_LOCATIONSポリシーを作成する手順は、次のとおりです。
NORMALロールが選択されているユーザーLBACSYS
として、Enterprise Managerターゲット・データベースにログインします。
「管理」メニューから、「セキュリティ」、「Oracle Label Security」を選択します。
ラベル・セキュリティ・ポリシー・ページで、「作成」をクリックします。
「Label Securityポリシーの作成」ページで、次の情報を入力します。
名前: ACCESS_LOCATIONS
ラベル列: OLS_COLUMN
以降で、表にポリシーを適用するときに、このラベル列が表に追加されます。デフォルトでは、ポリシーのラベル列のデータ型はNUMBER(10)
です。
ラベル列の非表示: ラベル列が非表示にならないように、このボックスの選択を解除します。(デフォルトでは選択が解除されています。)
通常、ラベル列は非表示にしますが、開発段階ではチェックできるように表示しておきます。ポリシーの作成が完了し、使用が開始された後、アプリケーションから見えないようにこの列は非表示にします。多くのアプリケーションは、新たな列を表示するようには設計されていないため、列を非表示にすると、アプリケーションが破損しなくなります。
有効: このボックスを選択すると、ポリシーが有効になります。(デフォルトで有効にする必要があります。)
インバース・ユーザーの読取りおよび書込みグループ(INVERSE_GROUP): このオプションは選択しないでください。
デフォルトのポリシー強制オプション: 「ポリシー強制の適用」を選択して、次のオプションを選択します:
すべての問合せ用(READ_CONTROL)
ラベル列のUPDATE操作にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)
「OK」をクリックします。
ACCESS_LOCATIONS
ポリシーが「Label Securityポリシー」ページに表示されます。
この段階では、ポリシーが作成され、ポリシーの強制オプションが設定されています。次に、ポリシーで使用するラベル・コンポーネントを作成します。
少なくとも、PUBLIC
またはSENSITIVE
など、1つ以上のレベルを作成し、詳細名、短縮名、機密性レベルを表す数値を定義する必要があります。区分およびグループはオプションです。
レベル数値は、対応するラベルに必要な機密性のレベルを表します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、LOW_SENSITIVITY
とHIGH_SENSITIVITY
というレベルを追加する必要が生じた場合、LOW_SENSITIVITY
には7300、HIGH_SENSITIVITY
には7600という数値を割り当て、ポリシーにより作成されるセキュリティ・スケールに適合させることができます。通常、番号が大きいほどデータの機密性が高くなります。
コンパートメントは、ラベルが割り当てられたデータの機密性を表す領域を識別し、レベル内のより詳細なレベルを表します。コンパートメントはオプションです。
グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループは、データを制御された方法で配布したり、組織の変更に適切なタイミングで対処する場合に役立ちます。グループはオプションです。
この手順では、レベル・コンポーネントを定義します。レベル・コンポーネントは、ACCESS_LOCATIONS
ポリシーで作成する必要があるSENSITIVE
、CONFIDENTIAL
、PUBLIC
ラベルの名前と関係に影響します。
ACCESS_LOCATIONSポリシーのラベル・コンポーネントを定義する手順は、次のとおりです。
「Label Securityポリシー」ページでACCESS_LOCATIONSポリシーを選択し、次に「編集」を選択します。
Label Securityポリシーの編集ページで、ラベル・コンポーネント・サブページを選択します。
「レベル」で、「 5行追加」をクリックし、次のように詳細名、短縮名および数値タグを入力します(フィールド間を移動するには、[Tab]キーを押します)。
詳細名 | 短縮名 | 数値タグ |
---|---|---|
|
|
|
|
|
|
|
|
|
「適用」をクリックします。
この手順では、ACCESS_LOCATION
ポリシーのデータ・ラベルを作成します。
データ・ラベルを作成するには、各レベルに数値タグを割り当てる必要があります。このタグの数値は、後でポリシーを表に適用するときにセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。
データ・ラベルを作成する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーの選択ボタンを選択します。
「アクション」リストで「データ・ラベル」を選択し、次に「実行」をクリックします。
データ・ラベル・ページで、「追加」をクリックします。
データ・ラベルの作成ページで、次の情報を入力します。
数値タグ: 1000
を入力します。
レベル: PUB
と入力します。
「OK」をクリックします。
「データ・ラベル」ページにデータ・ラベルが表示されます。
もう一度「追加」をクリックし、CONF
レベルのデータ・ラベルを次のように作成します。
数値タグ: 2000
と入力します。
レベル: リストからCONF
を選択します。
「OK」をクリックします。
もう一度「追加」をクリックし、SENS
レベルのデータ・ラベルを次のように作成します。
数値タグ: 3000
と入力します。
レベル: リストからSENS
を選択します。
「OK」をクリックします。
データ・ラベル・ページにCONF
、PUB
およびSENS
ラベルが表示されます。
後で、HR.LOCATIONS
表にポリシーを適用したときに、タグの数値はセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。
次に、ポリシーのユーザー認可を作成します。
ポリシーに対するユーザー認証を作成する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONS
ポリシーの選択ボタンを選択します。
「アクション」リストで「認可」を選択し、次に「実行」をクリックします。
認可ページで、「ユーザーの追加」をクリックします。
ユーザーの追加: ユーザー・ページの「データベース・ユーザー」で、「追加」をクリックします。
「検索と選択: ユーザー」ページが表示されます。SKING
と入力して、「実行」をクリックします。
通常、データベース・ユーザー・アカウントは、たとえばCREATE USER
SQL文を使用してデータベースにすでに作成されています。
その他のオプションは「データベース以外のユーザー」です。アプリケーション・ユーザーの多くは、データベース・ユーザー以外のユーザーとなります。データベース・ユーザー以外のユーザーは、データベース内には存在していません。Oracle Label Securityの命名方式に一致し、VARCHAR2(30)
の長さのフィールドに適合していれば、どのユーザー名も追加できます。ただし、アプリケーションがデータベースに接続したときに、データベース・ユーザー以外のユーザーに関連するセキュリティ情報は、Oracle Databaseにより自動的には構成されません。この場合、アプリケーションは、Oracle Label Security関数を呼び出し、データベース・ユーザーではないユーザーのラベル認可を行う必要があります。
ユーザーSKING
のチェック・ボックスを選択して、「選択」をクリックします。
「ユーザーの作成」ページにユーザーSKING
が表示されます。
ユーザーSKINGのチェック・ボックスを選択して、「次へ」をクリックします。
(SKING
のチェック・ボックスを表示するために、ページの更新が必要な場合があります。)
「権限」ページで「次へ」を選択して、「監査」ページに移動します。
ラベル認可を介してポリシーが強制されます。「権限」ページではユーザーによるポリシーのラベル認可をオーバーライド可能にするため、オプションは選択しないでください。
「レベル、区分およびグループ」ページで、次の設定を入力します。
最大レベル: SENS
(SENSITIVE
)
最小レベル: CONF
(CONFIDENTIAL
)
デフォルト・レベル: SENS
行レベル: SENS
「次」をクリックして、監査ページに移動します。
「ユーザーの追加: 監査」ページの「監査」ペインで、すべての監査の操作がNone
に設定されていることを確認し、「次へ」をクリックします。
確認ページが表示されます。
設定が正しいことを確認し、「終了」をクリックします。
「確認」ページに、選択したすべての認可設定が表示されます。
手順4から12までを繰り返してユーザーKPARTNER
に対して次の認可を作成し、このユーザーがHR.LOCATIONS
の機密データおよびパブリック・データを読み取れるようにします。
権限: 権限は選択しません。
ラベル、コンパートメントおよびグループ: 4つすべてのレベルを次のように設定します。
最大レベル: CONF
(CONFIDENTIAL
)
最小レベル: PUB
(PUBLIC
)
デフォルト・レベル: CONF
行レベル: CONF
監査:すべてNone
に設定します。
ユーザーLDORAN
に対して次の認可を作成します。このユーザーは、HR.LOCATIONS
のパブリック・データの読取りのみが許可されます。
権限: 権限は選択しません。
レベル、区分およびグループ: 4つすべてのレベルをPUB
に設定します。
監査:すべてNone
に設定します。
次に、HR.LOCATIONS
表にポリシーを適用します。
ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONS
ポリシーの選択ボタンを選択します。
「アクション」リストで「適用」を選択し、次に「実行」をクリックします。
適用ページで、「作成」をクリックします。
「表の追加」ページが表示されます。
「表」フィールドに、HR.LOCATIONS
と入力します。
「ポリシー列の非表示」ボックスが選択されていないことを確認します。
「有効」ボックスが選択されていることを確認します。
「ポリシー強制オプション」で、「デフォルトのポリシー強制を使用」を選択します。
「デフォルトのポリシー強制を使用」を選択すると、自動的に次のオプションが選択されます。
すべての問合せ用(READ_CONTROL)
ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)
「OK」をクリックします。
ACCESS_LOCATIONS
ポリシーがHR.LOCATIONS
表に適用されます。
ACCESS_LOCATIONS
ポリシーをHR.LOCATIONS
表に適用したら、ポリシーのラベルをLOCATIONS
のOLS_COLUMN
に適用する必要があります。
ユーザーHR
(表の所有者)がこれを達成するには、ユーザーはLOCATIONS
の非表示OLS_COLUMN
列にデータラベルを追加する前に、場所にFULL
アクセスが必要です。
トピック:
ラベル・セキュリティ管理ユーザーLBACSYS
は、必要な権限をHR
に付与できます。
ACCESS_LOCATIONSポリシーへの完全なアクセス権をHRに付与するには、次のようにします。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーの選択ボタンを選択します。
「アクション」リストから「認可」を選択し、「実行」をクリックします。
認可ページで、「ユーザーの追加」をクリックします。
ユーザーの追加ページの「データベース・ユーザー」で、「追加」をクリックします。
検索と選択ウィンドウで、HR
ユーザーのボックスを選択し、「選択」をクリックします。
ユーザーの追加ページにユーザーHR
が表示されます。
「次」をクリックして権限ページを表示します。
「すべてのラベル・セキュリティ・チェックを省略(FULL)」権限を選択し、「次へ」をクリックします。
「次へ」をクリックして、レベル、区分およびグループ・ページを表示します。
「次へ」をクリックします。
監査ページで、「次」をクリックして確認ページを表示します。
「終了」をクリックします。
この段階で、HR
は他のユーザーとともに「認可」ページにリストされています。
Enterprise Managerを終了しないでください。
この時点で、ユーザーHR
はHR.LOCATIONS
表のOLS_COLUMN
列を更新して、CITY
列の都市に基づいて表内の特定の行に割り当てられるデータ・ラベルを追加できます。
HR.LOCATIONSのOLS_COLUMN表を更新する手順は、次のとおりです。
SQL*Plusで、ユーザーHR
として接続します。
CONNECT HR
Enter password: password
HR
としてログインできない場合、このアカウントはロックされているか、期限が切れているため、SYSTEM
としてログインしてから、次の文を入力します。passwordは、HR
アカウントに適したパスワードに置き換えます。セキュリティを向上させるため、以前のリリースのOracle Databaseで使用されたパスワードを再利用しないでください。「パスワードの作成要件」を参照してください。
ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password
このALTER USER
文を実行したら、ユーザーHR
として再度ログインしてみてください。
次のUPDATE
文を入力して、北京、東京、シンガポールにSENS
ラベルを適用します。
UPDATE LOCATIONS SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','SENS') WHERE UPPER(city) IN ('BEIJING', 'TOKYO', 'SINGAPORE');
次のUPDATE
文を入力して、ミュンヘン、オックスフォード、ローマにCONF
ラベルを適用します。
UPDATE LOCATIONS SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','CONF') WHERE UPPER(city) IN ('MUNICH', 'OXFORD', 'ROMA');
次のUPDATE
文を入力して、残りの都市にPUB
ラベルを適用します。
UPDATE LOCATIONS SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','PUB') WHERE ols_column IS NULL;
列が更新されたことをチェックするには、次の文を入力します。
SELECT LABEL_TO_CHAR (OLS_COLUMN) FROM LOCATIONS;
次の出力が表示されます。
LABEL_TO_CHAR(OLS_COLUMN) ----------------------------------------------------------------------------- CONF PUB SENS PUB PUB PUB PUB PUB PUB PUB SENS PUB PUB SENS PUB CONF PUB CONF PUB PUB PUB PUB PUB 23 rows selected.
注意:
前述の問合せでラベル列名(OLS_COLUMN
)を明示的に使用すると、ラベル列が非表示になっていても表示できます。
ラベル列が非表示であるときに、ラベル列名を明示的に指定しない場合、ラベル列は問合せ結果に表示されません。たとえば、ラベル列が非表示である場合、SELECT * FROM LOCATIONS
問合せを実行しても、ラベル列は表示されません。この機能を使用すると、アプリケーションからラベル列が見えないようにできます。ラベル列が追加される前に設計されたアプリケーションには、ラベル列は認識されず、表示されません。
ACCESS_LOCATIONS
ポリシーの作成は完了しました。次に、ポリシーをテストします。ポリシーは、3人の各ユーザーとしてSQL*Plusにログインし、HR.LOCATIONS
表に対してSELECT
を実行することでテストできます。
ACCESS_LOCATIONSポリシーをテストする手順は、次のとおりです。
SQL*Plusでユーザーsking
として接続します。
CONNECT sking
Enter password: password
次のように入力します。
次のコマンドは、読み取りやすいように表の列幅を書式設定します。この手順を実行するのは、(kpartner
およびldoran
のログイン時も含めて)セッション全体に対して1回のみです。
COL city HEADING City FORMAT a25 COL country_id HEADING Country FORMAT a11 COL Label format a10
次に、SELECT
文を次のように入力します。
SELECT CITY, COUNTRY_ID, LABEL_TO_CHAR (OLS_COLUMN) AS LABEL FROM HR.LOCATIONS ORDER BY OLS_COLUMN;
ユーザーsking
は、HR.LOCATIONS
表の23行すべてにアクセスできます。アクセスはラベルCONF
およびSENS
が付けられた行に対してのみ認可されていますが、ラベルPUB
が付けられた行を読み取ることができます(ただし、書き込むことはできません)。
City Country LABEL ------------------------- ----------- ---------- Venice IT PUB Utrecht NL PUB Bern CH PUB Geneva CH PUB Sao Paulo BR PUB Stretford UK PUB Mexico City MX PUB Hiroshima JP PUB Southlake US PUB South San Francisco US PUB South Brunswick US PUB Seattle US PUB Toronto CA PUB Whitehorse CA PUB Bombay IN PUB Sydney AU PUB London UK PUB Oxford UK CONF Munich DE CONF Roma IT CONF Singapore SG SENS Tokyo JP SENS Beijing CN SENS 23 rows selected.
ユーザーkpartner
とldoran
で、手順1と手順2を繰り返します。
ユーザーKPARTNER
は、ラベルCONF
およびPUB
が付けられた行にアクセスできます。
City Country LABEL ------------------------- ----------- ---------- Venice IT PUB Utrecht NL PUB Bern CH PUB Mexico City MX PUB Hiroshima JP PUB Southlake US PUB South San Francisco US PUB South Brunswick US PUB Seattle US PUB Toronto CA PUB Whitehorse CA PUB Bombay IN PUB Sydney AU PUB London UK PUB Stretford UK PUB Sao Paulo BR PUB Geneva CH PUB Oxford UK CONF Munich DE CONF Roma IT CONF 20 rows selected.
ユーザーLDORAN
は、ラベルPUB
が付けられた行にアクセスできます。
City Country LABEL ------------------------- ----------- ---------- Venice IT PUB Hiroshima JP PUB Southlake US PUB South San Francisco US PUB South Brunswick US PUB Seattle US PUB Toronto CA PUB Whitehorse CA PUB Bombay IN PUB Sydney AU PUB London UK PUB Stretford UK PUB Sao Paulo BR PUB Geneva CH PUB Bern CH PUB Utrecht NL PUB Mexico City MX PUB 17 rows selected.
SQL*Plusを終了します。
コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。
このチュートリアルで使用したコンポーネントを削除するには、次のようにします。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONS
ポリシーを選択して「削除」をクリックします。「確認」ページで、「列の削除」チェック・ボックスを選択してから、「はい」をクリックします。
ACCESS_LOCATIONS
ポリシーを削除すると、HR.LOCATIONS
表からOLS_COLUMN
列も削除されます。
Enterprise Managerからログアウトし、ユーザーSYSTEM
として再度ログインします。
「管理」メニューから、「セキュリティ」を選択し、「ユーザー」を選択します。
ユーザーKPARTNERを選択して「削除」をクリックします。
「確認」ページで「はい」をクリックします。
「データベース・インスタンス」リンクをクリックしてデータベースのホームページに戻ります。
「管理」メニューから、「セキュリティ」を選択し、「ロール」を選択します。
emp_role
ロールを選択し、次に「削除」を選択します。
「確認」ダイアログ・ボックスで、「はい」をクリックします。
Enterprise Managerからログアウトします。
必要に応じて、Oracle Label Securityを無効にします。
SYSDBA
管理権限を持つSYS
として、またはLBAC_DBA
ロールを付与されたユーザーとしてデータベース・インスタンスにログインします。
次に例を示します。
sqlplus lbacsys
Enter password: password
次のプロシージャを実行します。
EXEC LBACSYS.OLS_ENFORCEMENT.DISABLE_OLS
データベースを再起動します。
CONNECT SYS AS SYSOPER Enter password: password SHUTDOWN IMMEDIATE STARTUP