ヘッダーをスキップ
Oracle® Database 2日でセキュリティ・ガイド
11g リリース2(11.2)
B56296-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 データの保護

この章の内容は次のとおりです。

データの保護について

Oracle Databaseには、データを保護する方法が多数用意されています。この章では、サイトでのデータの保護に使用できる次の方法について説明します。

  • 透過的データ暗号化。透過的データ暗号化では、1つまたは複数のデータベース表列のデータを暗号化したり、表領域全体を暗号化できます。透過的データ暗号化を使用すると、最も迅速かつ容易にデータを暗号化できます。透過的データ暗号化は、Advanced Encryption Standard(AES)およびTriple Data Encryption Standard(3DES)アルゴリズムをサポートします。

    ネットワーク上のデータを暗号化することもできます。この方法については「ネットワーク暗号化を使用したネットワーク上のデータの保護」を参照してください。

  • Oracle仮想プライベート・データベース(VPD)。この機能では、データベースに問い合せるすべてのSQL文に対してWHERE句を強制するポリシーを作成し、データへのアクセスを行または列レベルで制限します。VPDポリシーはデータベースの表またはビュー・レベルで作成および管理しますが、これはデータベースにアクセスするアプリケーションを変更しないことを意味します。

  • Oracle Label Security(OLS)。この機能では、データベース表を行レベルで保護し、セキュリティ・ラベルに基づいてこれらの行に異なるセキュリティ・レベルを割り当てます。その後、OLSラベルに基づいてユーザーのセキュリティ認可を作成できます。

  • Oracle Database Vault。この機能では、データベースに対する管理者のアクセスを制限し、職務分離を適用し、アプリケーション、データベースおよびデータにアクセス可能なユーザー、時間、場所、方法を制御できます。

透過的なデータ暗号化によるデータの透過的な暗号化

透過的データ暗号化により、表領域または1つ以上の表の列をすばやく暗号化できます。実装も簡単で、他のタイプのデータベースの暗号化よりも多くの利点があります。

この項の内容は次のとおりです。

機密データの暗号化について

暗号化されたデータを読めるのは受信者のみです。暗号化を使用すると、保護されていない可能性のある環境内のデータ(バックアップ・メディアに配置されており、オフサイトのストレージ場所に送信されるデータなど)を保護できます。

暗号化データには、次のコンポーネントがあります。

  • データを暗号化するアルゴリズム。暗号化アルゴリズムは、Oracle Databaseがデータを暗号化するために使用する計算式です。Oracle Databaseは、業界標準の暗号化アルゴリズムおよびハッシュ・アルゴリズムをいくつかサポートしています。これには、米国標準技術局(National Institute of Standards and Technology: NIST)により承認されているAdvanced Encryption Standard (AES)暗号化アルゴリズムも含まれます。

  • データの暗号化および復号化を行うためのキー。データを暗号化するときには、Oracle Databaseは暗号化アルゴリズムへの入力として暗号化キーおよびクリア・テキスト・データを使用します。逆に、データを複合化するときには、アルゴリズムへの入力として複合化キーを使用して、プロセスを逆に実行し、クリア・テキスト・データを取得します。Oracle Databaseは対称キーを使用してこのタスクを実行します(データの暗号化と複合化の両方で同じキーが使用されます)。暗号化キーはデータ・ディクショナリに格納されますが、別のマスター・キーで暗号化されます。

前述のとおり、個々の表列または表領域全体を暗号化できます。これら2つを混同しないように注意してください。たとえば、表列を暗号化してからその表列を含む表領域を暗号化するとします。この二重の暗号化を行うと、パフォーマンスの問題が発生します。また、列の暗号化ではデータ型のサポートに制限があり、一致検索用のBツリー索引のみがサポートされます。現行の暗号化設定を確認するために、表領域に関してはV$ENCRYPTED_TABLESPACESデータ・ディクショナリ・ビュー、暗号化された列に関してはDBA_ENCRYPTED_COLUMNSビューを問い合せることができます。

データを暗号化するタイミング

多くの場合、コンプライアンス規則を遵守するために機密データを暗号化します。たとえば、クレジット・カード番号、社会保障番号、病歴に関する情報などの機密データは、暗号化する必要があります。

データベース管理者からのデータへのアクセスを制限するため、これまでユーザーはデータの暗号化を求めてきました。しかし問題は暗号化よりも、むしろアクセス制御にあります。Oracle Database Vaultを使用してデータベース管理者からアプリケーション・データへのアクセスを制御することで、この問題に対処できます。

多くの場合、クレジット・カード番号や社会保障番号などの機密データは、バックアップ・テープやディスク・ドライバの紛失または盗難時にアクセスされないように暗号化します。近年では、ペイメント・カード産業(PCI)データ・セキュリティ標準や医療保険の相互運用性と説明責任に関する法律(HIPAA)などの業界規制によって、それぞれクレジット・カード情報や医療情報の保護に対して暗号化の使用が促されてきています。


関連項目:

格納されたデータの暗号化に関してよくある誤解については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

透過的データ暗号化の動作

透過的データ暗号化を使用すると、個々の表列もしくは表領域全体を暗号化できます。ユーザーが暗号化された列にデータを挿入すると、透過的データ暗号化により、挿入されたデータが自動的に暗号化されます。ユーザーが列を選択すると、データは自動的に復号化されます。

透過的データ暗号化を使用してデータを暗号化するには、次のコンポーネントを作成します。

  • マスター暗号化キーを格納するウォレット。ウォレットは、データベースの外にあるオペレーティング・システム・ファイルです。データベースは、マスター暗号化キーの格納にウォレットを使用します。ウォレットは、Enterprise ManagerまたはALTER SYSTEMコマンドを使用して作成できます。ウォレットは、暗号化キーとしてパスワードを使用して暗号化できます。パスワードはウォレットの作成時に作成します。このため、ウォレットのコンテンツ(マスター・キー)へのアクセスは、パスワードを知っているユーザーに制限されます。ウォレットを作成したら、データベースがマスター暗号化キーにアクセスできるように、パスワードを使用してウォレットを開く必要があります。

  • ウォレットの場所。sqlnet.oraファイルでウォレットの場所を指定できます。

後で、ユーザーがデータを入力すると、Oracle Databaseによって次の手順が実行されます。

  1. ウォレットからマスター・キーを取得します。

  2. マスター・キーを使用して暗号化キーを復号化します。

  3. 暗号化キーを使用して、ユーザーが入力したデータを暗号化します。

  4. 暗号化した形式でデータをデータベースに格納します。

ユーザーがデータを選択した場合も、同じようなプロセスが実行されます。Oracle Databaseによりデータが復号化され、その後、データがクリア・テキスト形式で表示されます。

透過的データ暗号化には、次の利点があります。

  • セキュリティ管理者の場合、ストレージ・メディアまたはデータ・ファイルが盗み出された場合または失われた場合にも機密データを保護できます。

  • 透過的データ暗号化を実装すると、セキュリティ関連のコンプライアンス要件を遵守できます。

  • 表から取得されたデータは、データベース・ユーザーに対して透過的に復号化されます。データを復号化するために、トリガーまたはビューを作成する必要がありません。

  • データベース・ユーザーは、自身がアクセスしたデータが暗号化された形式で格納されていることを認識する必要がありません。データはデータベース・ユーザーに対して透過的に復号化され、ユーザーがアクションを行う必要はありません。

  • 暗号化されたデータを処理するためにアプリケーションを変更する必要がありません。データの暗号化/復号化は、データベースにより管理されます。

透過型データ暗号化がパフォーマンスに与える影響は最小限のものです。透過型データ暗号化の列暗号化において、パフォーマンスに影響が及ぶのは、暗号化された列からデータを取得するときと、暗号化された列にデータを挿入するときだけです。暗号化されていない列に対する操作では、たとえ同じ表に暗号化された列が含まれていても、パフォーマンスに影響が及ぶことはありません。ただし、暗号化されたデータには、クリア・テキスト・データよりも多くの記憶域が必要とされます。平均的に、1つの列を暗号化すると、1行につき必要となる記憶域が32バイトから48バイト 増えます。それでも、透過的表領域暗号化では暗号化と復号化がI/Oブロック層で実行されるため、より優れたパフォーマンスが得られます。復号化されたブロックはOracle Databaseのメモリーにキャッシュされ、それによりパフォーマンスが最適化されます。


関連項目:

透過的データ暗号化の使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

透過的データ暗号化を使用するためのデータの構成

透過的データ暗号化の使用を開始するには、ウォレットとマスター・キーのセットを作成する必要があります。ウォレットは、他のOracle Databaseコンポーネントと共有するデフォルトのデータベース・ウォレットを使用することも、特に透過的データ暗号化で使用される個別のウォレットを使用することもできます。オラクル社では、個別のウォレットを使用してマスター暗号化キーを格納することをお薦めします。このウォレットは、透過的データ暗号化により暗号化されるすべてのデータで使用されます。

次の手順を実行して、透過的データ暗号化を使用するように表列を設定します。


関連項目:

表領域暗号化の使用方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

手順1: ウォレットの場所を設定する

sqlnet.oraファイルでウォレットに対するディレクトリの場所を指定します。この手順は1回のみ実行します。

ウォレットの場所を設定するするには、次のようにします。 

  1. $ORACLE_HOMEディレクトリに、ウォレットを格納するディレクトリを作成します。

    たとえば、C:\oracle\product\11.2.0\db_1ディレクトリにORA_WALLETSという名前のディレクトリを作成します。

  2. sqlnet.oraファイルのバックアップ・コピーを作成します。このファイルのデフォルトの場所は、$ORACLE_HOME/network/adminディレクトリです。

  3. sqlnet.oraファイルの最後に、次のコードと同様のコードを追加します。ORA_WALLETSは、ウォレットを格納するディレクトリの名前を表しています。

    ENCRYPTION_WALLET_LOCATION=
     (SOURCE=
      (METHOD=file)
       (METHOD_DATA=
        (DIRECTORY=C:\oracle\product\11.2.0\db_1\ORA_WALLETS)))
    
  4. sqlnet.oraファイルを保存して閉じます。

  5. データベースの互換性がOracle Databaseリリース10.2より前のリリースに設定されている場合は、データベースを再起動します。

    1. SQL*Plusにログインしてから、データベースの互換性を確認します。

      sqlplus sys as sysdba
      Enter password: password
      

      SQL*Plusが起動し、デフォルトのデータベースに接続してから、SQL>プロンプトが表示されます。

      SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

    2. COMPATIBLEパラメータの値を確認します。

      SHOW PARAMETER COMPATIBLE
      
      NAME                       TYPE           VALUE
      -------------------------- -------------- --------------------
      compatible                 string         11.2.0
      
    3. 値が10.2より大きい場合は、「手順2: ウォレットを作成する」に進みます。値が10.2より小さい場合は、次のようにしてデータベースを再起動します。

      SHUTDOWN IMMEDIATE
      STARTUP
      

手順2: ウォレットを作成する

ウォレットを作成するには、ALTER SYSTEM SQL文を使用します。デフォルトでは、Oracleウォレットにはそれまで使用されたマスター・キーの履歴が格納されます。これにより、マスター・キーを変更したり、以前のマスター・キーで暗号化されたデータを復号化することができます。ウォレット・パスワード(大/小文字の区別あり)はデータベース管理者には知らされないため、職務分離を実現できます。つまり、データベース管理者がデータベースを再起動してもウォレットは閉じられたままで、セキュリティ管理者が手動でウォレットを開くまでは、データベースのデータを暗号化することも復号化することもできません。

ウォレットを作成するには、次のようにします。 

  1. SQL*Plusで、SYSなどの管理権限を持つユーザーまたはセキュリティ管理者として接続します。

    次に例を示します。

    CONNECT SYSTEM
    Enter password: password
    
  2. 次のALTER SYSTEM文を入力します。passwordは、Oracleウォレットを保護するために使用するパスワードです。

    ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";
    

    パスワードは二重引用符で囲みます。Oracle Databaseで作成した他のパスワードと同様に、パスワードはクリア・テキストまたは動的ビューや動的ログには表示されません。

    この文により、新しい暗号化キーを使用するウォレットが生成され、このキーが透過的データ暗号化の現行のマスター・キーに設定されます。マスター暗号化キーを構成するために公開鍵基盤(PKI)を使用する場合は、証明書IDを指定します。証明書IDは、Oracleウォレットに格納される証明書の固有のIDを含む文字列です。次の構文を使用します。

    ALTER SYSTEM SET ENCRYPTION KEY certificate_ID IDENTIFIED BY "password";
    

手順3: ウォレットを開く(または閉じる)

ウォレット・キーを作成した直後は、ウォレットは開かれており、いつでもデータの暗号化を開始できます。ただし、ウォレットを作成した後にデータベースを再起動した場合は、透過的データ暗号化を使用する前に手動でウォレットを開く必要があります。

ウォレットを開くには、次のようにします。 

  • SQL*Plusで次のALTER SYSTEM文を入力します。passwordは、ウォレットを保護するために使用するパスワードです。

    ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
    

パスワードは二重引用符で囲む必要があります。

ほとんどの場合、ウォレットを閉じるためのセッションが必要がないかぎり、ウォレットは開いたままにしておきます。マスター・キーへのアクセスを無効にし、暗号化された列へのアクセスを防止する場合は、ウォレットを閉じることができます。透過的データ暗号化を実行するには、ウォレットが開かれている必要があります。ウォレットを再度開くには、ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY password文を使用します。

ウォレットを閉じるには、次のようにします。 

  • SQL*Plusで、次の文を入力し、パスワードが引用符で囲まれていることを確認します。

    ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";
    

手順4: データを暗号化(または復号化)する

sqlnet.oraファイルでウォレットのディレクトリの場所を作成し、ウォレット自体を作成したら、個々の表列もしくは表領域全体のいずれかを暗号化できます。

この項の内容は次のとおりです。

表の個々の列の暗号化

どの列を暗号化の対象として指定するかは、政府によるセキュリティ規則(カリフォルニア州上院法案1386)または業界標準(ペイメント・カード産業(PCI)データ・セキュリティ標準など)によって決定します。クレジット・カード番号、社会保障番号、その他の個人情報(PII)はこのカテゴリに分類されます。暗号化が必要な他のデータ(企業秘密、研究結果、従業員の給与、ボーナスなど)は、内部のセキュリティ・ポリシーで定義されます。いつデータを暗号化し、いつ暗号化しないかについては、「データを暗号化するタイミング」を参照してください。

暗号化する列を選択するには、次のガイドラインに従います。

  • 暗号化する列のデータ型をチェックします。透過的データ暗号化は、次のデータ型をサポートします。


    BINARY_FLOAT NUMBER

    BINARY_DOUBLE NVARCHAR2

    CHAR RAW

    DATE TIMESTAMP

    NCHAR VARCHAR2

    BLOBCLOBなどのラージ・オブジェクト型(LOB)脚注 1 

    脚注 1 外部LOBは暗号化できません(BFILE)。

  • 選択した列が外部キーの一部でないことを確認します。透過的データ暗号化を使用すると、各表に固有の暗号化鍵が作成されます。この暗号化鍵はデータベースのデータ・ディクショナリに格納され、外部のマスター・キーによって暗号化されます。暗号化された列は外部キーとして使用できません。

表の列を暗号化するには次のようにします。 

  1. 必ずウォレット・キーを作成して開いておきます。

    ウォレット・キーの作成方法については、「手順2: ウォレットを作成する」を参照してください。既存のウォレット・キーを開くには、「手順3: ウォレットを開く(または閉じる)」を参照してください。

  2. Database Controlを起動します。

    Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

  3. 管理者のユーザー名(SYSTEMまたはセキュリティ管理者の名前など)とパスワードを入力し、「ログイン」をクリックします。

    データベースのホームページが表示されます。

  4. 「スキーマ」をクリックして「スキーマ」サブページを表示します。

  5. 「データベース・オブジェクト」で「表」を選択します。

    「表」ページが表示されます。

  6. 次のいずれかの操作を行います。

    • 新しい表を作成するには、「作成」をクリックしてから表示されたページの質問に回答し、表の作成を開始します。

    • 既存の表を変更するには、スキーマ名を「スキーマ」フィールドに、表名を「オブジェクト名」フィールドに入力して表名を検索します。(パーセント記号(%)ワイルドカード文字を使用して表のグループを検索できます。たとえば、Oで始まるすべての表を検索するには、O%を使用します。)表が「表」ページに示されている場合は、その表を選択して「編集」をクリックします。

    「表の作成」または「表の編集」ページで、暗号化オプションを設定できます。

    たとえば、OE.ORDERS表の列を暗号化する場合、「表の編集」ページは次のように表示されます。

    encrypt_cols.gifの説明が続きます
    encrypt_cols.gifの説明

  7. 「表の作成」(または「表の編集」)ページで、次の手順を実行します。

    1. 暗号化する列を選択します。

      外部キー制約の一部である列(主キー列または一意キー列)は選択しないでください。これらの列は暗号化できません。これらの列には、名前の左側に鍵またはチェック・マーク・アイコンがあります。

    2. 「暗号化オプション」をクリックして、「表」ページの暗号化オプションを表示します。

    3. 「暗号化アルゴリズム」リストから次のオプションを選択します。

      • AES192: キーの長さを192ビットに設定します。AESは「Advanced Encryption Standard」の略です。

      • 3DES168: キーの長さを168ビットに設定します。3DESは「Triple Data Encryption Standard」の略です。

      • AES128: キーの長さを128ビットに設定します。デフォルトのオプションです。

      • AES256: キーの長さを256ビットに設定します。

    4. 「キーの生成」で、「ランダムにキーを生成」または「キーの指定」のどちらかを選択します。「キーの指定」を選択した場合は、「キーの入力」および「キーの確認」フィールドにシード値の文字を入力します。

      「ランダムにキーを生成」設定を選択すると、ソルトが有効になります。ソルトとは、暗号化されたデータのセキュリティを強化する方法の1つで、暗号化される前のデータに追加されるランダムな文字列です。これにより、同じテキストであっても、暗号化されたときには異なって表示されます。結果として、暗号化されたテキストのパターン一致を使用する攻撃者は、盗み出したデータを使用できません。

    5. 「続行」をクリックして「表の作成」(または「表の編集」)ページに戻ります。

    6. 「暗号化」の下のボックスを選択して、列の暗号化を有効にします。

  8. 「続行」をクリックします。

    表の作成(または「表の編集」)ページが表示されます。

表の更新時も、読取りアクセスは可能です。後で、列内の既存のデータおよび将来格納されるデータは、データベース・ファイルに書き込まれるときに暗号化され、認可されたユーザーが選択したときに復号化されます。データ操作言語(DML)文が必要な場合は、オンラインで再定義できます。

表領域の暗号化

新規表領域の作成中に新規表領域を暗号化することはできますが、既存の表領域を暗号化することはできません。回避策として、CREATE TABLE AS SELECTALTER TABLE MOVEを使用するか、またはOracle Data Pumpインポートを使用して既存の表領域からデータを取得し、暗号化されている表領域に格納することができます。表領域の作成の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

表領域を暗号化するには、次のようにします。 

  1. 必ずウォレット・キーを作成して開いておきます。

    ウォレット・キーの作成方法については、「手順2: ウォレットを作成する」を参照してください。既存のウォレット・キーを開くには、「手順3: ウォレットを開く(または閉じる)」を参照してください。

  2. Database Controlを起動します。

    Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

  3. 管理者のユーザー名(SYSTEMまたはセキュリティ管理者の名前など)とパスワードを入力し、「ログイン」をクリックします。

    データベースのホームページが表示されます。

  4. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  5. 「記憶域」で、「表領域」をクリックします。

    「表領域」ページが表示されます。

  6. 「作成」をクリックしてから表示されたページの質問に回答し、表領域と必要なデータ・ファイルの作成を開始します。

  7. 「表領域の作成」ページで、次のステップを実行します。

    1. 「タイプ」で、「永続」の「暗号化」ボックスを選択します。

    2. 「暗号化」オプションを選択して、「暗号化オプション」ページを表示します。

    3. 「暗号化アルゴリズム」リストから次のオプションを選択します。

      • AES192: キーの長さを192ビットに設定します。AESは「Advanced Encryption Standard」の略です。

      • 3DES168: キーの長さを168ビットに設定します。3DESは「Triple Data Encryption Standard」の略です。

      • AES128: キーの長さを128ビットに設定します。デフォルトのオプションです。

      • AES256: キーの長さを256ビットに設定します。

      暗号化アルゴリズムの詳細は、「ネットワーク暗号化の設定」の手順5の「使用可能なメソッド」を参照してください。

    4. 「続行」をクリックします。

      「表領域の作成」ページが表示されます。

  8. 「OK」をクリックします。

    既存の表領域のリストに新規表領域が表示されます。既存の表領域は暗号化できないことに注意してください。


関連項目:


既存の暗号化データのチェック

すでに暗号化されているデータについて、データベースに問い合せることができます。暗号化された個々の列、暗号化された列を含む現行のデータベース・インスタンスのすべての表、暗号化されているすべての表領域をチェックできます。

この項の内容は次のとおりです。

ウォレットが開いているか閉じているかのチェック

V$ENCRYPTION_WALLETビューを実行することで、ウォレットが開いているか閉じているかを確認できます。

ウォレットが開いているか閉じているかチェックするには、次のようにします。 

  • SQL*Plusで、V$ENCRYPTION_VIEWビューを次のように問い合せます。

    SELECT * FROM V$ENCRYPTION_WALLET;
    

    ウォレット・ステータスが次のように表示されます。

    WRL_TYPE  WRL_PARAMETER                             STATUS
    --------  ----------------------------------------  -------
    file      C:\oracle\product\11.2.0\db_1\wallets     OPEN
    

個々の表の暗号化されている列のチェック

SQL*PlusでDESC(DESCRIBE)文を使用して、データベース表内の暗号化されている列をチェックします。

個々の表の暗号化されている列をチェックするには、次のようにします。 

  • SQL*Plusで、次の構文を使用してDESC文を実行します。

    DESC tablename;
    

    次に例を示します。

    DESC OE.ORDER_ITEMS;
    

    表スキーマの説明が表示されます。次に例を示します。

    Name                                      Null?     Type
    ----------------------------------------  --------  --------------------------
    ORDER_ID                                  NOT NULL  NUMBER(12)
    LINE_ITEM_ID                              NOT NULL  NUMBER(3)
    PRODUCT_ID                                NOT NULL  NUMBER(6)
    UNIT_PRICE                                          NUMBER(8,2)
    QUANTITY                                            NUMBER(8) ENCRYPT
    

現行のデータベース・インスタンスで暗号化されているすべての表列のチェック

暗号化されているすべての表列をチェックするには、DBA_ENCRYPTED_COLUMNSビューを使用します。

現行のデータベース・インスタンスで暗号化されているすべての表列をチェックするには、次のようにします。 

  • SQL*Plusで、DBA_ENCRYPTED_COLUMNSビューから選択します。

    次に例を示します。

    SELECT * FROM DBA_ENCRYPTED_COLUMNS;
    

    このSELECT文によって、Oracle Transparent Data Encryptionを使用して暗号化された列を含む、データベースのすべての表および列がリストされます。次に例を示します。

    OWNER        TABLE_NAME    COLUMN_NAME    ENCRYPTION_ALG     SALT
    -----------  ----------    -----------    ----------------   ----
    OE           CUSTOMERS     INCOME_LEVEL   AES 128 bits key   YES
    OE           UNIT_PRICE    ORADER_ITEMS   AES 128 bits key   YES
    HR           EMPLOYEES     SALARY         AES 192 bits key   YES
    

関連項目:

DBA_ENCRYPTED_COLUMNSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

現行のデータベース・インスタンスで暗号化されている表領域のチェック

表6-1に、暗号化されている表領域のチェックに使用できるデータ・ディクショナリ・ビューを示します。

表6-1 暗号化されている表領域のデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビュー 説明

DBA_TABLESPACES

データベース内のすべての表領域が示されます。たとえば、表領域が暗号化されているかどうかを調べるには、次のように入力します。

SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES

TABLESPACE_NAME              ENC
---------------------------- ----
SYSTEM                       NO
SYSAUX                       NO
UNCOTBS1                     NO
TEMP                         NO
USERS                        NO
EXAMPLE                      NO
SECURESPACE                  YES

USER_TABLESPACES

現行ユーザーがアクセス可能な表領域について説明します。DBA_TABLESPACESと同じ列があります(PLUGGED_IN列を除く)。

V$ENCRYPTED_TABLESPACES

暗号化されている表領域に関する情報が示されます。次に例を示します。

SELECT * FROM V$ENCRYPTED_TABLESPACES;
        TS#  ENCRYPTIONALG  ENCRYPTEDTS
-----------  -------------  -----------
         6   AES128          YES

このリストには、表領域番号、暗号化アルゴリズム、暗号化が有効か無効かなどが示されます。

表領域の名前を検出する場合は、次の結合操作を使用します。

SELECT NAME, ENCRYPTIONALG ENCRYPTEDTS
FROM V$ENCRYPTED_TABLESPACES, V$TABLESPACE
WHERE V$ENCRYPTED_TABLESPACES.TS# = V$TABLESPACE.TS#;


関連項目:

データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

Oracle Virtual Private DatabaseとOracle Label Security間の選択

Oracle仮想プライベート・データベース(VPD)とOracle Label Security (OLS)のどちらでも、データベース表で表示できるデータをユーザーごとに制限することができます。では、仮想プライベート・データベースとOracle Label Securityはどう使い分ければよいのでしょうか。仮想プライベート・データベースは、アクセス要件の決定に利用できる既存のデータがある場合に効果的です。たとえば、営業担当者はその本人が入力した顧客注文表の行と列しか閲覧できないように構成できます。Oracle Label Securityは、表のアクセス要件の指定に利用できる一般的なデータ(ユーザー・アカウント、従業員IDなど)がないときに便利です。このタイプのユーザー・アクセス権を決定する場合は、表の行に機密性のレベルを割り当てます。

Oracle Virtual Private DatabaseとOracle Label Securityが相互に補完しあう場合もあります。次の実習形式のOracle Technology Networkチュートリアルでは、Virtual Private DatabaseポリシーでOracle Label Securityユーザー・クリアランスと最小クリアランスを比較する方法が示されています。ユーザー・クリアランスがしきい値を超えている場合、Salary列は非表示になりません。

http://www.oracle.com/technetwork/database/security/ols-cs1-099558.html

表6-2では、Oracle Virtual Private DatabaseとOracle Label Securityの機能が比較されています。

表6-2 Oracle Virtual Private DatabaseとOracle Label Securityの比較

機能 VPD OLS

行レベル・セキュリティの提供

対応

対応

列レベル・セキュリティ(列マスク)の提供

対応

非対応

表、ビューまたはシノニムへのユーザー定義のPL/SQLパッケージのバインド

対応

非対応 1 

PL/SQLプロシージャから戻されるWHERE句を動的に追加することによる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 Virtual Private Databaseによるデータ・アクセスの制御

Oracle Virtual Private Database(VPD)では、ユーザーが実行する任意のSQL文にWHERE句を動的に追加することができます。WHERE句により、ユーザーのIDに基づいて、ユーザーがアクセスを許可されているデータがフィルタ処理されます。

この項の内容は次のとおりです。


関連項目:

Oracle Virtual Private Databaseの動作については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

Oracle Virtual Private Databaseについて

Oracle仮想プライベート・データベース(VPD)は、データベースの表またはビュー・レベルの行レベル・セキュリティを提供します。これを拡張して列レベル・セキュリティを提供することもできます。基本的に仮想プライベート・データベースは、仮想プライベート・データベースのセキュリティ・ポリシーの適用対象である表またはビューで使用される、任意のSQL文に追加的なWHERE句を挿入します。(セキュリティ・ポリシーはデータへのアクセスを許可または阻止する機能です。)WHERE句では、セキュリティ・ポリシーを通過したIDを持つ、すなわち、保護する対象のデータへのアクセス権を持つユーザーのみが許可されます。

Oracle Virtual Private Databaseのポリシーには次のコンポーネントがあり、通常はセキュリティ管理者のスキーマに作成されます。

  • 仮想プライベート・データベースの表に影響するSQL文に動的WHERE句を追加するPL/SQLファンクション。たとえば、PL/SQLファンクションにより、次のSELECT文が変換されます。

    SELECT * FROM ORDERS;
    

    この文は次のように変換されます。

    SELECT * FROM ORDERS
      WHERE SALES_REP_ID = 159;
    

    この例では、ユーザーが表示できるのは、販売担当者159による注文のみです。このWHERE句の生成に使用されるPL/SQLファンクションは次のようになります。


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    CREATE OR REPLACE FUNCTION auth_orders( 
     schema_var IN VARCHAR2, 
     table_var  IN VARCHAR2 
    ) 
    RETURN VARCHAR2
    IS  
     return_val VARCHAR2 (400); 
    BEGIN 
     return_val := 'SALES_REP_ID = 159';
     RETURN return_val; 
    END auth_orders; 
    /
    

    この例では、次のとおりです。

    • 2から3行目: スキーマ名、OE、および表名ORDERSを格納するパラメータを作成します。(表に使用する2つ目のパラメータtable_varは、ビューとシノニムにも使用できます。)最初にスキーマのパラメータを作成し、次に表、ビュー、またはシノニム・オブジェクトのパラメータを作成します。ファンクション自体がOEスキーマまたはそのORDERS表を指定するのではないことに注意してください。ユーザーが作成する仮想プライベート・データベースのポリシーがこれらのパラメータを使用して、OE.ORDERS表を指定します。

    • 5行目: WHERE述語句に使用される文字列を返します。

    • 6から10行目: WHERE SALES_REP_ID = 159述語の作成が含まれます。

    WHERE句は、ユーザーのセッション情報(ユーザーIDなど)に基づいてユーザー情報をフィルタ処理するよう構成できます。これを行うには、アプリケーション・コンテキストを作成します。アプリケーション・コンテキストは、データベース・ユーザーとデータベース・ユーザー以外のユーザーの両方の認証に使用できます。アプリケーション・コンテキストは、名前と値のペアです。次に例を示します。

    SELECT * FROM oe.orders 
     WHERE sales_rep_id = SYS_CONTEXT('userenv','session_user'); 
    

    この例では、WHERE句でSYS_CONTEXT PL/SQLファンクションを使用して、userenvコンテキストによって示されるユーザーのセッションID(session_user)を取得しています。アプリケーション・コンテキストの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • パッケージにポリシーを追加する方法。DBMS_RLS.ADD_POLICYファンクションを使用して、パッケージにポリシーを追加します。DBMS_RLS PL/SQLパッケージを使用するには、そのPL/SQLパッケージに対するEXECUTE権限を付与される必要があります。ユーザーSYSDBMS_RLSパッケージを所有しています。

データベース・レベルで行レベルのセキュリティを強制する方法は、アプリケーション・プログラム・レベルでセキュリティを強制した場合に比べて多くのメリットがあります。データを保護する場所であるデータベース自体にセキュリティ・ポリシーを実装できるため、様々な方法でアクセスされた場合でも攻撃を受ける可能性が低くなります。このセキュリティは、ユーザー(侵入者)がどれだけデータへのアクセスを試行しても存在し、強制されます。データベースに接続するすべてのアプリケーションでポリシーを維持する必要はなく、1箇所(データベース)のみでポリシーを維持できるため、メンテナンス費も低く抑えられます。固有のDML操作に対してポリシーを作成できるため、非常に柔軟性の高いポリシーを適用できます。

チュートリアル: Oracle Virtual Private Databaseポリシーの作成

注文入力データベースのOEORDERS表には次の情報が含まれています。

Name                                   Null?    Type
-------------------------------------- -------- ---------------------------------
ORDER_ID                               NOTNULL  NUMBER(12)
ORDER_DATE                             NOTNULL  TIMESTAMP(6) WITH LOCAL TIME ZONE
ORDER_MODE                                      VARCHAR2(8)
CUSTOMER_ID                            NOTNULL  NUMBER(6)
ORDER_STATUS                                    NUMBER(2)
ORDER_TOTAL                                     NUMBER(8,2)
SALES_REP_ID                                    NUMBER(6)
PROMOTION_ID                                    NUMBER(6)

表を問い合せる個人に基づいて表へのアクセスを制限すると想定します。たとえば営業担当者は自分が作成した注文のみを確認でき、他の従業員は確認できないようにします。このチュートリアルでは、営業担当者のユーザー・アカウントと財務管理者のアカウントを作成します。次にロールに基づいてデータ・アクセスを制限するOracle仮想プライベート・データベースを作成します。

作成する仮想プライベート・データベース・ポリシーは、PL/SQLファンクションに関連付けられます。VPDポリシーはPL/SQLファンクションまたはプロシージャによって制御されるため、アクセスを制限するポリシーを様々な方法で設計できます。このチュートリアルでは、直属の上司が誰であるかに基づいて従業員のアクセスを制限するファンクションを作成します。このファンクションでは、顧客のIDに基づいて顧客のアクセスが制限されます。

データベース管理者やアプリケーション・アカウントとは別のデータベース・アカウントにVPDポリシーを格納する場合があります。このチュートリアルでは、「チュートリアル: セキュア・アプリケーション・ロールの作成」で作成したsec_adminアカウントを使用してVPDポリシーを作成します。アプリケーション表とVPDポリシーを分けることで、セキュリティを高めます。

行データの機密性に基づいてアクセスを制限する必要がある場合、Oracle Label Security (OLS)を使用します。OLSを使用すると、様々なレベルのセキュリティでデータを分類できます。この場合、行内のデータにアクセスできるユーザーをレベルごとに設定できます。この方法では、データのアクセス制御は、ユーザーの権限ではなくデータ自体に焦点が当てられます。詳細は、「Oracle Label Securityによる行レベルのセキュリティの強制」を参照してください。

このチュートリアルでは、次の手順を実行します。

手順1: 必要に応じてセキュリティ管理者アカウントを作成する

「チュートリアル: セキュア・アプリケーション・ロールの作成」で、チュートリアルで使用するためにsec_adminというセキュリティ管理者アカウントを作成しました。このチュートリアルでも、このアカウントを使用できます。まだこのアカウントを作成していない場合は、「手順1: セキュリティ管理者アカウントを作成する」の手順を実行して、sec_adminを作成します。

手順2: セキュリティ管理者アカウントを更新する

sec_adminアカウント・ユーザーには、DBMS_RLSパッケージを使用するための権限が必要です。このパッケージはSYSが所有しているため、このパッケージ権限をsec_adminに付与するには、SYSとしてログオンする必要があります。また、sec_adminユーザーには、OEスキーマのCUSTOMERS表およびHRスキーマのEMPLOYEES表に対するSELECT権限も必要です。

sec_adminにDBMS_RLSパッケージを使用する権限を付与するには、次のようにします。 

  1. Database Controlを起動します。

    Database Controlを起動する手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. ユーザーSYSとしてログインし、SYSDBA権限で接続します。

    • ユーザー名: SYS

    • パスワード: SYSのパスワードを入力します。

    • 接続モード: SYSDBA

  3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  4. 「セキュリティ」で、「ユーザー」を選択します。

    「ユーザー」ページが表示されます。

  5. SEC_ADMINユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。

    「ユーザーの編集」ページが表示されます。

  6. 「オブジェクト権限」をクリックして「オブジェクト権限」ページを表示します。

  7. 「オブジェクト・タイプの選択」リストから「パッケージ」を選択し、次に「追加」をクリックします。

    「パッケージオブジェクト権限の追加」ページが表示されます。

  8. 「パッケージオブジェクトの選択」でSYS.DBMS_RLSと入力し、sec_adminDBMS_RLSパッケージへのアクセス権を与えます。

  9. 「使用可能な権限」で「EXECUTE」を選択し、「移動」をクリックして「選択した権限」リストに移動します。

  10. 「OK」をクリックします。

    「ユーザーの編集」ページが表示されます。

  11. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。

    「表オブジェクト権限の追加」ページが表示されます。

  12. 「表オブジェクトの選択」フィールドにHR.EMPLOYEESと入力し、sec_adminHR.EMPLOYEES表へのアクセス権を付与します。

  13. 「使用可能な権限」で「SELECT」を選択し、「移動」をクリックして「選択した権限」リストに移動します。

  14. 「OK」をクリックします。

    「ユーザーの編集」ページが表示されます。これはユーザーsec_adminにEMPLOYEES表およびDBMS_RLSPL/SQLパッケージへのオブジェクト権限があることを示しています。どちらのオブジェクトに対しても付与オプションを選択していないことを確認します。

  15. 「適用」をクリックします。

    すべての変更内容(ここでは、2つのオブジェクト権限の追加)が、sec_adminユーザー・アカウントに適用されます。

手順3: このチュートリアルで使用するユーザー・アカウントを作成する

OE.ORDERS表へのアクセスを必要とする従業員のための、ユーザー・アカウントを作成する準備ができました。

従業員ユーザー・アカウントを作成するには、次のようにします。 

  1. Database Controlで「データベース・インスタンス」リンクの「ユーザー」をクリックして、「ユーザー」ページに戻ります。

    「ユーザー」ページが表示されます。

  2. 「作成」をクリックします。

    「ユーザーの作成」ページが表示されます。

  3. 次の情報を入力します。

    • 名前: LDORAN(Louise Doranのユーザー・アカウントを作成するため)

    • プロファイル: DEFAULT

    • 認証: Password

    • 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

    • デフォルト表領域: USERS

    • 一時表領域: TEMP

    • ステータス: Unlocked

  4. 「オブジェクト権限」タブを選択します。

  5. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。

    「表オブジェクト権限の追加」ページが表示されます。

  6. 「表オブジェクトの選択」で、次のテキストを入力します。

    OE.ORDERS
    

    このテキストにはスペースを含めないでください。

  7. 「使用可能な権限」リストで「SELECT」を選択し、「移動」をクリックして「選択した権限」リストに移動します。「OK」をクリックします。

    OE.ORDERSSELECT権限がリストされた状態で「ユーザーの作成」ページが表示されます。

  8. 「OK」をクリックします。

    「ユーザー」ページが表示されます。「ユーザー名」列にユーザーldoranが表示されます。

  9. ユーザーLDORANの選択ボタンを選択してから、「アクション」リストで「類似作成」を選択します。次に「実行」をクリックします。

    「ユーザーの作成」ページが表示されます。

  10. 次の情報を入力します。

    • 名前: LPOPP(財務管理者のLuis Poppのユーザー・アカウントを作成するため)

    • 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

  11. 「OK」をクリックします。

両方の従業員アカウントが作成され、それらのアカウントには同じ権限が付与されています。ユーザーLPOPPの権限を確認すると、ユーザーLDORANの権限と同じであることがわかります。この段階で、OE.ORDERS表に対してSELECT文を実行すると、どちらのユーザーでも表のすべてのデータを参照できます。

手順4: F_POLICY_ORDERSポリシーのファンクションを作成する

f_policy_ordersポリシーは、ORDERS表に問合せを行うユーザーのフィルタリングに使用される、ポリシーを定義するPL/SQLファンクションです。ユーザーをフィルタリングするために、ポリシー・ファンクションでは、データベースにログイン中のユーザーに関するセッション情報を取得するSYS_CONTEXT PL/SQLファンクションが使用されます。

アプリケーション・コンテキストとパッケージを作成するには、次のようにします。 

  1. Database Controlで「ログアウト」をクリックし、次に「ログイン」をクリックします。

  2. ユーザーsec_adminとしてログインします。

  3. 「スキーマ」をクリックして「スキーマ」サブページを表示します。

  4. 「プログラム」で「ファンクション」を選択します。

    「ファンクション」ページが表示されます。

  5. 「オブジェクト・タイプ」メニューが「ファンクション」に設定されていることを確認してから、「作成」をクリックします。

    「ファンクションの作成」ページが表示されます。

  6. 次の情報を入力します。

    • 名前: F_POLICY_ORDERS

    • スキーマ: SEC_ADMIN

    • ソース: 表示された空のファンクション・コードを削除してから、次のコードを入力し(ただしコード左側の行番号は入力しない)、ログオンしたユーザーが営業担当者かどうかをチェックするファンクションを作成します。最初の行の(schema in varchar2)の先頭にカーソルを置くことで、このテキストをコピー・アンド・ペーストできます。

      f_policy_ordersファンクションが、ユーザーのセッション情報を取得するSYS_CONTEXT PL/SQLファンクションを使用してこれを実行し、sec_adminSELECT権限を持つHR.EMPLOYEES表にあるユーザーのジョブIDとこの情報を比較します。


      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      
      (schema in varchar2,
      tab in varchar2)
      return varchar2 
      as 
       v_job_id   varchar2(20);
       v_user     varchar2(100);
       predicate  varchar2(400);
       
      begin
       v_job_id  := null;
       v_user    := null;
       predicate := '1=2';
      
      v_user := lower(sys_context('userenv','session_user'));
      
       select lower(job_id) into v_job_id from hr.employees
         where lower(email) = v_user;
       
       if  v_job_id='sa_rep' then
          predicate := '1=1';
       else 
          null; 
       end if;
      
       return predicate;
      
       exception 
        when no_data_found then 
         null;
      end;
      

      この例では、次のとおりです。

      • 1から2行目: 保護する必要があるスキーマ(schema)と表(tab)のパラメータを定義します。このファンクションはOE.ORDERS表を指定しません。「手順5: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成する」で作成したACCESSCONTROL_ORDERSポリシーによりこれらのパラメータが使用され、OEスキーマとORDERS表が指定されます。最初にschemaパラメータを作成し、その後にtabパラメータを作成してください。

      • 3行目: WHERE述語句に使用される文字列を返します。この戻り値のデータ型としてはVARCHAR2が常に使用されます。

      • 4から7行目: ジョブID、ログオンしたユーザーのユーザー名、および述語句を格納するよう変数を定義します。

      • 9から25行目: 9行目BEGIN句で開始するWHERE述語の作成が含まれます。

      • 10から12行目: v_job_idおよびv_user変数をNULLに設定し、predicate変数を1=2、つまり誤った値に設定します。この段階では、変数が16行目から始まるテストに通るまで、WHERE述語は一切生成されません。

      • 14行目: SYS_CONTEXTファンクションを使用してユーザーのセッション情報を取得し、v_user変数に記述します。

      • 16から23行目: ジョブIDをログオンしたユーザーと比較して、ユーザーが営業担当者かどうかをチェックします。ログオンしたユーザーのジョブIDがsa_rep(営業担当者)である場合は、predicate変数が1=1に設定されます。つまりユーザーは営業担当者であることになり、テストに通ります。

      • 25行目: WHERE role_of_user_logging_on IS "sa_rep"に翻訳されるWHERE述語が返されます。このWHERE述語は、ユーザーLDORANLPOPPOE.ORDERS表に対して発行するSELECT文に追加されます。

      • 27から29行目: 適切な権限を持っていないユーザーがログオンした場合は、EXCEPTION句が提供されます。

  7. 「OK」をクリックします。

手順5: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成する

仮想プライベート・データベース・ポリシーの作成が終了したので、次に仮想プライベート・データベース・ポリシー、accesscontrol_ordersを作成し、これをORDERS表に追加します。このポリシーには、パフォーマンスを向上させるためにCONTEXT_SENSITIVEパラメータを追加します。これによりOracle Databaseは、アプリケーション・コンテキストの内容が変わった場合にのみ、f_policy_ordersファンクションを実行するようになります(このケースでは、新しいユーザーがログオンした場合)。Oracle Databaseは、ユーザーがORDERS表でSQL SELECT文を実行したときのみポリシーをアクティブにします。このポリシーはINSERTUPDATEおよびDELETE文を許可しないので、ユーザーはこれらの操作を実行できません。

ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーを作成するには、次のようにします。 

  1. Database Controlで「データベース・インスタンス」リンクをクリックして、データベースのホームページを表示します。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」セクションで「仮想プライベート・データベース」をクリックします。

    「仮想プライベート・データベース・ポリシー」ページが表示されます。

  4. 「作成」をクリックします。

    「ポリシーの作成」ページに「ポリシー」サブページが表示されます。

  5. 「一般」で、次の入力を行います。

    • ポリシー名: ACCESSCONTROL_ORDERS

    • オブジェクト名: OE.ORDERS

    • ポリシー・タイプ: 「CONTEXT_SENSITIVE」を選択します。

      このタイプは、最後にカーソルを使用して以降のコンテキストの変更を検出した場合、文実行時にポリシー・ファンクションを再評価します。複数のクライアントが1つのデータベース・セッションを共有するセッション・プーリングの場合、クライアント切替え時に中間層でコンテキストをリセットする必要があります。Oracle Databaseは、このポリシー・タイプのファンクションにより戻された値をキャッシュしません。常に文の解析時にポリシー・ファンクションを実行します。CONTEXT_SENSITIVEポリシー・タイプは1つのオブジェクトのみに適用されます。

      ポリシー・タイプを有効にするには、「有効」ボックスを選択します。

  6. 「ポリシー・ファンクション」で次の入力を行います。

    • ポリシー・ファンクション: ポリシーの述語を生成するファンクション名(この場合はSEC_ADMIN.F_POLICY_ORDERS)を入力します。

    • 長い述語: このボックスは選択しないでください。

      通常は、32KBまでの長さの述語を返すためにこのボックスを選択します。このボックスを選択しないと、Oracle Databaseは述語を4000バイトに制限します。

  7. 「強制」で、「SELECT」オプションを選択します。残りのオプションについては、選択されている場合もありますが、選択を解除してください。

  8. 「セキュリティ関連列」のオプションは、いずれも選択しないでください。

  9. 「OK」をクリックします。

    「仮想プライベート・データベース・ポリシー」ページのポリシーのリストにACCESSCONTROL_ORDERSポリシーが表示されます。

手順6: ACCESSCONTROL_ORDERS仮想プライベート・データベース・ポリシーをテストする

この段階では、それぞれのユーザーとしてログオンし、ORDERS表からのデータの選択を試すことで、accesscontrol_ordersポリシーをテストします。

ACCESSCONTROL_ORDERSポリシーをテストするには、次のようにします。 

  1. SQL*Plusを起動します。

    コマンド・プロンプトで、次のコマンドを入力してSQL*Plusを起動し、販売担当者Louise Doran(ユーザー名はldoran)としてログインします。

    sqlplus ldoran
    Enter password: password
    

    SQL*Plusが起動し、デフォルトのデータベースに接続してから、プロンプトが表示されます。

    SQL*Plusの起動の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 次のSELECT文を入力します。

    SELECT COUNT(*) FROM OE.ORDERS;
    

    Louiseに関する次のような結果が表示されます。表示のとおり、LouiseはOE.ORDERS表のすべての注文にアクセスできます。

    COUNT(*)
    --------
         105
    
  3. 財務管理者のLuis Poppとして接続します。

    CONNECT lpopp
    Enter password: password
    
  4. 次のSELECT文を入力します。

    SELECT COUNT(*) FROM OE.ORDERS;
    

    Popp氏は営業担当者ではないので、OE.ORDERS表のデータへのアクセス権がなく、次のような結果が表示されます。Popp氏にはアクセス権がないので、Oracle Databaseから0行へのアクセスのみが許可されます。

    COUNT(*)
    --------
           0
    
  5. SQL*Plusを終了します。

    EXIT
    

手順7: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルの終了後、使用したデータ構造が不要な場合は削除できます。

sec_adminで作成したデータ構造を削除するには、次のようにします。 

  1. Database Controlで、ユーザーsec_adminとしてログインします。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」で、「仮想プライベート・データベース」を選択します。

    「仮想プライベート・データベース・ポリシー」ページが表示されます。

  4. 「検索」で次の情報を入力して、「実行」をクリックします。

    • スキーマ名: OE

    • オブジェクト名: ORDERS

    • ポリシー名: %

    作成したポリシーのACCESSCONTROL_ORDERSが表示されます。

  5. 「ACCESSCONTROL_ORDERS」を選択し、「削除」をクリックします。

  6. 「確認」ページで「はい」をクリックします。

ユーザー・アカウントおよびロールを削除するには、次のようにします。 

  1. Database Controlで「ログアウト」をクリックし、次に「ログイン」をクリックします。

  2. このチュートリアルで使用されるユーザー・アカウントとロールを作成した管理者ユーザー(SYSTEMなど)としてログインします。

  3. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  4. 「セキュリティ」で、「ユーザー」を選択します。

    「ユーザー」ページが表示されます。

  5. 次の各ユーザーを選択し、「削除」をクリックしてそれらを削除します。

    • LDORAN

    • LPOPP

    sec_adminは削除しないでください。このマニュアルの以降のチュートリアルで、このアカウントが必要になります。

  6. Database Controlを終了します。

Oracle Label Securityによる行レベルのセキュリティの強制

Oracle Label Security(OLS)は、データベース表に行レベルのセキュリティを提供します。セキュリティのレベルを定義する1つまたは複数のセキュリティ・ラベルを表のデータ行に割り当てることで、セキュリティを実装できます。

この項の内容は次のとおりです。

Oracle Label Securityについて

Oracle Label Securityを使用すると、データベース表を行レベルで保護でき、ニーズに応じて行を様々なセキュリティ・レベルに割り当てることができます。たとえば、非常に機密性の高いデータを含む行にはHIGHLY SENSITIVEというラベルを割り当て、機密性がそれほど高くないデータを含む行にはSENSITIVEというラベルを割り当てたりできます。すべてのユーザーがアクセスできる行にはPUBLICというラベルを割り当てます。ラベルは必要なだけ作成でき、使用する環境のセキュリティ要件に適合させることができます。

ラベルを作成して割り当てたら、Oracle Label Securityを使用して、これらのラベルに基づき特定の行に特定のユーザー認可を割り当てます。以降、Oracle Label Securityはデータ行のラベルとユーザーのセキュリティ・クリアランスを自動的に比較し、行のデータにユーザーがアクセスできるかどうかを決定します。

Oracle Label Securityポリシーには次のコンポーネントがあります。

  • ラベル。データおよびユーザー、ユーザーとプログラム・ユニットの認証のラベルは、保護されている特定のオブジェクトへのアクセスを制御します。ラベルは、次の要素で構成されています。

    • レベル。レベルにより、行に割り当てる機密性のタイプ(たとえば、SENSITIVEHIGHLY SENSITIVEなど)が指定されます。

    • コンパートメント。(オプション)データは、レベルが同じでも、企業内の別々のプロジェクト(たとえばACME MergerやIT Securityなど)に属すことができます。コンパートメントはこの例ではプロジェクトのことで、より厳密なアクセス制御を定義できます。コンパートメントは行政環境でよく使用されます。

    • グループ。(オプション)グループは、データを所有する組織またはデータにアクセスする組織を識別します。たとえば、UK、US、Asia、Europeなどです。グループは商業環境と行政環境の両方で使用され、柔軟性が高いことからコンパートメントのかわりに使用されることもあります。

  • ポリシー。ポリシーは、ラベル、ルール、認証と関連付けられる名前です。

Oracle Label Securityのラベルとポリシーは、Database Controlで作成するか、SA_SYSDBASA_COMPONENTSSA_LABEL_ADMIN PL/SQLパッケージを使用して作成できます。PL/SQLパッケージの詳細は、『Oracle Label Security管理者ガイド』を参照してください。このマニュアルには、Database Controlを使用してOracle Label Securityのラベルとポリシーを作成する方法が記載されています。

たとえば、ユーザーがアプリケーション表のSELECT権限を持っているとします。次の図にあるように、ユーザーがSELECT文を実行すると、Oracle Label Securityは選択された各行を評価して、このユーザーがアクセスできるかどうかを決定します。決定は、セキュリティ管理者がユーザーに割り当てた権限とアクセス・ラベルに基づいて行われます。Oracle Label Securityを設定して、UPDATEDELETEINSERT文でもセキュリティ・チェックを行うことができます。

olsag008.gifの説明が続きます
olsag008.gifの説明

Oracle Label Securityのポリシー計画のガイドライン

Oracle Label Securityポリシーを作成する前に、アプリケーション・スキーマにラベルを適用する場所と方法を決定する必要があります。

アプリケーション・データのOracle Label Securityポリシーを適用する場所と方法を決定するには、次のガイドラインに従います。 

  1. アプリケーション・スキーマを分析します。Oracle Label Securityポリシーを適用する必要がある表を特定します。多くの場合、Oracle Label Securityポリシーが必要となるアプリケーションの表は限られています。たとえば、ルックアップ値や定数を格納している表などは、通常セキュリティ・ポリシーで保護する必要はありません。ただし、患者の病歴や従業員の給与などの機密データを含む表は、ポリシーを使用して保護する必要があります。

  2. データ・レベルの使用状況を分析します。表の特定後、表のデータを評価して、表のセキュリティ・レベルを決定します。分析のこの段階では、ビジネス活動について熟知しているユーザーの意見も参考にしてください。

    データ・レベルはデータの機密性を表します。データ・レベルには、PUBLICSENSITIVEHIGHLY SENSITIVEなどがあります。今後、機密性がどう変化するかも考慮する必要があります。そうすることで、強固なラベル定義が作成できます。

    データ・レコードに割り当てられた機密性ラベルのレベル・コンポーネントが、ユーザーのクリアランスより低いレベルの場合、このレコードにアクセスするユーザーにはこの行へのアクセス権が付与されます。

  3. データ・コンパートメントの使用状況を分析します。データ・コンパートメントは主に、行政環境で使用されます。使用するアプリケーションが商業アプリケーションの場合、多くの場合はデータ・コンパートメントを作成しません。

  4. データ・グループを分析します。データ・グループとデータ・コンパートメントは通常、組織、地域、データ所有者によってデータへのアクセスを制御するために使用されます。たとえば、アプリケーションが販売アプリケーションの場合、国または地域によって販売データへのアクセスを制御できます。

    コンパートメントおよびグループと一緒に機密性ラベルがデータ・レコードに割り当てられた場合、このデータを読み取るユーザーは、データ・ラベル、データ・ラベルのすべてのコンパートメント、機密性ラベル内の少なくとも1つのグループのレベルと同等またはそれ以上のレベルのユーザー・クリアランスを持っている必要があります。グループは階層になっているため、データ・ラベルに割り当てられた機密性ラベルの1つのグループの親を所有している場合は、そのレコードにもアクセスできます。

  5. ユーザー分布を分析します。ユーザーを複数のユーザー・タイプに分類します。たとえば、通常ユーザー、特権ユーザー、管理ユーザーのいずれかに指定します。ユーザーのカテゴリを作成したら、手順2で作成したデータ・レベルと比較します。カテゴリは、手順1で実行したスキーマ分析で識別した各表に正確に対応する必要があります。次に、ユーザー分布の組織構造を手順4で識別したデータ・グループと比較します。

  6. 特権ユーザーと管理ユーザーを確認して、割り当てるOracle Label Security認可を決定します。Oracle Label Securityには、ユーザーに割り当てることのできる特別な認可が複数あります。多くの場合、通常ユーザーに特別な認可は必要ありません。認可の詳細は、『Oracle Label Security管理者ガイド』を参照してください。

  7. 収集したデータを確認し、ドキュメント化します。この手順は企業全体の連続性を維持するために重要であり、ドキュメントは企業のセキュリティ・ポリシーの一部となります。たとえば、このドキュメントには保護されるアプリケーションのリストとその理由などが含まれます。

チュートリアル: HR.LOCATIONS表へのセキュリティ・ラベルの適用

このチュートリアルでは、Oracle Label Securityを使用する一般的な方法を説明します。ここではHR.LOCATIONS表にセキュリティ・ラベルを適用します。ユーザーskingkpartnerldoranは、この表内の特定の行に対して、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)

次のラベルを適用します。

ラベル 権限
CONFIDENTIAL ミュンヘン、オックスフォード、ローマに読取りアクセス権を付与します。
SENSITIVE 北京、東京、シンガポールに読取りアクセス権を付与します。
PUBLIC HR.LOCATIONS内の他のすべての都市に読取りアクセス権を付与します。

このチュートリアルでは、次の手順を実行します。

手順1: Oracle Label Securityを登録し、LBACSYSアカウントを有効にする

Oracle Label Securityは、デフォルトのOracle Databaseのインストールでインストールされます。ただし、Oracle Label Securityを登録してから、デフォルトのOracle Label Securityアカウント(LBACSYSと呼ばれる)を有効にする必要があります。

Oracle DatabaseでのOracle Label Securityの登録

インストールの完了後、Oracle Label SecurityをOracle Databaseに登録する必要があります。SQL*Plusで次のSELECT文を入力すると、Oracle Label Securityがすでに登録されているかどうかを確認できます。PARAMETER列では大/小文字が区別されるため、ここに示されているとおりに入力してください。

SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Label Security';

出力がTRUEの場合、Oracle Label Securityは登録されています。「Oracle Label Securityのデフォルトのユーザー・アカウントLBACSYSの有効化」に進みます。FALSEの場合は、Oracle Label Securityを登録します。

Oracle Label SecurityをOracle Databaseに登録するには、次のようにします。 

  1. データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。

    • UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを停止します。次に、コマンドラインからDatabase Controlコンソール・プロセスとリスナーを停止します。

      次に例を示します。

      sqlplus sys as sysoper
      Enter password: password
      
      SQL> SHUTDOWN IMMEDIATE
      SQL> EXIT
      
      $ emctl stop dbconsole
      $ lsnrctl stop [listener_name]
      

      Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを停止します。

      $ srvctl stop database -d db_name
      
    • Windows: 「コントロール パネル」の「サービス」ツールから、データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。Oracle Databaseサービスの名前は、Oracleで始まります。

  2. Oracle Label Securityを次の手順で有効にします。

    • UNIX: 次のコマンドを実行します。

      $ cd $ORACLE_HOME/rdbms/lib
      $ make -f ins_rdbms.mk lbac_on ioracle
      
    • Windows: ORACLE_BASE\ORACLE_HOME\binディレクトリで、oralbacll.dll.dblファイルの名前をoralbacll.dllに変更します。

  3. データベースとリスナーを再起動します。(まだDatabase Controlコンソール・プロセスは再起動しないでください。)

    • UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを再起動します。次に、コマンドラインからリスナーを再起動します。

      次に例を示します。

      sqlplus sys as sysoper
      Enter password: password
      
      SQL> STARTUP
      SQL> EXIT
      
      $ lsnrctl start [listener_name]
      

      Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを再起動します。

      $ srvctl start database -d db_name
      
    • Windows: 「コントロール パネル」の「サービス」ツールから、データベースおよびリスナーを再起動します。Oracle Databaseサービスの名前は、Oracleで始まります。

  4. Database Configuration Assistantを起動します。

    • UNIX: 端末ウィンドウで次のコマンドを入力します。

      dbca
      

      一般的に、dbca$ORACLE_HOME/binディレクトリにあります。

    • Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - ORACLE_HOME」「Configuration and Migration Tools」「Database Configuration Assistant」の順にクリックします。

      または、次のコマンド・プロンプトでDatabase Configuration Assistantを起動できます。

      dbca
      

      UNIXでは一般的に、dbcaORACLE_BASE\ORACLE_HOME\binディレクトリにあります。

  5. 「ようこそ」ページで「次へ」をクリックします。

    「操作」ページが表示されます。

  6. 「データベース・オプションの構成」を選択して、「次へ」をクリックします。

    「データベース」ページが表示されます。

  7. リストから、Oracle Databaseをインストールしたデータベースを選択し、DBAロールが付与されているユーザーの名前(ユーザーSYSなど)およびパスワードを入力します。「次へ」をクリックします。

    「データベース・コンテンツ」ページが表示されます。

    DBCAの「データベース・コンテンツ」ページ
    ols_config.gifの説明

  8. 「Oracle Label Security」を選択し、「次へ」をクリックします。

    「接続モード」ページが表示されます。

  9. このデータベースの作成時の選択内容に応じて「専用サーバー・モード」「共有サーバー・モード」のどちらかを選択し、「終了」をクリックし、確認プロンプトで「OK」をクリックします。

    Oracle Label Securityが登録され、データベース・インスタンスが再起動されます。

  10. Database Configuration Assistantを終了します。

  11. Database Controlコンソール・プロセスを再起動します。

    • UNIX: 次のコマンドを実行します。

      $ emctl start dbconsole
      
    • Windows: 「コントロール パネル」の「サービス」ツールから、Database Controlコンソール・プロセス(たとえば、データベースの名前がorclの場合はOracleDBConsoleorcl)を再起動します。

Oracle Label Securityのデフォルトのユーザー・アカウントLBACSYSの有効化

Oracle Label Securityのインストール・プロセスにより、Oracle Label Security機能を管理するデフォルトのユーザー・アカウントLBACSYSが作成されます。管理者は、このユーザーと同じ権限(SA_SYSDBASA_COMPONENTS,およびSA_LABEL_ADMIN PL/SQLパッケージに対するEXECUTE権限)を持つユーザーを作成できます。デフォルトでは、LBACYSは、パスワードの期限が切れている、ロックされたアカウントとして作成されます。次の手順では、LBACYSをロック解除し、新しいパスワードを作成します。ユーザーLBACSYSはDatabase Controlを使用してOracle Label Securityポリシーを作成しているため、SELECT ANY DICTIONARY権限をLBACSYSに付与する必要があります。

LBACSYSユーザー・アカウントを有効にするには、次のようにします。 

  1. SYSDBA権限を持つユーザーSYSとしてDatabase Controlにログインします。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」で、「ユーザー」を選択します。

    「ユーザー」ページが表示されます。

  4. LBACSYSユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。

    「ユーザーの編集」ページが表示されます。

  5. 「ステータス」の横にある「ロック解除」を選択します。

  6. 「パスワードの入力」および「パスワードの確認」フィールドで、「パスワードの作成要件」に従ってセキュアなパスワードを入力します。

    セキュリティを考慮して、以前のリリースのOracle Databaseで使用していたパスワードと同じパスワードは再利用しないでください。

  7. 「ロール」をクリックして「ユーザーの編集: LBACSYS」ページを表示します。

  8. 「リストを編集」をクリックします。

    「ロールの変更」ページが表示されます。

  9. 「使用可能なロール」リストからSELECT_CATALOG_ROLEロールを選択し、「移動」をクリックして「選択したロール」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

  10. 「システム権限」をクリックします。

  11. 「リストを編集」をクリックします。

    「システム権限の変更」ページが表示されます。

  12. 「使用可能なシステム権限」リストからSELECT ANY DICTIONARYを選択し、「移動」をクリックして「選択したシステム権限」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

  13. 「オブジェクト権限」を選択します。

  14. 「オブジェクト・タイプの選択」リストから「パッケージ」を選択し、次に「追加」をクリックします。

  15. 「パッケージオブジェクト権限の追加」ページで、次の手順を実行します。

    1. 「パッケージオブジェクトの選択」で、懐中電灯アイコンを選択して「パッケージオブジェクトの選択」ウィンドウを表示します。

    2. 「スキーマ」をLBACSYSに設定します。

    3. 「パッケージ名の検索」フィールドに%と入力し、「実行」をクリックします。

    4. リストされたオブジェクトの両方のページについて、リストされているパッケージ・オブジェクトをすべて選択します。

    5. 「選択」をクリックして、「パッケージオブジェクト権限の追加」ウィンドウに戻ります。

    6. 「使用可能な権限」で、EXECUTE権限を「選択した権限」リストに移動します。

    7. 「OK」をクリックします。

  16. 「OK」をクリックして「ユーザーの編集」ページに戻り、「適用」をクリックして変更を適用します。

手順2: Oracle Label Securityのチュートリアルで使用する1つのロールおよび3人のユーザーを作成する

ロールと3人のユーザーを作成し、これらのユーザーにロールを付与します。

ロールの作成

emp_roleロールは、これから作成する3人のユーザーに必要な権限を付与します。

emp_roleロールを作成するには、次のようにします。 

  1. ユーザーSYSTEMとしてDatabase Controlに接続します。

  2. データベースのホームページで、「サーバー」をクリックして「サーバー」サブページを表示します。

  3. 「セキュリティ」セクションで「ロール」をクリックします。

    「ロール」ページが表示されます。

  4. 「作成」をクリックします。

    「ロールの作成」ページが表示されます。

  5. 「名前」フィールドでEMP_ROLEと入力し、「認証」は「なし」のままにします。

  6. 「オブジェクト権限」サブページを選択します。

  7. 「オブジェクト・タイプの選択」リストから「表」を選択し、次に「追加」をクリックします。

    「表オブジェクト権限の追加」ページが表示されます。

  8. 「表オブジェクトの選択」でHR.LOCATIONSと入力し、HRスキーマのLOCATIONS表を選択します。次に「使用可能な権限」で、SELECTを「選択した権限」リストに移動します。

  9. 「OK」をクリックして「ロールの作成」ページに戻り、「OK」をクリックして「ロール」ページに戻ります。

ユーザーの作成

作成する3人のユーザーは、役職に基づき、HR.LOCATIONS表に対して異なるレベルのアクセス権を持ちます。Steven King(sking)は広報部長で、HR.LOCATIONS表への完全な読取りアクセス権を持ちます。Karen Partners(kpartner)は販売部マネージャでより制限されたアクセス権を持ち、Louise Doran(ldoran)は販売担当者でアクセス権が最も制限されています。

ユーザーを作成するには、次のようにします。 

  1. Database ControlにSYSTEMとしてログインしていることを確認します。

    SYSTEMとしてログインしていない場合、「ログアウト」を選択し、次に「ログイン」を選択します。「ログイン」ページでSYSTEMとこのアカウントに割り当てられたパスワードを入力します。「接続モード」「標準」に設定します。「ログイン」を選択してログインします。

    SYSTEMとしてログインしている場合、「データベース・インスタンス」リンクをクリックして、ホームページを表示します。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」セクションで「ユーザー」をクリックします。

    「ユーザー」ページが表示されます。

  4. 「作成」をクリックします。

    「ユーザーの作成」ページが表示されます。

  5. 次の情報を入力します。

    • 名前: SKING

    • プロファイル: DEFAULT

    • 認証: パスワード

    • 「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。

    • デフォルト表領域: USERS

    • 一時表領域: TEMP

    • ステータス: 「ロック解除」に設定します。

    • ロール: 「ロール」サブページを選択し、「リストを編集」を選択してemp_roleロールをskingに付与します。「使用可能なロール」リストからemp_roleを選択し、「移動」をクリックして「選択したロール」リストに移動します。「OK」をクリックします。「ユーザーの作成」ページで、CONNECTロールとemp_roleロールの両方で「デフォルト」ボックスが選択されていることを確認します。

    • システム権限: 「システム権限」サブページを選択し、「リストを編集」をクリックしてCREATE SESSION権限を付与します。skingにはADMIN OPTIONオプションを付与しないでください。

  6. 「OK」をクリックして「ユーザーの作成」ページに戻り、そこで「OK」をクリックして「ユーザー」ページに戻ります。

  7. 「ユーザー」ページでSKINGを選択し、「アクション」「類似作成」に設定して「実行」をクリックします。

    「ユーザーの作成」ページが表示されます。

  8. kpartnerおよびldoranのアカウントを作成します。

    名前とパスワードを作成します。(「パスワードの作成要件」を参照してください。)ロールやシステム権限を付与する必要はありません。これらのアカウントのロールおよびシステム権限は、skingアカウントで定義され、自動的に作成されます。

この段階で、同じ権限を持つ3人のユーザーが作成されました。これらのすべてのユーザーは、EMP_ROLEロールによってHR.LOCATIONS表に対するSELECT権限を持っています。

手順3: Oracle Label SecurityのACCESS_LOCATIONSポリシーを作成する

ここでは、ACCESS_LOCATIONSポリシーを作成します。

ACCESS_LOCATIONSポリシーを作成するには、次のようにします。 

  1. ユーザーLBACSYSとしてDatabase Controlにログインします。

    「ログアウト」を選択し、次に「ログイン」を選択します。「ログイン」ページで、ユーザーLBACSYSとしてログインします。「接続モード」「標準」に設定します。「ログイン」を選択してログインします。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」セクションで「Oracle Label Security」をクリックします。

    「Label Securityポリシー」ページが表示されます。

  4. 「作成」をクリックします。

  5. 「Label Securityポリシーの作成」ページで、次の情報を入力します。

    • 名前: ACCESS_LOCATIONS

    • ラベル列: OLS_COLUMN

      以降で、表にポリシーを適用するときに、このラベル列が表に追加されます。デフォルトでは、ポリシー・ラベル列のデータ型はNUMBER(10)です。

    • ラベル列の非表示: ラベル列が非表示にならないように、このボックスの選択を解除します。(デフォルトでは選択が解除されています。)

      通常、ラベル列は非表示にしますが、開発段階ではチェックできるように表示しておきます。ポリシーの作成が完了し、使用が開始された後、アプリケーションから見えないようにこの列は非表示にします。多くのアプリケーションは、新たな列を表示するようには設計されていないため、列を非表示にすると、アプリケーションが破損しなくなります。

    • 有効: このボックスを選択すると、ポリシーが有効になります。(デフォルトでは有効になっています。)

    • インバース・ユーザーの読取りおよび書込みグループ(INVERSE_GROUP): このオプションは選択しないでください。

    • デフォルトのポリシー強制オプション: 「ポリシー強制の適用」を選択して、次のオプションを選択します。

      すべての問合せ用(READ_CONTROL)

      ラベル列のUPDATE操作にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

  6. 「OK」をクリックします。

    ACCESS_LOCATIONSポリシーが「Label Securityポリシー」ページに表示されます。

    ols_new_policy.gifの説明が続きます
    ols_new_policy.gifの説明

手順4: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する

この段階では、ポリシーが作成され、ポリシーの強制オプションが設定されています。次に、ポリシーで使用するラベル・コンポーネントを作成します。

少なくとも、PUBLICまたはSENSITIVEなど、1つ以上のレベルを作成し、詳細名、短縮名、機密性レベルを表す数値を定義する必要があります。区分およびグループはオプションです。

レベル数値は、対応するラベルに必要な機密性のレベルを表します。セキュリティ・ポリシーに追加のレベルが必要になる場合に備えて、後で拡張できるような数値の範囲を選択します。たとえば、LOW_SENSITIVITYHIGH_SENSITIVITYというレベルを追加する必要が生じた場合、LOW_SENSITIVITYには7300、HIGH_SENSITIVITYには7600という数値を割り当て、ポリシーにより作成されるセキュリティ・スケールに適合させることができます。通常、番号が大きいほどデータの機密性が高くなります。

コンパートメントは、ラベルが割り当てられたデータの機密性を表す領域を識別し、レベル内のより詳細なレベルを表します。コンパートメントはオプションです。

グループは、データを所有する組織またはデータにアクセスする組織を識別します。グループはデータの配布を制御する際に有用であり、組織的な変更にもタイムリに対応できます。グループはオプションです。

この手順では、レベル・コンポーネントを定義します。レベル・コンポーネントは、ACCESS_LOCATIONSポリシーで作成する必要があるSENSITIVECONFIDENTIALPUBLICラベルの名前と関係に影響します。

ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義するには、次のようにします。 

  1. 「Label Securityポリシー」ページでACCESS_LOCATIONSポリシーを選択し、次に「編集」を選択します。

    「Label Securityポリシーの編集」ページが表示されます。

  2. 「ラベル・コンポーネント」サブページを選択します。

  3. 「レベル」で、「 5行追加」をクリックし、次のように詳細名、短縮名および数値タグを入力します(フィールド間を移動するには、[Tab]キーを押します)。


    詳細名 短縮名 数値タグ

    SENSITIVE SENS 3000

    CONFIDENTIAL CONF 2000

    PUBLIC PUB 1000

  4. 「適用」をクリックします。

手順5: ACCESS_LOCATIONSポリシーのデータ・ラベルを作成する

この手順では、「手順4: ACCESS_LOCATIONSポリシーのレベル・コンポーネントを定義する」で作成したポリシーのデータ・ラベルを作成します。データ・ラベルを作成するには、各レベルに数値タグを割り当てる必要があります。このタグの数値は、後でポリシーを表に適用するときにセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。

データ・ラベルを作成するには、次のようにします。 

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストで「データ・ラベル」を選択し、次に「実行」をクリックします。

    「データ・ラベル」ページが表示されます。

  4. 「追加」をクリックします。

    「データ・ラベルの作成」ページが表示されます。

  5. 次の情報を入力します。

  6. 「OK」をクリックします。

    「データ・ラベル」ページにデータ・ラベルが表示されます。

  7. もう一度「追加」をクリックし、CONFレベルのデータ・ラベルを次のように作成します。

    • 数値タグ: 2000と入力します。

    • レベル: リストからCONFを選択します。

  8. 「OK」をクリックします。

  9. もう一度「追加」をクリックし、SENSレベルのデータ・ラベルを次のように作成します。

    • 数値タグ: 3000と入力します。

    • レベル: リストからSENSを選択します。

  10. 「OK」をクリックします。

    この段階で、「データ・ラベル」ページにCONFPUBおよびSENSラベルが表示されます。

    ols_dlabel2.gifの説明が続きます
    ols_dlabel2.gifの説明

    後で、HR.LOCATIONS表にポリシーを適用したときに、タグの数値はセキュリティ列に格納されます。これは、ラベルの機密性とは関係がなく、ポリシーのラベルの識別にのみ使用されます。

手順6: ACCESS_LOCATIONSポリシーのユーザー認可を作成する

次に、ポリシーのユーザー認可を作成します。

ポリシーのユーザー認可を作成するには、次のようにします。 

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストで「認可」を選択し、次に「実行」をクリックします。

    「認可」ページが表示されます。

  4. 「ユーザーの追加」をクリックします。

    「ユーザーの追加: ユーザー」ページが表示されます。

  5. 「データベース・ユーザー」で「追加」をクリックします。

    「検索と選択: ユーザー」ページが表示されます。SKINGと入力して、「実行」をクリックします。

    通常、データベース・ユーザー・アカウントは、たとえばCREATE USER SQL文を使用してデータベースにすでに作成されています。

    その他のオプションは「データベース以外のユーザー」です。アプリケーション・ユーザーの多くは、データベース・ユーザー以外のユーザーとなります。データベース・ユーザー以外のユーザーは、データベース内には存在していません。Oracle Label Securityの命名方式に一致し、VARCHAR2(30)の長さのフィールドに適合していれば、どのユーザー名も追加できます。ただし、アプリケーションがデータベースに接続したときに、データベース・ユーザー以外のユーザーに関連するセキュリティ情報は、Oracle Databaseにより自動的には構成されません。この場合、アプリケーションは、Oracle Label Security関数を呼び出し、データベース・ユーザーではないユーザーのラベル認可を行う必要があります。

  6. ユーザーSKINGのチェック・ボックスを選択して、「選択」をクリックします。

    「ユーザーの作成」ページにユーザーSKINGが表示されます。

    ols_auth_user.gifの説明が続きます
    ols_auth_user.gifの説明

  7. ユーザーSKINGのチェック・ボックスを選択して、「次へ」をクリックします。

    (SKINGのチェック・ボックスを表示するために、ページの更新が必要な場合があります。)

  8. 「レベル、区分およびグループ」ページで、次の設定を入力します。

    • 最大レベル: SENS(SENSITIVE)

    • 最小レベル: CONF(CONFIDENTIAL)

    • デフォルト・レベル: SENS

    • 行レベル: SENS

  9. 「次へ」をクリックして、「権限」ページに移動します。

  10. 「権限」ページで「次へ」を選択して、「監査」ページに移動します。

    ラベル認可を介してポリシーが強制されます。「権限」ページではユーザーによるポリシーのラベル認可をオーバーライド可能にするため、オプションは選択しないでください。

  11. 「ユーザーの追加: 監査」ページの「監査」ペインで、すべての監査の操作がNoneに設定されていることを確認し、「次へ」をクリックします。

    「確認」ページが表示されます。

    ols_auth.gifの説明が続きます
    ols_auth.gifの説明

  12. 設定が正しいことを確認し、「終了」をクリックします。

    「確認」ページに、選択したすべての認可設定が表示されます。

  13. 手順4から12までを繰り返してユーザーKPARTNERに対して次の認可を作成し、このユーザーがHR.LOCATIONSの機密データおよびパブリック・データを読み取れるようにします。

    • レベル、区分およびグループ: 4つすべてのレベルを次のように設定します。

      • 最大レベル: CONF(CONFIDENTIAL)

      • 最小レベル: PUB(PUBLIC)

      • デフォルト・レベル: CONF

      • 行レベル: CONF

    • 権限: 権限は選択しません。

    • 監査:すべてNoneに設定します。

  14. ユーザーLDORANに対して次の認可を作成します。このユーザーは、HR.LOCATIONSのパブリック・データの読取りのみが許可されます。

    • レベル、区分およびグループ: 4つすべてのレベルをPUBに設定します。

    • 権限: 権限は選択しません。

    • 監査:すべてNoneに設定します。

手順7: HR.LOCATIONS表にACCESS_LOCATIONSポリシーを適用する

次に、HR.LOCATIONS表にポリシーを適用します。

HR.LOCATIONS表にACCESS_LOCATIONSポリシーを適用するには、次のようにします。 

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストで「適用」を選択し、次に「実行」をクリックします。

    「適用」ページが表示されます。

  4. 「作成」をクリックします。

    「表の追加」ページが表示されます。

  5. 「表」フィールドに、HR.LOCATIONSと入力します。

  6. 「ポリシー列の非表示」ボックスが選択されていないことを確認します。

  7. 「有効」ボックスが選択されていることを確認します。

  8. 「ポリシー強制オプション」で、「デフォルトのポリシー強制を使用」を選択します。

    ACCESS_LOCATIONSのポリシーの強制のデフォルト・オプションは次のとおりです。

    • すべての問合せ用(READ_CONTROL)

    • ラベル列の更新にセッションのデフォルト・ラベルを使用(LABEL_DEFAULT)

  9. 「OK」をクリックします。

    ACCESS_LOCATIONSポリシーがHR.LOCATIONS表に適用されます。

    ols_apply.gifの説明が続きます
    ols_apply.gifの説明

手順8: HR.LOCATIONSデータにACCESS_LOCATIONSラベルを追加する

ACCESS_LOCATIONSポリシーをHR.LOCATIONS表に適用したら、ポリシーのラベルをLOCATIONSOLS_COLUMNに適用する必要があります。ユーザーHR(この表の所有者)がこの操作を行うには、LOCATIONSの非表示のOLS_COLUMN列にデータ・ラベルを追加する前に、対象の場所への完全なアクセス権を持っている必要があります。

HR.LOCATIONS表に対するHR FULLポリシー権限の付与

ラベル・セキュリティ管理ユーザーLBACSYSは、必要な権限をHRに付与できます。

ACCESS_LOCATIONSポリシーへの完全なアクセス権をHRに付与するには、次のようにします。 

  1. 「Label Securityポリシー」リンクを選択して、「Label Securityポリシー」ページに戻ります。

  2. ACCESS_LOCATIONSポリシーの選択ボタンを選択します。

  3. 「アクション」リストから「認可」を選択し、「実行」をクリックします。

    「認可」ページが表示されます。

  4. 「ユーザーの追加」をクリックします。

    「ユーザーの追加」ページが表示されます。

  5. 「データベース・ユーザー」で「追加」をクリックします。

    「検索と選択」ウィンドウが表示されます。

  6. ユーザーHRのボックスを選択して、「選択」をクリックします。

    「ユーザーの作成」ページにユーザーHRが表示されます。

  7. 「次へ」をクリックして「ユーザーの追加: レベル、区分およびグループ」ページを表示し、「次へ」をもう一度クリックして「権限」ページを表示します。

  8. 「すべてのラベル・セキュリティ・チェックを省略(FULL)」権限を選択し、「次へ」をクリックします。

    「監査」ページが表示されます。

  9. 「次へ」をクリックします。

    「確認」ページが表示されます。

  10. 「終了」をクリックします。

    この段階で、HRは他のユーザーとともに「認可」ページにリストされています。

    ols_hr_added.gifの説明が続きます
    ols_hr_added.gifの説明

  11. Database Controlを終了します。

HR.LOCATIONSのOLS_COLUMN表の更新

この時点で、ユーザーHRHR.LOCATIONS表のOLS_COLUMN列を更新して、CITY列の都市に基づいて表内の特定の行に割り当てられるデータ・ラベルを追加できます。

HR.LOCATIONSのOLS_COLUMN表を更新するには、次のようにします。 

  1. 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として再度ログインしてみてください。

  2. 次のUPDATE文を入力して、北京、東京、シンガポールにSENSラベルを適用します。

    UPDATE LOCATIONS
    SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','SENS')
    WHERE UPPER(city) IN ('BEIJING', 'TOKYO', 'SINGAPORE');
    
  3. 次のUPDATE文を入力して、ミュンヘン、オックスフォード、ローマにCONFラベルを適用します。

    UPDATE LOCATIONS
    SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','CONF')
    WHERE UPPER(city) IN ('MUNICH', 'OXFORD', 'ROMA');
    
  4. 次のUPDATE文を入力して、残りの都市にPUBラベルを適用します。

    UPDATE LOCATIONS
    SET ols_column = CHAR_TO_LABEL('ACCESS_LOCATIONS','PUB')
    WHERE ols_column IS NULL;
    
  5. 列が更新されたことをチェックするには、次の文を入力します。

    SELECT LABEL_TO_CHAR (OLS_COLUMN) FROM LOCATIONS;
    

    次の出力が表示されます。

    LABEL_TO_CHAR(OLS_COLUMN)
    -----------------------------------------------------------------------------
    CONF
    PUB
    SENS
    PUB
    PUB
    PUB
    PUB
    PUB
    PUB
    PUB
    SENS
     
    LABEL_TO_CHAR(OLS_COLUMN)
    -----------------------------------------------------------------------------
    PUB
    PUB
    SENS
    PUB
    CONF
    PUB
    CONF
    PUB
    PUB
    PUB
    PUB
     
    LABEL_TO_CHAR(OLS_COLUMN)
    -----------------------------------------------------------------------------
    PUB
     
    23 rows selected. 
    

    注意:

    前述の問合せでラベル列名(OLS_COLUMN)を明示的に使用すると、ラベル列が非表示になっていても表示できます。

    ラベル列が非表示であるときに、ラベル列名を明示的に指定しない場合、ラベル列は問合せ結果に表示されません。たとえば、ラベル列が非表示である場合、SELECT * FROM LOCATIONS問合せを実行しても、ラベル列は表示されません。この機能を使用すると、アプリケーションからラベル列が見えないようにできます。ラベル列が追加される前に設計されたアプリケーションには、ラベル列は認識されず、表示されません。


手順9: ACCESS_LOCATIONSポリシーをテストする

ACCESS_LOCATIONSポリシーの作成は完了しました。次に、ポリシーをテストします。ポリシーは、3人の各ユーザーとしてSQL*Plusにログインし、HR.LOCATIONS表に対してSELECTを実行することでテストできます。

ACCESS_LOCATIONSポリシーをテストするには、次のようにします。 

  1. SQL*Plusでユーザーskingとして接続します。

    CONNECT sking
    Enter password: password
    
  2. 次のように入力します。

    次のコマンドは、読み取りやすいように表の列幅を書式設定します。この手順を実行するのは、(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.
    
  3. ユーザーkpartnerldoranで、手順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.
    
  4. SQL*Plusを終了します。

手順10: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルで作成したコンポーネントを削除します。

このチュートリアルで使用したコンポーネントを削除するには、次のようにします。 

  1. Database Controlで、ユーザーSYSTEMとして接続します。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」セクションで「ユーザー」をクリックします。

  4. ユーザーkpartnerを選択してから、「削除」をクリックします。

  5. 「確認」ページで「はい」をクリックします。

  6. ユーザーldoranskingで、手順4と手順5を繰り返します。

  7. 「データベース・インスタンス」リンクをクリックしてデータベースのホームページに戻ります。

  8. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  9. 「セキュリティ」セクションで「ロール」をクリックします。

  10. emp_roleロールを選択し、次に「削除」を選択します。

  11. 「確認」ダイアログ・ボックスで、「はい」をクリックします。

  12. Database Controlからログアウトし、LABCSYSとして再度ログインします。

  13. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  14. 「セキュリティ」セクションで「Oracle Label Security」をクリックします。

  15. 「ラベル・セキュリティ・ポリシー」ページで、ACCESS_LOCATIONSポリシーを選択してから、「削除」をクリックします。「確認」ページで、「列の削除」チェック・ボックスを選択してから、「はい」をクリックします。

    ACCESS_LOCATIONSポリシーを削除すると、HR.LOCATIONS表からOLS_COLUMN列も削除されます。

  16. Database Controlからログアウトします。

  17. オプションで、Oracle Label Securityを削除します。

    Oracle Label Securityの削除については、『Oracle Label Security管理者ガイド』を参照してください。

Oracle Database Vaultを使用した管理者のアクセスの制御

Oracle Database Vaultを使用すると、Oracle Databaseに対する管理アクセスを制限できます。これによって、内部の脅威に対する保護、コンプライアンス要件の遵守、職務分離の適用など、現在も続く、セキュリティの最も困難な問題に対処できます。


関連項目:

『Oracle Database Vault管理者ガイド』

Oracle Database Vaultについて

通常、Oracle database管理者の主な仕事は、データベースのチューニング、アップグレードのインストール、データベースの状態監視、検出した問題の解決を行うことです。Oracle Databaseのデフォルトのインストールでは、データベース管理者はユーザーを作成し、ユーザー・データにアクセスできます。セキュリティを強化するために、これらの作業は実行する必要があるユーザーにのみ制限する必要があります。これは業務分離と呼ばれ、データベース管理者がパフォーマンス・チューニングなど、その専門知識にあったタスクに集中できるようになります。

Oracle Database VaultではOracle Databaseへの管理者のアクセスが制限されるため、Payment Card Industry(PCI)Data Security Standard(DSS)要件、Sarbanes-Oxley(SOX)Act、European Union(EU)Privacy Directive、Healthcare Insurance Portability and Accountability Act(HIPAA)など、一般的なコンプライアンス要件への遵守が容易になります。これらの規制では、詐称行為、IDの盗用、財政面での不正行為および財政面での不利益をもたらす可能性のある機密情報のアクセス、開示または変更に対する強力な内部制御が必要です。

Oracle Database Vaultでは、Oracle Databaseへの管理者のアクセスを制限するために次の方法が提供されています。

  • 保護対象となるデータベース・スキーマ、オブジェクトおよびロールのグループ分け。このグループ分けはレルムと呼ばれ、レルムのコンポーネントはすべて保護されます。Database Vault管理者は、レルムを作成した後に、そのレルムへのアクセスを管理するユーザーを指定します。レルムは、たとえば、スキーマ内の1つの表を対象にしたり、スキーマ全体を対象にして作成できます。

  • PL/SQL式を作成し、データベース制限をカスタマイズします。式はルール内に作成し、1つのカテゴリにルールが複数ある場合は、ルールをルール・セットにグループ分けします。ルール・セット内のルールを実施するには、そのルールをレルムまたはコマンド・ルールに関連付けます。たとえば、メンテナンス期間中(午後10時から12時など)にデータベースのアクセスを阻止したい場合は、その時間帯のみアクセスを制限するルールを作成します。

  • ユーザーが使用できる、または使用できない特定のPL/SQL文の指定。これはコマンド・ルールと呼ばれます。コマンド・ルールには、保護する対象のコマンドと、そのコマンドの実行を許可するかどうかを決定するルール・セットが含まれます。コマンド・ルールを作成すると、1つ以上のデータベース・オブジェクトに影響を与えるSELECTALTER SYSTEM、データ定義言語(DDL)およびデータ操作言語(DML)文を保護できます。コマンド・ルールは、ルール・セットを関連付けてさらにカスタマイズすることができます。

  • セッション・ユーザーやIPアドレスなど、Oracle Database Vaultが認識および保護できるデータを記録するための属性の定義。これらの属性はファクタと呼ばれます。ファクタは、データベースに接続するデータベース・アカウントの認可や、データの可視性および管理性を制限するフィルタ・ロジックの作成などのアクティビティに使用できます。ルール・セットをファクタに関連付けて、ファクタをさらにカスタマイズすることができます。

  • Oracle Database Vaultルールのみによって有効になるセキュア・アプリケーション・ロールの設計。Oracle Database Vaultでセキュア・アプリケーション・ロールを作成した後、これにルール・セットを関連付けます。ルール・セットによって、セキュア・アプリケーション・ロールがいつ、どのように有効または無効になるかが定義されます。

これらのコンポーネントを作成するには、Oracle Database Vault Administratorを使用するか、またはそのPL/SQLパッケージを使用します。

チュートリアル: OEスキーマへの管理者のアクセスの制御

OEスキーマには、顧客に許可しているクレジットの上限などの機密情報が格納されている様々な表があります。Order Entry表には、一般的に、クレジット・カード番号、社会保険番号などの機密情報が格納されています。Payment Card Industry(PCI)Data Security Standards(DSS)によれば、このような種類の情報は、このような情報へのアクセスが仕事上必要な人にのみ制限される必要があります。

このチュートリアルでは、OEスキーマを対象としたレルムを作成し、管理者のアクセスから保護します。ただし、ユーザーSCOTTOE.CUSTOMERS表にアクセスする必要があるため、このユーザーがこのデータへのアクセスを続行できるようにする必要があります。

このチュートリアルでは、次の手順を実行します。

手順1: Oracle Database Vaultを有効にする

Oracle Database Vaultは、Oracle Databaseのデフォルトのインストールを実行したときにインストールされます。Oracle Database VaultをインストールしてからOracle Databaseに登録し、Oracle Database Vaultアカウント・マネージャのユーザー・アカウントを有効にする必要があります。

Oracle Database Vaultが有効かどうかの確認

Oracle Database Vaultが有効かどうかは、SQL*Plusにログインし、次のSELECT文を入力して確認できます。PARAMETER列では大/小文字が区別されるため、ここに示されているとおりに入力してください。

SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';

TRUEが戻された場合、Oracle Database Vaultは登録されています。「Database Vaultアカウント・マネージャのアカウントに対するデータベース・アクセス制御の有効化」に進んでください。そうでない場合は、次の項で説明する登録プロセスを実行してください。

Oracle DatabaseへのOracle Database Vaultの登録

登録プロセスでは、Oracle Database Vaultが有効化され、管理アカウントを作成するように求められます。

Oracle Database Vaultを登録するには、次のようにします。 

  1. データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。

    • UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを停止します。次に、コマンドラインからDatabase Controlコンソール・プロセスとリスナーを停止します。

      次に例を示します。

      sqlplus sys as sysoper
      Enter password: password
      
      SQL> SHUTDOWN IMMEDIATE
      SQL> EXIT
      
      $ emctl stop dbconsole
      $ lsnrctl stop [listener_name]
      

      Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを停止します。

      $ srvctl stop database -d db_name
      
    • Windows: 「コントロール パネル」の「サービス」ツールから、データベース、Database Controlコンソール・プロセスおよびリスナーを停止します。Oracle Databaseサービスの名前は、Oracleで始まります。

  2. Oracle Database Vaultを次の手順で有効にします。

    • UNIX: 次のコマンドを実行します。このmakeコマンドによって、Oracle Database Vault(dv_on)とOracle Label Security(lbac_on)の両方が有効になります。Database Vaultを使用するには、Oracle Label Securityを有効にする必要があります。

      $ cd $ORACLE_HOME/rdbms/lib
      $ make -f ins_rdbms.mk dv_on lbac_on ioracle
      
    • Windows: ORACLE_BASE\ORACLE_HOME\binディレクトリで、oradvll.dll.dblファイルの名前をoradvll.dllに変更します。Oracle Label Securityが有効になっていない場合は、oralbacll.dll.dblファイルの名前をoralbacll.dllに変更します。Database Vaultを使用するには、Oracle Label Securityを有効にする必要があります。

  3. データベースとリスナーを再起動します。(まだDatabase Controlコンソール・プロセスは再起動しないでください。)

    • UNIX: SYSOPER権限を持つユーザーSYSとしてSQL*Plusにログインし、データベースを再起動します。次に、コマンドラインからリスナーを再起動します。

      次に例を示します。

      sqlplus sys as sysoper
      Enter password: password
      
      SQL> STARTUP
      SQL> EXIT
      
      $ lsnrctl start [listener_name]
      

      Oracle RACインストールの場合は、次のようにして、各データベース・インスタンスを再起動します。

      $ srvctl start database -d db_name
      
    • Windows: 「コントロール パネル」の「サービス」ツールから、データベースおよびリスナーを再起動します。Oracle Databaseサービスの名前は、Oracleで始まります。

  4. Database Configuration Assistantを起動します。

    • UNIX: 端末ウィンドウで次のコマンドを入力します。

      dbca
      

      一般的に、dbca$ORACLE_HOME/binディレクトリにあります。

    • Windows: 「スタート」メニューから「すべてのプログラム」をクリックします。次に「Oracle - ORACLE_HOME」「Configuration and Migration Tools」「Database Configuration Assistant」の順にクリックします。

      または、次のコマンド・プロンプトでDatabase Configuration Assistantを起動できます。

      dbca
      

      UNIXでは一般的に、dbcaORACLE_BASE\ORACLE_HOME\binディレクトリにあります。

  5. 「ようこそ」ページで「次へ」をクリックします。

    「操作」ページが表示されます。

  6. 「データベース・オプションの構成」を選択して、「次へ」をクリックします。

    「データベース」ページが表示されます。

  7. リストから、Oracle Databaseをインストールしたデータベースを選択し、DBAロールが付与されているユーザーの名前およびパスワードを入力します。「次へ」をクリックします。

    「データベース・コンテンツ」ページが表示されます。

  8. 次のいずれかの操作を実行します。

    • Oracle Label Securityがすでに有効な場合: 「Oracle Database Vault」オプションを選択してから、「次へ」をクリックします。

    • Oracle Label Securityが有効でない場合: 「Oracle Label Security」オプションを選択して、「Oracle Database Vault」オプションを選択できるようにします。「Oracle Database Vault」オプションも選択してから、「次へ」をクリックします。

    「Oracle Database Vault資格証明」ページが表示されます。

  9. Database Vault所有者アカウント(DBVOWNERなど)の名前とパスワード、およびDatabase Vaultアカウント・マネージャ(DBVACCTMGRなど)の名前とパスワードを指定します。

    「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。Oracle Database Vaultには追加的なパスワード要件があり、誤ったパスワードを作成しようとすると、これらの要件が表示されます。

  10. 「次へ」をクリックします。

    「接続モード」ページが表示されます。

  11. このデータベースの作成時の選択内容に応じて「専用サーバー・モード」「共有サーバー・モード」のどちらかを選択し、「終了」をクリックし、確認プロンプトで「OK」をクリックします。

    Oracle Database Vaultが登録され、データベース・インスタンスが再起動されます。

  12. Database Configuration Assistantを終了します。

  13. Database Controlコンソール・プロセスを再起動します。

    • UNIX: 次のコマンドを実行します。

      $ emctl start dbconsole
      
    • Windows: 「コントロール パネル」の「サービス」ツールから、Database Controlコンソール・プロセス(たとえば、データベースの名前がorclの場合はOracleDBConsoleorcl)を再起動します。

Database Vaultアカウント・マネージャのアカウントに対するデータベース・アクセス制御の有効化

Database Vaultアカウント・マネージャのアカウントには、Database Controlを使用する権限も必要です。

必要な権限をDatabase Vaultアカウント・マネージャのアカウントに付与するには、次のようにします。 

  1. SYSユーザーとしてDatabase Controlにログインします。

    「ログイン」ページでSYSSYSに割り当てられたパスワードを入力します。「接続モード」SYSDBAに設定します。「ログイン」を選択してログインします。Database Controlの起動方法については、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」で、「ユーザー」を選択します。

    「ユーザー」ページが表示されます。

  4. Database Vaultアカウント・マネージャのアカウント(DBVACCTMGRなど)を選択します。

    DBVACCTMGRを簡単に検索するには、「オブジェクト名」フィールドにDBVと入力し、「実行」をクリックします。

  5. DBVACCTMGRユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。

    「ユーザーの編集」ページが表示されます。

  6. 「ロール」をクリックして「ユーザーの編集: DBVACCTMGR」ページを表示します。

  7. 「リストを編集」をクリックします。

    「ロールの変更」ページが表示されます。

  8. 「使用可能なロール」リストからSELECT_CATALOG_ROLEロールを選択し、「移動」をクリックして「選択したロール」リストに移動します。次に「OK」をクリックして、「ユーザーの編集」ページに戻ります。

  9. 「システム権限」をクリックします。

  10. 「リストを編集」をクリックします。

    「システム権限の変更」ページが表示されます。

  11. 「使用可能なシステム権限」リストからSELECT ANY DICTIONARYを選択し、「移動」をクリックして「選択したシステム権限」リストに移動します。次に「OK」をクリックします。

  12. 「適用」をクリックします。

手順2: OE.CUSTOMERS表に対するSELECT権限をユーザーSCOTTに付与する

後でチュートリアルをテストするときに、ユーザーSCOTTOE.CUSTOMERS表からの選択を行う必要があります。まず、SCOTTアカウントが有効であることを確認する必要があります。

ユーザーSCOTTを有効にするには、次のようにします。 

  1. 「Database Control」で、「標準」権限を持つ、Oracle Database Vaultアカウント・マネージャのアカウントとして接続します。

    Oracle Database Vaultをインストールした後は、管理アカウント(SYSSYSTEMなど)を使用してユーザー・アカウントを作成または有効化することはできません。これは、Oracle Database Vaultがデフォルトの状態のままでも、管理アカウントに対して職務分離の方針が適用されるためです。この時点から、ユーザー・アカウントを管理するには、Oracle Database Vaultアカウント・マネージャのアカウントを使用する必要があります。

    だたし、管理ユーザーには、その業務に必要な権限は付与されたままです。たとえば、システム権限と多数のPL/SQLパッケージを所有するユーザーSYSは、引き続きこれらの権限を他のユーザーに付与できます。ただし、ユーザーSYSが、ユーザー・アカウントを作成、変更、削除することはできなくなっています。

  2. 「サーバー」をクリックして、「サーバー」サブページを表示します。

  3. 「セキュリティ」で、「ユーザー」を選択します。

    「ユーザー」ページが表示されます。

  4. SCOTTユーザーを選択し、「ユーザーの表示」ページで「編集」をクリックします。

    「ユーザーの編集」ページが表示されます。

  5. 次の設定を入力します。

    • 「パスワードの入力」および「パスワードの確認」: SCOTTアカウントのパスワードのステータスが期限切れである場合は、新しいパスワードを入力します。「パスワードの作成要件」に示されているパスワードのガイドラインに従って、任意のセキュアなパスワードを入力します。

    • ステータス: 「ロック解除」をクリックします。

  6. 「適用」をクリックします。

  7. 「ログアウト」をクリックします。

ユーザーSCOTTにOE.CUSTOMERS表に対するSELECT権限を付与するには、次のようにします。 

  1. OEユーザーとしてSQL*Plusにログインします。

    sqlplus oe
    Enter password: password
    Connected. 
    
  2. ユーザーSCOTTOE.CUSTOMERS表に対するSELECT権限を付与します。

    SQL> GRANT SELECT ON CUSTOMERS TO SCOTT;
    

手順3: ユーザーSYSおよびSCOTTとしてOE.CUSTOMERS表から選択を行う

この段階では、ユーザーSYSおよびSCOTTの両者が、OE.CUSTOMERS表からの選択を行うことができます。これは、SYSは管理権限を所有し、SCOTTはユーザーOEによって付与された明示的なSELECT権限を所有しているためです。

ユーザーSYSおよびSCOTTとしてOE.CUSTOMERSから選択を行うには、次のようにします。 

  1. SQL*Plusで、SYSDBA権限を使用してユーザーSYSとして接続します。

    sqlplus sys as sysdba
    Enter password: password
    
  2. 次のように、OE.CUSTOMERS表から選択を行います。

    SELECT COUNT(*) FROM OE.CUSTOMERS;
    

    次の出力が表示されます。

    COUNT(*)
    --------
         319
    
  3. ユーザーSCOTTとして接続し、同じSELECT文を実行します。

    CONNECT SCOTT
    Enter password: password
    Connected.
    
    SELECT COUNT(*) FROM OE.CUSTOMERS;
    

    次の出力が表示されます。

    COUNT(*)
    --------
         319
    

手順4: OE.CUSTOMERS表を保護するためにレルムを作成する

OE.CUSTOMER表への管理アクセスを制限するには、OEスキーマに対するレルムを作成します。

OEスキーマを対象としたレルムを作成するには、次のようにします。 

  1. Oracle Database Vault Administratorを起動します。

    ブラウザに、次のURLを入力します。

    https://host_name:port/dva

    host_nameはOracle Database Vaultをインストールしたサーバーの名前に、portはOracle Enterprise ManagerコンソールのHTTPSポート番号に置き換えます。ほとんどの場合、サーバーの名前とポート番号は、Database Controlで使用しているものと同じです。

    Database Vault Administratorを起動できない場合は、これを手動でデプロイする必要があります。詳細は、『Oracle Database Vault管理者ガイド』を参照してください。

  2. 「データベースにログイン」ページで、次の情報を入力します。

    • ユーザー名: DV_OWNERアカウントまたはDV_ADMINアカウントの名前(DBVOWNERなど)を入力します。

    • パスワード: 入力した名前のユーザーのパスワードを入力します。

    • ホスト: Oracle Database Vaultをインストールしたコンピュータのホスト名またはIPアドレスを入力します(myserver.us.example.comなど)。

    • ポート: データベースのポート番号を入力します(1521など)。

    • SID/サービス: データベースのSID(orclなど)またはサービス(myserver.us.example.comなど)を入力します。

    データベース・インスタンスの「管理」ページが表示されます。

  3. 「Database Vault機能管理」で、「レルム」を選択します。

    「レルム」ページが表示されます。

  4. 「作成」をクリックします。

    「レルムの作成」ページが表示されます。

  5. 次の情報を入力します。

    • 名前: OE Protections

    • 説明: Realm to protect the OE schema

    • ステータス: 「有効」をクリックします。

    • 監査オプション: 「失敗時に監査」を選択します。

  6. 「OK」をクリックします。

    「レルム」ページが表示され、レルムとしてOEスキーマが示されます。ただし、保護されたオブジェクトまたは認可されたユーザーはまだ存在しません。

    DVAの「レルム」ページ
    dv_realm.gifの説明

  7. OE Protectionsレルムを選択し、「編集」をクリックします。

    「レルムの編集」ページが表示されます。

  8. 「レルム・セキュア・オブジェクト」で、「作成」をクリックします。

    「レルム・セキュア・オブジェクトの作成」ページが表示されます。

  9. 「オブジェクト所有者」リストから「OE」を選択します。

  10. 「オブジェクト・タイプ」リストから「TABLE」を選択します。

  11. 「オブジェクト名」フィールドに、OEスキーマ内のすべての表を指定するために%を入力し、「OK」をクリックします。

    「レルムの編集」ページが表示されます。

  12. 「レルム認可」で、「作成」をクリックします。

    「レルム認可の作成」ページが表示されます。

  13. 「権限受領者」リストから「OE [USER]」を選択し、「認可タイプ」「所有者」に設定します。その後で、「認可ルール・セット」<未選択>に設定します。

    これによって、OEスキーマ内のオブジェクトへのアクセスを管理するOEユーザーが認可されます。所有者として、OEユーザーは、レルムで保護されたデータベースのロールの付与または取消し、OE Protectionsレルムで保護されたオブジェクトのアクセス、操作および作成を実行できます。

    「認可ルール・セット」リストを使用すると、レルムが有効になる時間など、アクセスをさらに制御するルールを選択できます。

  14. 「OK」をクリックして「レルムの編集」ページに戻り、「OK」を再びクリックして「レルム」ページに戻ります。

  15. Oracle Database Vault Administratorは終了しないでください。

手順5: OE Protectionsレルムをテストする

これでOEスキーマを保護するレルムが作成され、テストの準備ができました。Oracle Database Vaultで定義した保護は即時に有効になるため、データベース・セッションを再び開始する必要はありません。

OE Protectionsレルムをテストするには、次のようにします。 

  1. SYSDBA権限を使用してユーザーSYSとしてSQL*Plusに接続します。

    CONNECT SYS/AS SYSDBA
    Enter password: password
    Connected.
    
  2. OE.CUSTOMERS表からの選択を試行します。

    SELECT COUNT(*) FROM OE.CUSTOMERS;
    

    次の出力が表示されます。

    ERROR at line 1:
    ORA-01031: insufficient privileges
    

    OE Protectionsレルムによって、管理ユーザーのOE.CUSTOMERS表へのアクセスが制限されています。スキーマ全体を保護するようにOE Protectionsレルムを定義したため、管理ユーザーはOE内の他の表にもアクセスできません。

  3. ユーザーSCOTTとして接続します。

    CONNECT SCOTT
    Enter password: password
    Connected.
    
  4. OE.CUSTOMERS表からの選択を試行します。

    SELECT COUNT(*) FROM OE.CUSTOMERS;
    

    次の出力が表示されます。

      COUNT(*)
    ----------
           319
    

    ユーザーOEは明示的にOE.CUSTOMERS表でSELECT権限をこのユーザーに付与したため、OE保護レルムはユーザーSCOTTには適用されません。Oracle Database Vaultでは必要な保護が設定されますが、定義済の明示的な権限は上書きされません。SCOTTはまだこのテーブルへの問合せができます。

手順6: このチュートリアルで使用したコンポーネントを削除する(オプション)

このチュートリアルの終了後、使用したデータ構造が不要な場合は削除できます。

OE.CUSTOMERSに対するSELECT権限をユーザーSCOTTから取り消すには、次のようにします。 

  1. SQL*PlusでユーザーOEとして接続します。

    CONNECT OE
    Enter password: password
    Connected. 
    
  2. ユーザーSCOTTSELECT権限を取り消します。

    REVOKE SELECT ON CUSTOMERS FROM SCOTT;
    

OE Protectionsレルムを削除するには、次のようにします。 

  1. Oracle Database Vault Administratorからログアウトした場合は、Oracle Database VaultをインストールしたときのDatabase Vault所有者アカウント(DBVOWNERなど)で再びログインします。

    Database Vault Administratorの起動方法については、「手順4: OE.CUSTOMERS表を保護するためにレルムを作成する」の手順1を参照してください。

    「管理」ページが表示されます。

  2. 「Database Vault機能管理」で、「レルム」をクリックします。

    「レルム」ページが表示されます。

  3. レルムのリストからOE Protectionsを選択し、「削除」をクリックします。その後、「確認」ページで「はい」をクリックします。

  4. Oracle Database Vault Administratorからログアウトします。

Oracle Database Vaultを無効にするには、次のようにします。 

  • Oracle Database Vaultの無効化については、『Oracle Database Vault管理者ガイド』を参照してください。