IRIブログの以前の記事では、更新を検出するために列の値を変更する必要がある、スケジュールされたIRIFieldShieldジョブスクリプトで/INCLUDEロジックまたは/QUERY構文を使用した新しいデータベースデータの静的データマスキングについて詳しく説明しました。この記事では、SQLイベントに基づいてFieldShieldマスキング関数をトリガーするためのより受動的で統合された方法について説明します。つまり、リアルタイムで生成されるデータをマスクするためです。
具体的には、この記事では、FieldShieldデータマスキングライブラリ関数を呼び出してWindows上のOracle12cでPIIをマスクするストアドプロシージャのインストールと使用について説明します。また、他のデータベースやオペレーティングシステムの「手順モデル」としても機能します。
最小要件
- JVM対応のOracleデータベースのバージョン
- Oracleサーバーの/binはシステムPATHに含まれている必要があります
- IRIFieldShieldとそのSandkeyソフトウェア開発キットのライセンスコピー
- Oracle Java JRE 8
- Microsoft.NETv4.8フレームワーク
インストール
sandkey.zipフォルダーを作成したら、 sandkey.jarを抽出します。 およびsandkeyFunctions.jar ファイル、および libsandkey.dll ご使用のオペレーティングシステムに対応するファイル。 libsandkey.dll ファイルは.zipファイルのルートフォルダにあります
ファイルを入手したら、次の手順に従います。
- コマンドプロンプトを開き、ファイルが配置されている場所に移動して、次の形式でこれらのコマンドを入力します。
loadjava -r -u <username>/<password>@<database> <filename>
これを実行しているときにCREATE$java $ LOB $ TABLEに関連するエラーが発生した場合は、権限が不十分である可能性があり、SYSTEMとしてコマンドを1回実行する必要がある可能性があります。
- libsandkey.dllを配置します bin内のファイル Oracleサーバーのフォルダ。または、ファイルの場所をシステムパスに追加します。
- SQL * Plusまたは同様のプログラムを使用してSYSTEMとしてデータベースに接続し、次のクエリを入力します。
select seq, kind, grantee, name, enabled from dba_java_policy where name like ‘%java.lang.RuntimePermission%’;
「java.lang.RuntimePermission#loadLibrary。*」というラベルの付いたポリシーを見つけます。この場合は99番です。データベース内のSandkeyユーザーに権限を付与するには、このポリシーを一時的に無効にする必要があります。
- ポリシー番号がわかったので、次のコマンドを発行してポリシーを無効にし、ユーザーにアクセス許可を付与してから、ポリシーを再度有効にします。
exec dbms_java.disable_permission(99); exec dbms_java.grant_permission( ‘IRIDEMO’, ‘SYS:java.lang.RuntimePermission’, ‘loadLibrary.libsandkey’, ‘’ ); exec dbms_java.enable_permission(99);
示されているように、ユーザー名が完全に大文字になっていることを確認してください。大文字になっていないと、システムがそれを認識しません。
- スクリプトを実行するか、これらのコマンドを手動で入力して、SQL*Plus内に次の関数を作成します。
CREATE FUNCTION enc_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'sandkeyFunctions.Functions.encaes256(java.lang.String, java.lang.String) return java.lang.String'; / CREATE FUNCTION enc_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'sandkeyFunctions.Functions.encfpascii(java.lang.String, java.lang.String) return java.lang.String'; / CREATE FUNCTION enc_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'sandkeyFunctions.Functions.encfpalphanum(java.lang.String, java.lang.String) return java.lang.String'; / CREATE FUNCTION dec_aes256 (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'sandkeyFunctions.Functions.decaes256(java.lang.String, java.lang.String) return java.lang.String'; / CREATE FUNCTION dec_fp_ascii (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'sandkeyFunctions.Functions.decfpascii(java.lang.String, java.lang.String) return java.lang.String'; / CREATE FUNCTION dec_fp_alphanum (input VARCHAR2, pass VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'sandkeyFunctions.Functions.decfpalphanum(java.lang.String, java.lang.String) return java.lang.String'; /
- IRI FieldShield、IRI DarkShield、およびIRICellShieldのユーティリティバージョンの同じ静的データ暗号化関数と互換性のあるSandkey暗号化および復号化関数を使用してストアドプロシージャまたはトリガーを作成できるようになりました。
ユースケース:PL/SQLトリガー
サンドキー暗号化関数を使用して、EMPLOYEESテーブルに挿入されたデータを自動的に暗号化する例を次に示します。
このトリガーは、enc_fp_ascii(暗号化を保持するASCII形式)関数を使用して新しい従業員のLAST_NAMEを暗号化し、enc_fp_alphanum関数を使用して挿入された各行の新しい従業員のPHONE_NUMBERを暗号化します。
データが挿入される前に、トリガーは新しいデータを inputとして渡します 、およびパスワード(暗号化キー値)を pass として 、サンドキー暗号化機能に。この関数は、各値の暗号文の結果を出力として返します。 新しい行に移動します。
この例では、5つの新しい行がテーブルに挿入されたため、LAST_NAME列とPHONE_NUMBER列が上記の関数でどのように暗号化されたかに注意してください。
実際、インストールすると、サンドキーマスキング関数をPL / SQLの機能内で任意の方法で使用して、より「動的な」イベントドライブデータマスキング要件をサポートできます。
データベース環境でのこのアプローチについては、お問い合わせください。
ユースケース:復号化されたビュー
この例は、EMPLOYEESテーブルに基づいて復号化されたビューを作成する方法を示しています。
復号化されたビューは、データ列の呼び出し方法を除いて、他のビューの作成方法と同様に作成されます。個々の列は、対応する関数を使用して、次の形式で復号化されます。
<functionName>(<columnName>, ‘<password/key>’) <displayName>
復号化されたビューを作成すると、指定されたユーザーはビューからデータを照会でき、EMPLOYEESテーブルの実際のデータは暗号化されたままになります。以下は、クエリを実行したときにビューがどのように表示されるかを示す画像です。
SandkeyとOracleの統合により、自動暗号化トリガー、復号化されたビュー、またはカスタムストアドプロシージャを通じて、データのセキュリティをより細かく制御できます。より一般的には、FieldShieldマスキングルーチンとPL / SQLなどのプロシージャを使用して、さまざまなユースケースのリアルタイムデータベースイベントに基づいて機密データをマスキングできるようになりました。