プライマリ・コンテンツに移動
Oracle® Database 2日でセキュリティ・ガイド
12c リリース2 (12.2)
E81327-04
目次へ移動
目次
索引へ移動
索引

前
次

7 Oracle Data Redactionを使用した機密データへのアクセスの制限

Oracle Data Redactionは、リアルタイムのデータ・リダクションにより、機密データへのアクセスを制限します。

Oracle Data Redactionについて

Oracle Data Redactionにより、列のデータをリダクション(マスク)できます。

データ・リダクションでは、次のいずれかの方法を使用できます。

  • 完全リダクション。列データの内容をすべてリダクションします。問合せを行ったユーザーに返される、リダクションされた値は、列のデータ型によって異なります。たとえば、NUMBERデータ型の列はゼロ(0)でリダクションされ、文字データ型は空白でリダクションされます。

  • 部分リダクション。列データの一部をリダクションします。たとえば、クレジット・カードの番号の大半(最後の4桁以外)をアスタリスク(*)でリダクションできます。

  • 正規表現。完全または一部のいずれのリダクションでも正規表現を使用できます。これにより、データの検索パターンに基づいてデータをリダクションできます。たとえば、正規表現を使用して、データ内の特定の電話番号または電子メール・アドレスをリダクションできます。

  • NULL値を使用したリダクション。この機能により、DBMS_REDACT.NULLIFYファンクションを使用して、表またはビュー列内のすべての機密データを非表示にし、null値で置換できます。DBMS_REDACT.ADD_POLICYまたはDBMS_REDACT.ALTER_POLICYプロシージャのfunction_typeパラメータを使用して、このファンクションを設定できます。

  • ランダム・リダクション。問合せを行ったユーザーに表示される、リダクションされたデータは、値が表示のたびにランダムに生成されて表示されます。

  • リダクションなし。このオプションでは、リダクション・ポリシーが定義された表に対する問合せの結果に影響を与えずに、ポリシーの内部動作をテストできます。このオプションを使用して、リダクション・ポリシー定義を本番環境に適用する前にテストできます。

  • 名前付きデータ・リダクション式の集中管理。この機能により、複数の表およびビューの列で使用できる名前付きポリシー式のライブラリを作成できます。名前付きポリシー式があれば、すべてのポリシー式をデータベース内で集中管理できます。

データ・リダクションでは、実行時、つまり、ユーザーがデータを表示する際にリダクションが行われます。この機能は、データが常に変化する動的本番システムに非常に適しています。データはリダクションされますが、Oracle Databaseですべてのデータを通常どおり処理し、バックエンドの参照整合性制約を保持できます。データ・リダクションは、クレジットカード業界のセキュリティ基準(PCI DSS)やサーベンス・オクスリー法などの業界の規則の順守に役立ちます。

関連項目:

Oracle Data Redactionの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

チュートリアル: 選択したユーザーのグループに対するデータのリダクション

このチュートリアルでは、ログインしているユーザーに基づいてデータをリダクションするOracle Data Redactionポリシーを作成します。

選択したユーザー・グループに対するデータ・リダクションについて

このチュートリアルのシナリオは営業所に関するもので、営業部長は表のすべてのデータを表示する必要があります。

営業部長であるユーザーezlotkeyには、様々な販売機会を記述するsales_opps表へのアクセス権が必要です。ただし、この営業部長の下で働く営業担当者(ユーザーahuttonおよびeabel)による、顧客名と手続き完了日を表すsales_opps表の列へのアクセスは制限する必要があります。

この問題を解決するには、次の処理を行ってこれらの要件を満たすOracle Data Redactionポリシーを作成します。

  • ポリシーによって2つの列のデータをリダクションします。それぞれ異なるリダクション・スタイルを使用します。

  • ポリシーの効果は問合せ結果の表示で、問合せを行っているユーザーに対して有効になっているロールに基づいて実際のデータまたはリダクションされたデータが表示されます。

このチュートリアルでは、データベース・ユーザー・アカウントを使用してデータベースと直接対話します。これはわかりやすくするためです。Oracle Data Redactionには使用シナリオが2通り想定されており、データベース・アプリケーションのリダクションと直接データベース・アクセスのリダクションです。Oracle Data Redaction自体が、パッケージ化されたアプリケーションおよびカスタム・アプリケーションからの機密データのリダクションに関する優れたソリューションです。チュートリアルを完了すると、実際のアプリケーション・ユーザーに関するシナリオに対して(データベース・ユーザー・アカウントを使用して)学んだことを応用するために必要が知識が得られます。直接データベース・アクセスがターゲット・シナリオの場合、Oracle Data Redactionを、権限付きデータベース・ユーザーに対するセキュリティを提供する予防的統制および発見的統制(Oracle Database Vault、Oracle Label Security、Oracle Audit Vault、Oracle Database Firewallなど)と組み合せる必要があります。

手順1: ユーザー・アカウントの作成および必要な権限の付与

まず、必要なユーザーとロールを作成し、権限を付与する必要があります。

ユーザーsec_adminにはDBMS_REDACT PL/SQLパッケージに対するEXECUTE権限が必要です。これは、Oracle Data Redactionポリシーを作成するために必要です。

このチュートリアルで使用するユーザー・アカウントを作成するには、次のようにします。

  1. Enterprise Managerで、ターゲット・データベースのデータベース・ホームページに、SYSDBA管理権限を持つユーザーSYSとしてアクセスします。

    詳細は、Oracle Database 2日でデータベース管理者を参照してください。

  2. 「セキュリティ」メニューから「ロール」を選択します。

  3. ロールページで「作成」を選択します。

  4. ロールの作成ページの「名前」フィールドにSUPERVISORと入力し、「OK」をクリックします。

  5. 「スキーマ」メニューから、「ユーザー」を選択します。

  6. ユーザー・ページで、「作成」をクリックします。

  7. ユーザーの作成ページで、次の情報を入力します。

    • 名前: EZLOTKEY (Eleni Zlotkeyのユーザー・アカウントの作成)

    • プロファイル: DEFAULT

    • 認証: Password

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

    • デフォルト表領域: USERS

    • 一時表領域: TEMP

    • ステータス: Unlocked

  8. 「システム権限」タブを選択します。

  9. 「リストの編集」ボタンを選択します。

  10. 「システム権限の変更」リストで次の権限を選択し、「選択したシステム権限」リストに移動します。

    • CREATE SESSION

    • CREATE TABLE

    • UNLIMITED TABLESPACE

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

  12. ユーザーの作成ページで「ロール」タブを選択し、「リストの編集」ボタンを選択します。

  13. ロールの変更ページで、「使用可能なロール」リストのSUPERVISORロールをダブルクリックし、「選択したロール」リストに移動します。

  14. 「OK」をクリックし、「OK」を再度クリックしてユーザー・ページに戻ります。

  15. 「作成」ボタンを選択します。

  16. ユーザーの作成ページで、次の情報を入力します。

    • 名前: EABEL (Ellen Abelのユーザー・アカウントの作成)

    • プロファイル: DEFAULT

    • 認証: Password

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

    • デフォルト表領域: USERS

    • 一時表領域: TEMP

    • ステータス: Unlocked

  17. 「システム権限」タブを選択します。

  18. 「リストの編集」ボタンを選択します。

  19. システム権限の変更」リストでCREATE SESSIONシステム権限をダブルクリックして「選択したシステム権限」に移動します。

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

  21. ユーザー・ページでEABELユーザーを選択します。

  22. 「アクション」リストから「類似作成」ボタンを選択して「実行」をクリックします。

  23. ユーザーの作成ページで、次の情報を入力します。

    • 名前: AHUTTONと入力します(ユーザーAlyssa Hutton)。

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

    ユーザーezlotkeyにはロールsupervisorが付与されていますが、ユーザーeabelおよびahuttonにはロールが付与されていないことに注意してください。

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

  25. ユーザー・ページでSEC_ADMINユーザーを選択し、「編集」ボタンをクリックします。

    ユーザーSEC_ADMINが存在しない場合、次の文を入力してSQL*Plusでこのユーザーを簡単に作成できます。

    GRANT CREATE PROCEDURE, CREATE ROLE, CREATE SESSION, INHERIT ANY PRIVILEGES, SELECT ANY DICTIONARY TO sec_admin IDENTIFIED BY password;
    

    このアカウントの作成については、手順2: セキュリティ管理者アカウントを作成するも参照してください。

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

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

  28. パッケージ・オブジェクトの選択フィールドにSYS.DBMS_REDACTと入力し、「使用可能な権限」リストのEXECUTE権限を「選択した権限」リストに移動します。

  29. 「OK」をクリックし、次に「適用」をクリックします。

手順2: SALES_OPPS販売機会表の作成とデータの移入

sales_opps表には、販売機会である中小企業の情報が含まれます。

この表には、後でOracle Data Redactionポリシーを作成する必要のある列が2つ含まれます。

sales_opps販売機会表を作成し、データを移入するには、次のようにします。

  1. データベース・インスタンスにユーザーezlotkeyとしてログインします。

    sqlplus ezlotkey
    Enter password: password
    
  2. sales_opps表を作成します。

    CREATE TABLE sales_opps (
     account varchar2(30), 
     region varchar2(20), 
     product varchar2(20), 
     sales_rep varchar2(15), 
     close_date date, 
     price number, 
     quantity number);
    
  3. sales_opps表にデータを移入します。

    INSERT INTO sales_opps VALUES ('Rising Dough Bakery', 'north-east', 'AA1 AccountPro', 'ahutton', '07-JUL-12', 400.00, 4);
    INSERT INTO sales_opps VALUES ('Shear Madness Hair Salon', 'south-west', 'AA1 AccountPro', 'eabel', '20-APR-12', 400.00, 1);
    INSERT INTO sales_opps VALUES ('Doublecheck Accounting', 'north-east', 'AA1 AccountPro', 'ahutton', '14-MAR-12', 400.00, 12);
    INSERT INTO sales_opps VALUES ('State of Art Framing', 'south-west', 'AA1 TaxPro', 'eabel', '21-MAY-12', 300.00, 2);
    INSERT INTO sales_opps VALUES ('Shady Trees Arborists', 'north-east', 'AA1 AccountPro', 'ahutton', '17-JUN-12', 400.00, 16);
    
  4. リダクションの対象のデータを確認するには、sales_opps表のaccount列とclose_date列を問い合せます。

    SELECT account, close_date, product, quantity FROM sales_opps;
    
    ACCOUNT                        CLOSE_DAT PRODUCT                QUANTITY
    ------------------------------ --------- -------------------- ----------
    Rising Dough Bakery            07-JUL-12 AA1 AccountPro                4
    Shear Madness Hair Salon       20-APR-12 AA1 AccountPro                1
    Doublecheck Accounting         14-MAR-12 AA1 AccountPro               12
    State of Art Framing           21-MAY-12 AA1 TaxPro                    2
    Shady Trees Arborists          17-JUN-12 AA1 AccountPro               16

手順3: SALES_OPPS_POL Oracle Data Redactionポリシーの作成

ユーザーsec_adminとして、sales_opps_pol Oracle Data Redactionポリシーを作成します。

sales_opps_polデータ・リダクション・ポリシーを作成するには、次のようにします。

  1. Enterprise Managerからログアウトし、ユーザーsec_adminとしてログインしなおします。

    詳細は、Oracle Database 2日でデータベース管理者を参照してください。

  2. 「セキュリティ」メニューから、「Oracle Data Redaction」を選択します。

  3. 「データ・リダクション」ページで「ポリシー」タブを選択します。

  4. 「作成」ボタンを選択します。

  5. データ・リダクション・ポリシーの作成ページで、ポリシーの基本の次の情報を入力します。

    • スキーマ: EZLOTKEYと入力します(大文字)。

    • 表/ビュー: SALES_OPPSと入力します(大文字)。

    • ポリシー名: SALES_OPPS_POLと入力します。

    • ポリシー式: 次の式を入力します。

      SYS_CONTEXT('SYS_SESSION_ROLES', 'SUPERVISOR') = 'FALSE'
      

      式は、supervisorロールが有効になっていないユーザーに対してaccount列のデータをリダクションするという意味です。つまり、スーパーバイザezlotkeyのみがaccount列のデータを表示できます。

  6. データ・リダクション・ページで、次のようにしてsales_opps_policyポリシーを列に適用します。

    1. 「追加」ボタンを選択します。

    2. 追加ウィンドウで、「列」リストから「ACCOUNT」を選択します。

      「列のデータ型」フィールドに、ACCOUNTのデータ型であるVARCHAR2が表示されます。

    3. リダクション・テンプレート・リストから「カスタム」(デフォルトの選択肢)を選択します。

    4. リダクション機能リストから「FULL」を選択します。

      FULLは、account列のすべての文字がリダクションされるということです。account列のデータ型はVARCHAR2のため、データは空白で表示されます。

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

  7. 次のようにして、sales_opps_polポリシーを2つ目の列に適用します。

    1. 「追加」ボタンを選択します。

    2. 追加ウィンドウで、「列」リストから「CLOSE_DATE」を選択します。

      「列のデータ型」フィールドで、CLOSE_DATEのデータ型はDATEと判別されます。

    3. リダクション機能リストから「PARTIAL」を選択します。

      即座に追加ウィンドウが拡張され、機能の属性領域が表示されます。

    4. 「日付リダクション形式」フィールドに次の属性を入力します。

      m06d7YHMS
      

      この設定では、各日付の月と日をリダクションし、07-JUNE-12と表示されるよう設定します。

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

      次のように「データ・リダクション・ポリシーの作成」ページが表示されます。

  8. データ・リダクション・ポリシーの作成ページで、「OK」をクリックします。

    ポリシーが、データ・リダクション・ポリシー・リストに表示されます。

    Enterprise Managerを終了しないでください。

手順4: SALES_OPPS_POL Oracle Data Redactionポリシーのテスト

次に、ポリシーをテストする準備ができます。

sales_opps_pol Oracle Data Redactionポリシーをテストするには、以前に作成したユーザーとしてログインし、sales_opps表のリダクションされた列を問い合せます。

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

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

    connect ezlotkey
    Enter password: password
    
  2. 営業担当者に、sales_opps表に対するSELECT権限を付与します。

    GRANT SELECT ON sales_opps TO eabel;
    GRANT SELECT ON sales_opps TO ahutton;
    
  3. ユーザーeabelとして接続します。

    connect eabel
    Enter password: password
    
  4. 次のように、sales_opps表に問い合せます。

    SELECT account, close_date, product, quantity FROM ezlotkey.sales_opps;
    

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

    ACCOUNT                        CLOSE_DAT PRODUCT                QUANTITY
    ------------------------------ --------- -------------------- ----------
                                   07-JUN-12 AA1 AccountPro                4
                                   07-JUN-12 AA1 AccountPro                1
                                   07-JUN-12 AA1 AccountPro               12
                                   07-JUN-12 AA1 TaxPro                    2
                                   07-JUN-12 AA1 AccountPro               16
    

    account列は、各行に空白を表示するようリダクションされているため、データは表示されません。close_date列に日付は表示されますが、すべて部分的な日付値です。データ・リダクション・ポリシーが適用されていないため、product列とquantity列には予期されたデータが表示されます。

  5. ユーザーahuttonとして接続し、同じ問合せを実行します。

    connect ahutton
    Enter password: password
    
    SELECT account, close_date, product, quantity FROM ezlotkey.sales_opps;
    
    ACCOUNT                        CLOSE_DAT PRODUCT                QUANTITY
    ------------------------------ --------- -------------------- ----------
                                   07-JUN-12 AA1 AccountPro                4
                                   07-JUN-12 AA1 AccountPro                1
                                   07-JUN-12 AA1 AccountPro               12
                                   07-JUN-12 AA1 TaxPro                    2
                                   07-JUN-12 AA1 AccountPro               16
    

    ユーザーahuttonに対しても、データはリダクションされます。

  6. ユーザーezlotkeyとして接続し、同じ問合せを実行します。

    connect ezlotkey
    Enter password: password
    
    SELECT account, close_date, product, quantity FROM sales_opps;
    
    ACCOUNT                        CLOSE_DAT PRODUCT                QUANTITY
    ------------------------------ --------- -------------------- ----------
    Rising Dough Bakery            07-JUL-12 AA1 AccountPro                4
    Shear Madness Hair Salon       20-APR-12 AA1 AccountPro                1
    Doublecheck Accounting         14-MAR-12 AA1 AccountPro               12
    State of Art Framing           21-MAY-12 AA1 TaxPro                    2
    Shady Trees Arborists          17-JUN-12 AA1 AccountPro               16
    

    sales_opps_polデータ・リダクション・ポリシーでは、ユーザーezlotkeysupervisorロールが有効なため、実際のデータが表示されます。ただし、このロールがezlotkeyに対して無効の場合、sales_opps表を作成し、所有していても、この表に問い合せると、account列とclose_date列はリダクションされます。

  7. SQL*Plusからログアウトします。

    EXIT

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

コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。

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

  1. Enterprise Managerで、sec_adminユーザーとしてログインしていることを確認します。

  2. データ・リダクション・ポリシー・ページでSALES_OPPS_POLポリシーを選択します。

  3. 「削除」ボタンをクリックします。

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

  5. Enterprise Managerからログアウトし、SYSDBA管理権限を使用してユーザーSYSとして再度ログインします。

  6. データベース・ホームページから、「スキーマ」「ユーザー」の順に選択します。

  7. ユーザー「AHUTTON」を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。

  8. ユーザー「EABEL」を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。

  9. ユーザー「EZLOTKEY」を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。

  10. 「セキュリティ」メニューから「ロール」を選択します。

  11. ロールSUPERVISORを選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。

  12. ユーザー・ページで「SEC_ADMIN」ユーザーを選択し、「編集」をクリックします。

  13. ユーザーの編集: SEC_ADMINページで「オブジェクト権限」タブを選択します。

  14. DBMS_REDACTパッケージのEXECUTE権限を選択し、「削除」をクリックします。

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

  16. 「ログアウト」ボタンをクリックし、Enterprise Managerを終了します。