sql >> データベース >  >> RDS >> Database

トリガーを使用したリアルタイムデータマスキング

    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などのプロシージャを使用して、さまざまなユースケースのリアルタイムデータベースイベントに基づいて機密データをマスキングできるようになりました。


    1. T-SQLのバグ、落とし穴、およびベストプラクティス–ピボットとピボット解除

    2. PostgreSQLレプリケーションが遅れている場合の注意点

    3. Microsoft Accessとは何ですか?また、それを何に使用しますか?

    4. 複雑なPostgresクエリ