難読化
難読化では、データベース・オブジェクトの DDL ステートメント (ルーチン、トリガー、ビュー、PL/SQL パッケージなど) の本体がエンコードされます。 コードを難読化すると、ユーザーはコードを読めなくなるので知的財産の保護に役立ちます。 その場合も、 データ・サーバーはそのコードを理解できます。
DBMS_DDL モジュールには、ルーチン、トリガー、ビュー、または PL/SQL パッケージを難読化するための次の 2 つのルーチンが用意されています。
- WRAP 関数
- ルーチン、トリガー、PL/SQL パッケージ、または PL/SQL パッケージの本体定義を引数として受け取り、最初のヘッダーの後に、ステートメントの他の部分の難読化バージョンが続くストリングを作成します。
例えば、入力が次のようなものだったとします。
DBMS_DDL.WRAP 関数を使用した場合、結果は次のようになります。CREATE PROCEDURE P(a INT) BEGIN INSERT INTO T1 VALUES (a); END
DDL ステートメントの難読化された部分にコード・ページのインバリアント文字が含まれているので、このステートメントは何かしらのコード・ページに対して有効になります。CREATE PROCEDURE P(a INT) WRAPPED SQL09072 aBcDefg12AbcasHGJG6JKHhgkjFGHHkkkljljk878979HJHui99 - 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