CREATE_WRAPPED プロシージャー - 難読化オブジェクトのデプロイ

CREATE_WRAPPED プロシージャーは、平文 DDL オブジェクト定義を難読化 DDL オブジェクト定義に変換した後、そのオブジェクトをデータベースにデプロイします。

構文

難読化 DDL ステートメントでは、プロシージャー・ロジックに含まれる知的財産を簡単には抽出できないように、ロジックと組み込み SQL ステートメントがエンコードされます。

構文図を読む構文図をスキップするDBMS_DDL.CREATE_WRAPPED( object-definition-string)

パラメーター

object-definition-string
DDL ステートメント・テキストを含んだ CLOB(2M) タイプのストリング。以下のいずれかの DDL ステートメント・テキストが可能です (SQLSTATE 5UA0O)。
  • CREATE PROCEDURE
  • CREATE FUNCTION
  • CREATE PACKAGE (PL/SQL)
  • CREATE PACKAGE BODY (PL/SQL)
  • CREATE TRIGGER
  • CREATE VIEW
  • ALTER MODULE ADD FUNCTION
  • ALTER MODULE PUBLISH FUNCTION
  • ALTER MODULE ADD PROCEDURE
  • ALTER MODULE PUBLISH PROCEDURE
このプロシージャーは、入力を難読化 DDL ステートメント・ストリング変換した後、その DDL ステートメントを動的に実行します。 現在の呼び出し側の権限だけでなく、呼び出し時に有効な特殊レジスター (PATH や CURRENT SCHEMA など) の値も使用されます。
エンコードの構成は、次のようになります。まず、元のステートメントの接頭部のルーチン・シグニチャー (トリガー、ビュー、またはパッケージの名前) までがあり、その後にキーワード WRAPPED が続きます。 このキーワードの後に、このプロシージャーを実行するアプリケーション・サーバーに関する情報が続きます。 この情報は「pppvvrrm」の形式をとります。
  • ppp には、製品を Db2® と特定するために文字 SQL が使用されます。
  • vv は、2 桁のバージョン ID です (例えば「09」)。
  • rr は、2 桁のリリース ID です (例えば「07」)。
  • m は、1 文字の修正レベル ID です (例えば「0」)。
例えば、バージョン 9.7 のフィックスパック 2 は「SQL09072」と示されます。 このアプリケーション・サーバー情報の後に、文字 (a から z、および A から Z)、数字 (0 から 9)、下線、コロンから成るストリングが続きます。 難読化後も判読可能のままの接頭部の後にある入力ステートメントに対する構文検査は行われません。
エンコードされた DDL ステートメントは通常、平文形式のステートメントよりも長くなります。 結果が SQL ステートメントの最大長を超えた場合は、エラーが発生します (SQLSTATE 54001)。
注: ステートメントのエンコードは、内容を難読化することを意図したものであり、強い暗号化の 1 形式と考えるべきではありません。

許可

DBMS_DDL モジュールに対する EXECUTE 特権。

  • 週 40 時間労働として時間給から年間給与を計算する難読化関数を作成します。
    CALL DBMS_DDL.CREATE_WRAPPED('CREATE FUNCTION ' ||                                          
                       'salary(wage DECFLOAT) ' ||
                       'RETURNS DECFLOAT ' ||
                       'RETURN wage * 40 * 52');
    SELECT text FROM SYSCAT.ROUTINES 
     WHERE routinename = 'SALARY' 
        AND routineschema = CURRENT SCHEMA;

    この CALL ステートメントの実行が正常に完了すると、ルーチン 'SALARY' に対応する行の SYSCAT.ROUTINES.TEXT 列は、次のような形式のものになります。

    CREATE FUNCTION salary(wage DECFLOAT) WRAPPED SQL09072 obfuscated-text
  • 複雑なデフォルトを設定する難読化トリガーを作成します。
    CALL DBMS_DDL.CREATE_WRAPPED('CREATE OR REPLACE TRIGGER ' ||
                       'trg1 BEFORE INSERT ON emp ' ||
                       'REFERENCING NEW AS n ' ||
                       'FOR EACH ROW ' ||
                       'WHEN (n.bonus IS NULL) ' ||
                       'SET n.bonus = n.salary * .04');
    SELECT text FROM SYSCAT.TRIGGERS
     WHERE trigname = 'TRG1' 
       AND trigschema = CURRENT SCHEMA;

    この CALL ステートメントの実行が正常に完了すると、トリガー 'TRG1' に対応する行の SYSCAT.TRIGGERS.TEXT 列は、次のような形式のものになります。

    CREATE OR REPLACE TRIGGER trg1 WRAPPED SQL09072  obfuscated-text