Oracle Label Security(OLS)は、データベース表に対して行レベルのセキュリティを提供します。データ行は、個々の行にラベルを付けることで保護されます。ポリシーで保護されているデータ行にアクセスするユーザーには、その行のOLSラベルで判断される適切な認可が必要です。
この章は、OLSの円滑な開始に役立ちます。簡単なOLSポリシーの作成に関連するタスクを説明します。この章では、サンプルOLSポリシーの作成とテストに役立つシナリオも使用します。この章の内容は、次のとおりです。
Oracle Label Security (OLS)は、デフォルトのOracle Databaseのデフォルトのインストールには含まれていません。OLSを既存のデータベースにインストールするには、Oracle Universal Installerを使用します。OLSでは独自のユーザー・アカウントLBACSYS
が提供されます。このアカウントは、インストール終了後に有効化する必要があります。
この項には、次の項目が含まれます。
Oracle Label Securityのインストール
ここでは、Oracle Label Securityを既存のデータベースにインストールする方法について説明します。
注意: Oracle Universal Installer(OUI)を実行してOracle Label Securityをインストールするには、その前に、データベース・インスタンスを停止する必要があります。Windowsを使用している場合は、対応するデータベース・サービスも停止してください。データベース・サービスを停止しないと、インストール時にサービスの停止を促すプロンプトが表示されます。 |
Oracle Label Securityをインストールする手順は、次のとおりです。
インストール・メディアからOracle Universal Installerを実行します。
UNIX: 次のコマンドを使用します。
/mnt/cdrom/runInstaller
Windows: インストール・メディアのsetup.exe
ファイルをダブルクリックします。
「ようこそ」画面が表示されます。
「次へ」をクリックします。
「インストール方法の選択」画面が表示されます。
「拡張インストール」を選択します。「次へ」をクリックします。
「インストール・タイプの選択」画面が表示されます。
「カスタム」を選択します。「次へ」をクリックします。
「ホームの詳細の指定」画面が表示されます。
正しいOracleベースとOracleホーム・ディレクトリが選択されていることを確認します。「次へ」をクリックします。
この時点で、システムが最小限の要件を満たしているかどうかが検証されます。次に、「使用可能な製品コンポーネント」画面が表示されます。
Oracle Label Securityに対応するチェック・ボックスを選択します。このオプションは、Oracle Database 11g Enterprise Editionのオプションに分類されています。「次へ」をクリックします。
「サマリー」画面が表示されます。
選択内容を確認し、「インストール」をクリックします。
進捗状況を示す画面が表示されます。
「インストールの終了」画面が表示されます。「終了」をクリックします。
データベースへのOracle Label Securityの登録
インストールを完了した後は、Oracle Label Securityをデータベースに登録する必要があります。
Oracle Label Securityをデータベースに登録する手順は、次のとおりです。
Database Configuration Assistant(DBCA)を開始します。
UNIX: 次のコマンドを実行します。
$ORACLE_HOME/bin/dbca
Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - ORACLE_HOME」→「Configuration and Migration Tools」→「Database Configuration Assistant」の順にクリックします。
「ようこそ」画面が表示されます。
「次へ」をクリックします。
「操作」画面が表示されます。
「データベース・オプションの構成」を選択します。「次へ」をクリックします。
「データベース」画面が表示されます。
リストから、Oracle Label Securityをインストールしたデータベースを選択します。「次へ」をクリックします。
「データベース・コンテンツ」画面が表示されます。
「Oracle Label Security」を選択します。「次へ」をクリックします。
「接続モード」画面が表示されます。
「専用サーバー・モード」または「共有サーバー・モード」を選択します。「終了」をクリックします。
操作にはデータベースの再起動が必要があることを知らせるダイアログ・ボックスが表示されます。
「OK」をクリックします。
確認ダイアログ・ボックスが表示されます。
「OK」をクリックします。
DBCAの進捗状況を示す画面が表示されます。
操作が完了すると、別の操作を実行するためのプロンプトが表示されます。「いいえ」をクリックしてDBCAを終了します。
LBACSYSユーザー・アカウントの有効化
OLSインストール・プロセスでは、LBACSYS
というデフォルトのユーザー・アカウントが作成されます。このアカウントにはOLSを管理する権限が付与されています。デフォルトでは、LBACSYS
は、パスワードの期限が切れている、ロックされたアカウントとして作成されます。次の手順では、LBACSYS
をロック解除し、新しいパスワードを作成します。LBACSYS
にSELECT ANY DICTIONARY
システム権限を付与することも必要です。この権限によって、LBACSYS
はEnterprise Managerにログインできます。
LBACSYSのロックを解除して、新しいパスワードを作成する手順は、次のとおりです。
SYSTEM
ユーザーとしてDatabase Controlにログインします。
「スキーマ」タブをクリックします。
「ユーザーおよび権限」の下の「ユーザー」をクリックします。
「ユーザー」ページが表示されます。
LBACSYSを選択します。「編集」をクリックします。
「ユーザーの編集」ページが表示されます。
ステータスを「ロック解除」に変更します。
「パスワードの入力」フィールドにパスワードを入力します。「パスワードの確認」フィールドにパスワードを再度入力します。
「システム権限」タブをクリックします。
SELECT ANY DICTIONARY
システム権限を選択します。
「適用」をクリックします。
ポリシーの作成は、ポリシーの名前、ラベル列およびポリシーの施行オプションを定義することから開始します。
デフォルトのポリシー施行オプションを使用してポリシーを作成する手順は、次のとおりです。
LBACSYS
アカウントを使用してOracle Enterprise Manager Database Controlにログインします。
「サーバー」タブをクリックします。
「セキュリティ」の下の「Oracle Label Security」をクリックします。「Label Securityポリシー」ページが表示されます。
「作成」をクリックし、新しいLabel Securityポリシーの作成を開始します。
「Label Securityポリシーの作成」ページが表示されます。
ポリシーの名前、ラベル列およびデフォルトのポリシー施行オプションを定義します。
名前: ポリシーの名前を入力します(例: ACCESS_LOCATIONS
)。
ラベル列: ラベル列の名前を入力します(例: OLS_COLUMN
)。後でポリシーを表に適用するときに、このラベル列がその表に追加されます。デフォルトでは、ポリシーのラベル列のデータ型はNUMBER(10)
です。NUMBER(10)
データ型の既存の表の列をラベル列として使用することもできます。
ラベル列の非表示: 列を非表示にする場合に選択します。ポリシーを初めて作成する場合、ポリシーの開発中は「ラベル列の非表示」を無効にできます。ポリシーが完成し使用準備が整った時点で、アプリケーションに対して透過的になるように列を非表示にします。
有効: ポリシーを有効または無効に切り替えます。
強制オプション: ポリシーの適用時に、デフォルトのポリシー施行オプションが使用されます。これらのオプションが、ポリシーを適用するアプリケーションのニーズと一致していることを確認してください。
次のオプションから選択します。
ポリシー強制を適用しない(NO_CONTROL)
ポリシー強制の適用
すべての問合せ用(READ_CONTROL)
INSERT操作用(INSERT_CONTROL)
UPDATE操作用(UPDATE_CONTROL)
ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)
ラベル列を更新する操作(LABEL_UPDATE)
読取りアクセスが可能になるUPDATEおよびINSERT操作(CHECK_CONTROL)
「OK」をクリックします。
新しいポリシーが「Oracle Label Securityポリシー」ページに表示されます。
前述のステップでは、ポリシーのコンテナを作成し、そのコンテナに対して施行オプションを設定しました。次に、ポリシーのラベル・コンポーネントを作成する必要があります。
ラベル・コンポーネントを作成する手順は、次のとおりです。
「Oracle Label Securityポリシー」ページで、前述のステップで作成したポリシーを選択します。「編集」をクリックします。
「Label Securityポリシーの編集」ページで、「ラベル・コンポーネント」タブを選択します。
「レベル」の下の「5行追加」をクリックし、ポリシーのレベルを追加します。作成する各レベルに対して、詳細名、短縮名および数値タグを入力します。この数値タグは、レベルの機密性に対応しています。レベルをさらに作成する場合は、「5行追加」を再度クリックします。同じ手順を使用して、区分と行を作成します。区分とグループの場合、数値タグは機密性に対応していません。
少なくとも1つのレベル(SECRETなど)を作成する必要があります。区分とグループの作成はオプションです。
レベル番号は、対応しているラベルの機密性レベルを示します。番号が大きいほど機密性が大きいことを意味します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、レベルをPUBLIC(7000)とSENSITIVE(8000)として作成すると、後でCONFIDENTIALという中間レベルを作成することになった場合に、このレベルに対して7500という数値を割り当てることができます。
区分は、データに関連付けられているカテゴリを識別し、レベル内にさらに細分化したレベルを提供します。たとえば、1つの表に様々な部門に対応したデータがあり、そのデータを分類するために区分が必要な場合があります。区分はオプションです。
グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループは、データを制御された方法で送信したり、組織の変更に適切なタイミングで対処する場合に役立ちます。グループはオプションです。
「適用」をクリックします。
これまでのステップによって、ポリシーのデータ・ラベルを作成する準備が整いました。各データ・ラベルには、レベルを必ず1つのみ関連付ける必要があります。ラベルには、必要に応じて1つ以上の区分とグループを追加できます。
データ・ラベルを作成するには、数値タグをラベルに割り当てる必要があります。このタグの数値は、後でポリシーを表に適用するときにセキュリティ列に格納されます。ラベル・タグは、ラベルの機密性(レベル)にリンクしていません。単にラベルを識別するために使用されます。
各レベルのデータ・ラベルを作成する手順は、次のとおりです。
「Label Securityポリシー」ページで、ラベルをレベルにリンクする必要のあるポリシーを選択します。
「アクション」ボックスで、「データ・ラベル」を選択します。「実行」をクリックします。
「データ・ラベル」ページが表示されます。
「追加」をクリックします。
「データ・ラベルの作成」ページが表示されます。
次の情報を入力します。
数値タグ: ラベルを一意に識別する番号を入力します。この番号は、すべてのポリシーにわたって一意である必要があります。
レベル: リストからレベルを選択します。
必要に応じて、ラベルに追加する区分を選択できます。区分を追加するには、「区分」の下の「追加」をクリックします。ラベルに追加する区分を選択します。「選択」をクリックして区分を追加します。
必要に応じて、ラベルに追加するグループを選択できます。グループを追加するには、「グループ」の下の「追加」をクリックします。ラベルに追加するグループを選択します。「選択」をクリックしてグループを追加します。
「データ・ラベルの作成」ページの「OK」をクリックします。
データ・ラベルが「データ・ラベル」ページに表示されます。
これまでのステップによって、Oracle Label Securityポリシーに対してユーザーを認可する準備が整いました。
OLSポリシーに対してユーザーを認可する手順は、次のとおりです。
「Label Securityポリシー」ページで、認可が必要なポリシーを選択します。
「アクション」ボックスで、「認可」を選択します。「実行」をクリックします。
「ユーザーの作成」ページが表示されます。
次の手順でユーザーを追加します。
「データベース・ユーザー」の下の「追加」をクリックします。「検索と選択」ウィンドウで、目的のユーザーを選択して「選択」をクリックします。
「データベース以外のユーザー」については、その下の「5行追加」をクリックし、追加対象となるデータベース以外のユーザーのユーザー名を追加します。ほとんどのアプリケーション・ユーザーは、データベース以外のユーザーと考えられます。データベース以外のユーザーはデータベースには存在しません。ユーザー名には、Oracle Label Securityのネーミング規格を満たし、VARCHAR2
(30)の長さのフィールドに収まる任意の名前を指定できます。ただし、アプリケーションがデータベースに接続する際、データベース以外のユーザーに関するセキュリティ情報は自動的に構成されないことに注意してください。この場合、アプリケーションでは、Oracle Label Securityのファンクションをコールして、実質的なデータベース・ユーザーでない特定ユーザーのラベル認可を想定する必要があります。
「ユーザーの作成」ページで、認可するユーザーを選択します。「次へ」をクリックします。複数のユーザーが同じ認可を必要としている場合は、同じ認可を必要とするすべてのユーザーを選択します。「次へ」をクリックします。
「権限」ステップが表示されます。
ここでは、前述のステップで選択したユーザーに権限を割り当てることができます。権限によって、データベース・ユーザーはポリシーで施行される特定の制約をバイパスできます。付与する権限を選択します。「次へ」をクリックします。
ユーザーに権限を割り当てない場合は、権限を選択せずに「次へ」をクリックします。
「レベル、区分およびグループ」ステップが表示されます。
次に、ユーザーのユーザー・ラベルを作成する必要があります。「レベル」の下にある懐中電灯アイコンを使用して、次のフィールドに入力する値を選択します。
最大レベル: このユーザーに対する読取りおよび書込みアクセスの最上位レベルを入力します。
最小レベル: 書込みアクセスの最下位レベルを入力します。
デフォルト・レベル: ユーザーがログインする際のデフォルトのレベルを入力します。
最小レベル以上かつ最大レベル以下の値を指定します。
行レベル: ユーザーが表に書き込む際の、行に指定されるレベルを入力します。
「区分」で「追加」をクリックして、ユーザー・ラベルに区分を追加します。追加する区分を選択します。「選択」をクリックします。
追加する各区分については、次のプロパティを選択できます。
書込み: ユーザーは、その区分をラベルの一部として持つデータに書込みができます。
デフォルト: その区分を、ユーザーのデフォルトのセッション・ラベルに追加します。
行: ユーザーが表に書き込む際に、その区分をデータ・ラベルに追加します。
「グループ」の下の「追加」をクリックし、グループをユーザー・ラベルに追加します。グループを選択し、「選択」をクリックします。
追加する各グループについては、次のプロパティを選択できます。
書込み: ユーザーは、そのグループをラベルの一部として持つデータに書込みができます。
デフォルト: そのグループを、ユーザーのデフォルトのセッション・ラベルに追加します。
行: ユーザーが表に書き込む際に、そのグループをデータ・ラベルに追加します。
「次へ」をクリックします。
「監査」ステップが表示されます。
ここでは、選択したユーザーに対してポリシー監査オプションを設定できます。監査オプションは、次の操作に対して設定できます。
適用されたポリシー:
「成功時に監査」では、表またはスキーマへのポリシー適用で、成功した適用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
「失敗時に監査」では、表またはスキーマへのポリシーの適用で、失敗した適用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
削除されたポリシー:
「成功時に監査」では、表またはスキーマからのポリシーの削除で、成功した削除について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
「失敗時に監査」では、表またはスキーマからのポリシーの削除で、失敗した削除について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
設定されたラベルと権限:
「成功時に監査」では、ユーザーの認証および権限の設定で、成功した設定について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
「失敗時に監査」では、ユーザーの認証および権限の設定で、失敗した設定について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
すべてのポリシー固有の権限:
「成功時に監査」では、ポリシー権限の使用で、成功した使用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
「失敗時に監査」では、ポリシー権限の使用で、失敗した使用について監査します。アクセスごとに監査する場合はACCESSを、セッションごとに監査する場合はSESSIONを選択します。
「次へ」をクリックします。
ポリシー認可設定を確認できます。ポリシー認可を作成するには、「終了」をクリックします。「戻る」をクリックして、認可設定を変更することもできます。
次に、OLSポリシーをデータベース表に適用します。
ポリシーをデータベース表に適用する手順は、次のとおりです。
「Label Securityポリシー」ページで、表に適用する必要があるポリシーを選択します。
「アクション」ボックスから「適用」を選択します。「実行」をクリックします。
「適用」ページが表示されます。
ポリシーを表に適用するには、「表」タブを選択します。
注意: ポリシーをスキーマに適用する場合は「スキーマ」タブを選択します。手順は、ポリシーを表に適用する場合と同じです。 |
「作成」をクリックします。
「表の追加」ページが表示されます。
「表」ボックスの横にある懐中電灯アイコンをクリックします。
「検索と選択」ウィンドウの「検索」の下に、次の情報を入力します。
スキーマ: 表が表示されるスキーマの名前を入力します。このフィールドを空のままにすると、すべてのスキーマの表が表示されます。
名前: 必要に応じて表の名前を入力します。このボックスを空のままにすると、スキーマ内のすべての表が表示されます。
ワイルドカードを使用して検索範囲を絞り込むには、パーセント(%)符号を使用します。たとえば、Oの文字で開始する表をすべて検索するには、O%
と入力します。
表を選択し、「選択」をクリックします。
「表の追加」ページが表示されます。
次の情報を入力します。
ポリシー強制オプション: 必要に応じて施行オプションを選択します。これらのオプションは、「ステップ1: ポリシーの作成」でポリシーを作成したときに選択した施行オプションに加えて表に適用されます。
施行オプションを変更しない場合、つまり、前述のステップで作成した内容と同じ施行オプションを使用する場合は、「デフォルトのポリシー強制を使用」を選択します。施行オプションをさらに追加する場合は、リストされている他のオプションを選択します。
Labeling Function: (オプション)新しい行または更新された行に関連付けるラベルを自動的に計算する、ラベル付けの関数を指定します。アクティブなラベル付けの関数は、ラベルを提供する他の方法よりも優先されるため、この関数は常に実行され、ポリシーに書き込まれたデータ・ラベルを提供します。
述語: 必要に応じて、READ_CONTROL
のラベルベースの述語と(AND
またはOR
を使用して)結合する追加の述語を指定します。
「OK」をクリックします。
ポリシーを表に適用した後は、データ・ラベルを表の行に追加する必要があります。これらのラベルは、表内に作成されたポリシーのラベル列に格納されています。表を更新するユーザーには、ポリシーに対するFULLセキュリティ権限が必要です。通常、このユーザーは表の所有者です。
OLSポリシーに対するFULL権限を表の所有者に付与する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーを選択します。
「アクション」ボックスから「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。
「追加」をクリックします。
「ユーザーの作成」ページが表示されます。
「データベース・ユーザー」の下の「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。
表を所有するユーザーに対応するチェック・ボックスを選択します。「選択」をクリックします。
追加されたユーザーが「ユーザーの作成」ページにリストされます。
「次へ」をクリックします。
「権限」ステップが表示されます。
次の権限を選択します。
すべてのラベル・セキュリティ・チェックを省略(FULL)
「次へ」をクリックします。
「レベル、区分およびグループ」ステップが表示されます。
「次へ」をクリックします。
「監査」ステップが表示されます。
「次へ」をクリックします。
「確認」ステップが表示されます。
「終了」をクリックします。
データ・ラベルを表に追加するには、次のようにします。
SQL*Plusで、次の構文を使用してUPDATE
文を入力します。
UPDATE LOCATIONS SET OLS_COLUMN = CHAR_TO_LABEL('OLS_POLICY','DATA_LABEL') WHERE UPPER(TABLE_COLUMN) IN (COLUMN_DATA);
たとえば、LABCSYS
がACCESS_LOCATIONS
というポリシーを作成した後、HR.LOCATIONS
表の北京、東京およびシンガポールの各都市にラベルSENS
を追加するとします。ポリシーのラベル列はROW_LABEL
であるとします。UPDATE
文は、次のようになります。
UPDATE LOCATIONS SET ROW_LABEL = CHAR_TO_LABEL('ACCESS_LOCATIONS','SENS') WHERE UPPER(city) IN ('BEIJING', 'TOKYO', 'SINGAPORE');
実際にラベルが表内に作成されたことを確認する場合は、次のSELECT
文を実行します。
SELECT LABEL_TO_CHAR (ROW_LABEL) FROM LOCATIONS;
この例は、Oracle Label Securityの使用に関する一般的な概念を示します。この例では、セキュリティ・ラベルをHR.LOCATIONS
表に適用します。SKING、KPARTNERS、LDORANの3人のユーザーが、LOCATIONS表にリストされている都市に基づいて、この表内の特定の列にアクセスするようにします。
HR.LOCATIONS
は、次のように定義されています。
SQL> DESCRIBE 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)
ここでは、次のラベルを適用します。
ラベル | 権限 |
---|---|
CONFIDENTIAL | ミュンヘン、オックスフォード、ローマに読取りアクセス権を付与します。 |
SENSITIVE | 北京、東京およびシンガポールの各都市への読取りアクセス |
PUBLIC | HR.LOCATIONS にリストされているその他すべての都市への読取りアクセス |
この例を完成するには、次のステップに従います。
ここでは、1つのロールと3人のユーザーを作成し、そのロールをこれらのユーザーに付与します。
EMP_ROLEロールの作成
EMP_ROLE
ロールは、これから作成する3人のユーザーに対して必要な権限を提供します。
EMP_ROLEロールを作成する手順は、次のとおりです。
SYSTEM
ユーザーとしてDatabase Controlにログインします。
「スキーマ」タブをクリックします。
「ユーザーおよび権限」の下の「ロール」をクリックします。
「ロール」ページが表示されます。
「作成」をクリックします。
「ロールの作成」ページが表示されます。
「名前」フィールドにEMP_ROLEと入力します。「認証」は「なし」のままにします。
「オブジェクト権限」タブをクリックします。
「オブジェクト・タイプの選択」ボックスで「表」を選択します。「追加」をクリックします。
「表オブジェクト権限の追加」ページが表示されます。
「表オブジェクトの選択」にHR.LOCATIONS
を入力し、HR
スキーマのLOCATIONS表を選択します。「使用可能な権限」リストのSELECTを「選択した権限」リストに移動します。
「OK」をクリックします。
「ロールの作成」ページの「OK」をクリックします。
SKING、KPARTNERSおよびLDORANの各ユーザーの作成
作成する3人のユーザーには、その職位に従ってHR.LOCATIONS
表へのアクセスを異なるレベルで付与します。Steven King(SKING)は営業統括責任者であるため、HR.LOCATIONS
表に対する完全な読取りアクセス権があります。Karen Partners(KPARTNERS)は制限されたアクセス権がある営業マネージャ、Louise Doran(LDORAN)は最小限のアクセス権がある営業担当です。
SKING、KPARTNERSおよびLDORANの各ユーザーを作成する手順は、次のとおりです。
SYSTEM
としてDatabase Controlにログインします。
「スキーマ」タブをクリックします。
「ユーザーおよび権限」の下の「ユーザー」をクリックします。
「ユーザー」ページが表示されます。
「作成」をクリックします。
「ユーザーの作成」ページが表示されます。
次の情報を入力します。
名前: SKING
プロファイル: DEFAULT
認証: パスワード
パスワードの入力/パスワードの確認: there4all
デフォルト表領域: USERS
一時表領域: TEMP
ロール: 「ロール」タブを選択し、EMP_ROLEロールをSKINGに付与します。「デフォルト」チェック・ボックスを選択します。
システム権限: 「システム権限」タブを選択し、CREATE SESSION
システム権限を付与します。
「OK」をクリックします。
「ユーザー」ページで、SKINGを選択し、「アクション」ボックスで「類似作成」を選択して、「実行」をクリックします。
「ユーザーの作成」ページが表示されます。
KPARTNERSのパスワードとしてeager2pleaseを使用し、LDORANのパスワードとしてready2goを使用して、KPARTNERSとLDORANのアカウントを作成します。
作成する必要があるのは、それぞれの名前とパスワードのみです。これらのユーザーにロールまたはシステム権限を付与する必要はありません。これらのユーザーのロールとシステム権限は、自動的に作成され、SKING
のアカウント内で定義されます。
現時点では、同一の権限を保持する3人のユーザーが作成されています。
このポリシーは、後で作成するラベル・コンポーネントのコンテナです。
ACCESS_LOCATIONSポリシーを作成する手順は、次のとおりです。
LBACSYS
ユーザーとしてDatabase Controlにログインします。
「サーバー」タブをクリックします。
「セキュリティ」の下の「Oracle Label Security」をクリックします。
「Label Securityポリシー」ページが表示されます。
「作成」をクリックします。
「Label Securityポリシーの作成」ページで、次の情報を入力します。
名前: ACCESS_LOCATIONS
ラベル列: OLS_COLUMN
ラベル列の非表示: ラベル列が表示されるように、このチェック・ボックスの選択を解除します。
通常はラベル列を非表示にしますが、開発フェーズではラベル列を表示してチェックできるようにします。ポリシーを作成して正常に機能することを確認した後は、列を非表示にしてセキュリティを確保してください。
有効: ポリシーを有効に切り替えます。(デフォルトでは有効になっています。)
強制オプション: 「ポリシー強制の適用」を選択して、次のオプションを選択します。
すべての問合せ用(READ_CONTROL)
ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)
「OK」をクリックします。
「Label Securityポリシー」ページにACCESS_LOCATIONSポリシーが表示されます。
ここでは、ACCESS_LOCATIONSポリシーのラベル・コンポーネントを定義できます。
ACCESS_LOCATIONSポリシーのラベル・コンポーネントを定義する手順は、次のとおりです。
「Label Securityポリシー」ページで、ACCESS_LOCATIONSポリシーを選択します。「編集」をクリックします。
「Label Securityポリシーの編集」ページが表示されます。
「ラベル・コンポーネント」タブを選択します。
「レベル」の下の「5行追加」をクリックし、次のレベルを追加します。
詳細名 | 短縮名 | 数値タグ |
---|---|---|
SENSITIVE | SENS | 3000 |
CONFIDENTIAL | CONF | 2000 |
PUBLIC | PUB | 1000 |
「適用」をクリックします。
このステップでは、直前のステップで作成したレベルに対応するデータ・ラベルを作成します。
データ・ラベルを作成する手順は、次のとおりです。
「Label Securityポリシー」リンクをクリックして、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーを選択します。
「アクション」リストから「データ・ラベル」を選択します。「実行」をクリックします。
「データ・ラベル」ページが表示されます。
「追加」をクリックします。
「データ・ラベルの作成」ページが表示されます。
次の情報を入力します。
数値タグ: 1000
を入力します。
レベル: リストからPUBを選択します。
「OK」をクリックします。
データ・ラベルが「データ・ラベル」ページに表示されます。
「追加」を再度クリックし、CONFレベルのデータ・ラベルを作成します。数値タグに2000を入力します。
「OK」をクリックします。
「追加」を再度クリックし、SENSレベルのデータ・ラベルを作成します。数値タグに3000を入力します。
「OK」をクリックします。
ここでは、ポリシーに対するユーザー認証を作成します。
ポリシーに対するユーザー認証を作成する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーを選択します。
「アクション」ボックスから「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。
「追加」をクリックします。
「ユーザーの作成」ページが表示されます。
「データベース・ユーザー」の下の「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。
ユーザーSKINGのチェック・ボックスを選択し、「選択」をクリックします。
ユーザーSKINGが「ユーザーの作成」ページにリストされます。
「次へ」をクリックします。
「権限」ステップが表示されます。
「次へ」をクリックします。
「レベル、区分およびグループ」ステップが表示されます。
次のレベルをユーザーSKINGに設定します。
最大レベル: SENS(SENSITIVE用)
最小レベル: CONF(CONFIDENTIAL用)
デフォルト・レベル: SENS
行レベル: SENS
これで、SKINGはCONFIDENTIALおよびSENSITIVEのデータを読み取ることができます。
「次へ」をクリックします。
「監査」ステップが表示されます。
監査操作のすべてが「なし」に設定されていることを確認して、「次へ」をクリックします。
「確認」ステップが表示されます。
「確認」ステップでは、選択した認可設定すべてがリストされます。設定が正しいことを確認し、「終了」をクリックします。
ユーザーKPARTNERSがHR.LOCATIONS
のCONFIDENTIALおよびPUBLICデータを読取りできるように、これらの手順を繰り返して次の認可を作成します。
レベル、区分およびグループ: 4つのレベルすべてを、次のように設定します。
最大レベル: CONF(CONFIDENTIAL用)
最小レベル: PUB(PUBLIC用)
デフォルト・レベル: CONF
行レベル: CONF
監査: すべて「なし」に設定します。
ユーザーLDORANに対して次の認可を作成します。このユーザーに許可されているのは、HR.LOCATIONS
からのPUBLICデータ読取りのみです。
レベル、区分およびグループ: 4つのレベルすべてをPUBに設定します。
監査: すべて「なし」に設定します。
ここでは、ポリシーをHR.LOCATIONS
表に適用します。
ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーを選択します。
「アクション」ボックスから「適用」を選択します。「実行」をクリックします。
「適用」ページが表示されます。
「表」タブが選択されていることを確認します。「作成」をクリックします。
「表の追加」ページが表示されます。
「表」フィールドに、HR.LOCATIONS
と入力します。
「ポリシー列の非表示」チェック・ボックスの選択が解除されていることを確認します。
「有効」チェック・ボックスが選択されていることを確認します。
「ポリシー強制オプション」の下の「デフォルトのポリシー強制を使用」を選択します。
ACCESS_LOCATIONSのデフォルトのポリシー施行オプションは、次のとおりです。
すべての問合せ用(READ_CONTROL)
ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)
「OK」をクリックします。
ACCESS_LOCATIONSポリシーがHR.LOCATIONS
表に適用されます。
ACCESS_LOCATIONSポリシーをHR.LOCATIONS
表に適用した後は、その表の行にラベルを付ける必要があります。HR
は、LOCATIONS表の所有者です。ポリシー・ラベルを使用してLOCATIONS表を適切に更新するために、HR
には、ACCESS_LOCATIONSポリシーに対するFULL
セキュリティ権限が必要です。
アプリケーション表の所有者へのFULL権限の付与
ラベル・セキュリティの管理ユーザーLBACSYS
は、必要な権限をHR
に付与できます。
OLSポリシーに対するFULL権限をHRに付与する手順は、次のとおりです。
「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。
ACCESS_LOCATIONSポリシーを選択します。
「アクション」ボックスから「認可」を選択します。「実行」をクリックします。
「認可」ページが表示されます。
「追加」をクリックします。
「ユーザーの作成」ページが表示されます。
「データベース・ユーザー」の下の「追加」をクリックします。
「検索と選択」ウィンドウが表示されます。
ユーザーHRのチェック・ボックスを選択し、「選択」をクリックします。
ユーザーHR
が「ユーザーの作成」ページにリストされます。
「次へ」をクリックします。
「権限」ステップが表示されます。
次の権限を選択します。
すべてのラベル・セキュリティ・チェックを省略(FULL)
「次へ」をクリックします。「レベル、区分およびグループ」ステップが表示されます。
「次へ」をクリックします。「監査」ステップが表示されます。
「次へ」をクリックします。「確認」ステップが表示されます。
「終了」をクリックします。
HR.LOCATIONSのOLS_COLUMN表の更新
ここで、ユーザーHR
は、適切なラベルを使用してHR.LOCATIONS
表を更新できます。
HR.LOCATIONSのOLS_COLUMN表を更新する手順は、次のとおりです。
SQL*Plusで、ユーザーHR
として接続します。
CONNECT HR Enter password:
HR
がロックされていることを示すエラー・メッセージが表示された場合は、次の文を入力することで、アカウントのロックを解除してパスワードをリセットできます。
CONNECT system Enter password: sys_password ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password CONNECT hr Enter password:
次の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', 'ROME');
次の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;
注意: 前述の問合せでは、ラベル列名( ラベル列が非表示の場合にラベル列名を明示的に指定しないと、そのラベル列は問合せ結果に表示されません。たとえば、 |
これまでのステップによって、ACCESS_LOCATIONSポリシーが完成し、テストできる状態になりました。ポリシーは、3人の各ユーザーとしてSQL*Plusにログインし、HR.LOCATIONS
表に対してSELECT
を実行することでテストできます。
ACCESS_LOCATIONSポリシーをテストする手順は、次のとおりです。
SQL*Plusで、ユーザーSKING(パスワードはthere4all)として接続します。
CONNNECT SKING Enter password: there4all
次の文を入力します。
COL city HEADING City FORMAT a25 COL country_id HEADING Country FORMAT a11 COL Label format a10 SELECT city, country_id, LABEL_TO_CHAR (OLS_COLUMN) AS Label FROM hr.locations ORDER BY ols_column;
ユーザーSKINGは、PUB、CONFおよびSENSのラベルが付いているすべての行にアクセスできます。
ユーザーKPARTNERSおよびLDORANについて、これらのステップを繰り返します。
KPARTNERSのパスワードはeager2please、LDORANのパスワードはready2goです。
KPARTNERSはCONFおよびPUBのラベルが付いている行にアクセスでき、LDORANはPUBのラベルが付いている行にアクセスできます。
必要な場合は、この例で作成したコンポーネントを削除します。
この例のコンポーネントを削除する手順は、次のとおりです。
Database Controlで、ユーザーSYSTEM
として接続します。
「スキーマ」タブをクリックします。
「ユーザーおよび権限」の下の「ユーザー」をクリックします。
ユーザーKPARTNERSを選択し、「削除」をクリックします。
「確認」ページで、「はい」をクリックします。
Database Controlをログアウトした後、LABCSYS
ユーザーとしてログインします。
「サーバー」タブをクリックします。
「セキュリティ」の下の「Oracle Label Security」をクリックします。
「Label Securityポリシー」ページで、「名前」フィールドにACCESS%
と入力し、「実行」をクリックします。
ACCESS_LOCATIONSが選択されていることを確認し、「削除」をクリックします。
「確認」ページが表示されます。
「列の削除」を選択すると、HR.LOCATIONS
表からOLS_COLUMNポリシー列も削除されます。「はい」をクリックしてポリシーを削除します。