Oracle Data Redactionは、リアルタイムのデータ・リダクションにより、機密データへのアクセスを制限します。
トピック:
Oracle Data Redactionにより、列のデータをリダクション(マスク)できます。
データ・リダクションでは、次のいずれかの方法を使用できます。
完全リダクション。列データの内容をすべてリダクションします。問合せを行ったユーザーに返される、リダクションされた値は、列のデータ型によって異なります。たとえば、NUMBER
データ型の列はゼロ(0
)でリダクションされ、文字データ型は空白でリダクションされます。
部分リダクション。列データの一部をリダクションします。たとえば、クレジット・カードの番号の大半(最後の4桁以外)をアスタリスク(*)でリダクションできます。
正規表現。完全または一部のいずれのリダクションでも正規表現を使用できます。これにより、データの検索パターンに基づいてデータをリダクションできます。たとえば、正規表現を使用して、データ内の特定の電話番号または電子メール・アドレスをリダクションできます。
ランダム・リダクション。問合せを行ったユーザーに表示される、リダクションされたデータは、値が表示のたびにランダムに生成されて表示されます。
リダクションなし。このオプションでは、リダクション・ポリシーが定義された表に対する問合せの結果に影響を与えずに、ポリシーの内部動作をテストできます。このオプションを使用して、リダクション・ポリシー定義を本番環境に適用する前にテストできます。
データ・リダクションでは、実行時、つまり、ユーザーがデータを表示する際にリダクションが行われます。この機能は、データが常に変化する動的本番システムに非常に適しています。データはリダクションされますが、Oracle Databaseですべてのデータを通常どおり処理し、バックエンドの参照整合性制約を保持できます。データ・リダクションは、クレジットカード業界のセキュリティ基準(PCI DSS)やサーベンス・オクスリー法などの業界の規則の順守に役立ちます。
非常に制限されたデータにのみアクセスできるユーザー・グループと、より多くのデータにアクセスできるグループが存在する場合は、選択したユーザー・グループのデータをリダクションできます。
トピック:
このチュートリアルのシナリオは営業所に関するもので、営業部長(ユーザー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など)と組み合せる必要があります。
まず、必要なユーザー・アカウントを作成し、ユーザーsec_admin
にDBMS_REDACT
PL/SQLパッケージに対するEXECUTE
権限を付与する必要があります。これは、Oracle Data Redactionポリシーを作成するために必要です。
このチュートリアルで使用するユーザー・アカウントを作成するには、次のようにします。
Enterprise Managerで、ターゲット・データベースのデータベース・ホームページに、SYSDBA
管理権限を持つユーザーSYS
としてアクセスします。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。
「管理」メニューから「セキュリティ」を選択し、「ロール」を選択します。
ロールページで「作成」を選択します。
ロールの作成ページの「名前」フィールドにSUPERVISOR
と入力し、「OK」をクリックします。
「管理」メニューから「セキュリティ」を選択し、「ユーザー」を選択します。
ユーザー・ページで、「作成」をクリックします。
ユーザーの作成ページで、次の情報を入力します。
名前: EZLOTKEY
(Eleni Zlotkeyのユーザー・アカウントの作成)
プロファイル: DEFAULT
認証: Password
「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。
デフォルト表領域: EXAMPLE
一時表領域: TEMP
ステータス: Unlocked
「システム権限」タブを選択します。
「リストの編集」ボタンを選択します。
「システム権限の変更」リストで次の権限を選択し、「選択したシステム権限」リストに移動します。
CREATE SESSION
CREATE TABLE
UNLIMITED TABLESPACE
「OK」をクリックします。
ユーザーの作成ページで「ロール」タブを選択し、「リストの編集」ボタンを選択します。
ロールの変更ページで、「使用可能なロール」リストのSUPERVISORロールをダブルクリックし、「選択したロール」リストに移動します。
「OK」をクリックし、「OK」を再度クリックしてユーザー・ページに戻ります。
「作成」ボタンを選択します。
ユーザーの作成ページで、次の情報を入力します。
名前: EABEL
(Ellen Abelのユーザー・アカウントの作成)
プロファイル: DEFAULT
認証: Password
「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。
デフォルト表領域: EXAMPLE
一時表領域: TEMP
ステータス: Unlocked
「システム権限」タブを選択します。
「リストの編集」ボタンを選択します。
システム権限の変更」リストでCREATE SESSION
システム権限をダブルクリックして「選択したシステム権限」に移動します。
「OK」をクリックします。
ユーザー・ページでEABELユーザーを選択します。
「アクション」リストから「類似作成」ボタンを選択して「実行」をクリックします。
ユーザーの作成ページで、次の情報を入力します。
名前: AHUTTONと入力します(ユーザーAlyssa Hutton)。
「パスワードの入力」および「パスワードの確認」: 「パスワードの作成要件」に示されている要件を満たすパスワードを入力します。
ユーザーezlotkey
にはロールsupervisor
が付与されていますが、ユーザーeabel
およびahutton
にはロールが付与されていないことに注意してください。
「OK」をクリックします。
ユーザー・ページで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: セキュリティ管理者アカウントを作成する」も参照してください。
「オブジェクト権限」タブを選択します。
「オブジェクト権限」タブで、「オブジェクト・タイプの選択」リストから「パッケージ」を選択し、「追加」をクリックします。
パッケージ・オブジェクトの選択フィールドにSYS.DBMS_REDACT
と入力し、「使用可能な権限」リストのEXECUTE権限を「選択した権限」リストに移動します。
「OK」をクリックし、次に「適用」をクリックします。
sales_opps
には、販売機会である小企業に関する情報が含まれます。後でOracle Data Redactionポリシーを作成する必要のある列が2つ含まれます。
sales_opps販売機会表を作成し、データを移入するには、次のようにします。
データベース・インスタンスにユーザーezlotkey
としてログインします。
sqlplus ezlotkey
Enter password: password
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);
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);
リダクションの対象のデータを確認するには、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
ユーザーsec_admin
として、sales_opps_pol
Oracle Data Redactionポリシーを作成します。
sales_opps_polデータ・リダクション・ポリシーを作成するには、次のようにします。
Enterprise Managerからログアウトし、ユーザーsec_admin
としてログインしなおします。
詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。
「管理」メニューから「セキュリティ」を選択し、「Oracle Data Redaction」を選択します。
データ・リダクション・ページで「作成」ボタンを選択します。
データ・リダクション・ポリシーの作成ページで、ポリシーの基本の次の情報を入力します。
スキーマ: EZLOTKEY
と入力します(大文字)。
表/ビュー: SALES_OPPS
と入力します(大文字)。
ポリシー名: SALES_OPPS_POL
と入力します。
ポリシー式: 次の式を入力します。
SYS_CONTEXT('SYS_SESSION_ROLES', 'SUPERVISOR') = 'FALSE'
式は、supervisor
ロールが有効になっていないユーザーに対してaccount
列のデータをリダクションするという意味です。つまり、スーパーバイザezlotkey
のみがaccount
列のデータを表示できます。
データ・リダクション・ページで、次のようにしてsales_opps_policy
ポリシーを列に適用します。
「追加」ボタンを選択します。
追加ウィンドウで、「列」リストから「ACCOUNT」を選択します。
「列のデータ型」フィールドに、ACCOUNT
のデータ型であるVARCHAR2
が表示されます。
リダクション・テンプレート・リストから「カスタム」(デフォルトの選択肢)を選択します。
リダクション機能リストから「FULL」を選択します。
FULLは、account
列のすべての文字がリダクションされるということです。account
列のデータ型はVARCHAR2
のため、データは空白で表示されます。
「OK」をクリックします。
次のようにして、sales_opps_pol
ポリシーを2つ目の列に適用します。
「追加」ボタンを選択します。
追加ウィンドウで、「列」リストから「CLOSE_DATE」を選択します。
「列のデータ型」フィールドで、CLOSE_DATE
のデータ型はDATE
と判別されます。
リダクション機能リストから「PARTIAL」を選択します。
即座に追加ウィンドウが拡張され、機能の属性領域が表示されます。
「日付リダクション形式」フィールドに次の属性を入力します。
m06d7YHMS
この設定では、各日付の月と日をリダクションし、07-JUNE-12
と表示されるよう設定します。
「OK」をクリックします。
次のように「データ・リダクション・ポリシーの作成」ページが表示されます。
データ・リダクション・ポリシーの作成ページで、「OK」をクリックします。
ポリシーが、データ・リダクション・ポリシー・リストに表示されます。
Enterprise Managerを終了しないでください。
sales_opps_pol
Oracle Data Redactionポリシーをテストするには、以前に作成したユーザーとしてログインし、sales_opps
表のリダクションされた列を問い合せます。
sales_opps_polポリシーをテストするには、次のようにします。
ユーザーezlotkey
としてSQL*Plusに接続します。
connect ezlotkey
Enter password: password
営業担当者に、sales_opps
表に対するSELECT
権限を付与します。
GRANT SELECT ON sales_opps TO eabel; GRANT SELECT ON sales_opps TO ahutton;
ユーザーeabel
として接続します。
connect eabel
Enter password: password
次のように、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
列には予期されたデータが表示されます。
ユーザー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
に対しても、データはリダクションされます。
ユーザー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
データ・リダクション・ポリシーでは、ユーザーezlotkey
はsupervisor
ロールが有効なため、実際のデータが表示されます。ただし、このロールがezlotkey
に対して無効の場合、sales_opps
表を作成し、所有していても、この表に問い合せると、account
列とclose_date
列はリダクションされます。
SQL*Plusからログアウトします。
EXIT
コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。
このチュートリアルで使用したコンポーネントを削除するには、次のようにします。
Enterprise Managerで、sec_admin
ユーザーとしてログインしていることを確認します。
データ・リダクション・ポリシー・ページでSALES_OPPS_POL
ポリシーを選択します。
「削除」ボタンをクリックします。
「確認」ページで「はい」をクリックします。
Enterprise Managerからログアウトし、SYSDBA
管理権限を使用してユーザーSYS
として再度ログインします。
データベース・ホーム・ページで、「セキュリティ」、「管理」、「ユーザー」の順に選択します。
ユーザー「AHUTTON」を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。
ユーザー「EABEL」を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。
ユーザー「EZLOTKEY」を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。
「管理」メニューから「セキュリティ」を選択し、「ロール」を選択します。
ロールSUPERVISOR
を選択して「削除」をクリックし、確認ウィンドウで「はい」を選択します。
ユーザー・ページで「SEC_ADMIN」ユーザーを選択し、「編集」をクリックします。
ユーザーの編集: SEC_ADMINページで「オブジェクト権限」タブを選択します。
DBMS_REDACTパッケージのEXECUTE権限を選択し、「削除」をクリックします。
「適用」ボタンをクリックします。
「ログアウト」ボタンをクリックし、Enterprise Managerを終了します。