難読化

難読化では、データベース・オブジェクトの DDL ステートメント (ルーチン、トリガー、ビュー、PL/SQL パッケージなど) の本体がエンコードされます。 コードを難読化すると、ユーザーはコードを読めなくなるので知的財産の保護に役立ちます。 その場合も、 データ・サーバーはそのコードを理解できます。

DBMS_DDL モジュールには、ルーチン、トリガー、ビュー、または PL/SQL パッケージを難読化するための次の 2 つのルーチンが用意されています。
WRAP 関数
ルーチン、トリガー、PL/SQL パッケージ、または PL/SQL パッケージの本体定義を引数として受け取り、最初のヘッダーの後に、ステートメントの他の部分の難読化バージョンが続くストリングを作成します。 例えば、入力が次のようなものだったとします。
CREATE PROCEDURE P(a INT)
BEGIN
  INSERT INTO T1 VALUES (a);
END
DBMS_DDL.WRAP 関数を使用した場合、結果は次のようになります。

CREATE PROCEDURE P(a INT) WRAPPED SQL09072
aBcDefg12AbcasHGJG6JKHhgkjFGHHkkkljljk878979HJHui99
DDL ステートメントの難読化された部分にコード・ページのインバリアント文字が含まれているので、このステートメントは何かしらのコード・ページに対して有効になります。
CREATE_WRAPPED プロシージャー
前述の WRAP 関数と同じ入力を受け取りますが、難読化したテキストを返す代わりに、データベースにオブジェクトが作成されます。 このオブジェクトは、コンパイラーが処理できるように内部的には難読化されていませんが、SYSCAT.ROUTINES や SYSCAT.TRIGGERS のようなカタログ・ビューでは、TEXT 列の内容が難読化されます。

難読化されたステートメントを CLP スクリプトで使用でき、その他のクライアント・インターフェースを使用して動的 SQL としてサブミットすることもできます。

難読化は、以下のステートメントに使用可能です。
  • db2look (-wrap オプションを使用)
  • CREATE FUNCTION
  • CREATE PACKAGE
  • CREATE PACKAGE BODY
  • CREATE PROCEDURE
  • CREATE TRIGGER
  • CREATE VIEW
  • ALTER MODULE
db2look ツールは、-wrap オプションが使用されると、前述のすべてのステートメントを難読化します。