WRAP
WRAP 関数は、判読可能な DDL ステートメントを、難読化された DDL ステートメントに変換します。
難読化された DDL ステートメント内の手順ロジックおよび 組み込み SQL ステートメントは、ロジックに含まれる知的財産を簡単には抽出できないように、暗号化されます。
スキーマは SYSIBMADM です。
- object-definition-string
- DDL ステートメントを含んでいる、タイプ CLOB または DBCLOB のストリング。以下のいずれかの SQL ステートメントを指定できます。
- CREATE FUNCTION (SQL スカラー)
- CREATE FUNCTION (SQL 表)
- CREATE PROCEDURE (SQL)
- CREATE TRIGGER
結果は、エンコードされたバージョンの入力ステートメントを
含んでいる、タイプ CLOB(2M) のストリングです。結果が NULL になることはありません。エンコードは、元のステートメントのままにしたルーチン・シグニチャーまたはトリガー名までの接頭部と、
その後に続くキーワード WRAPPED から構成されます。このキーワードの後には、関数を起動したアプリケーション・サーバーについての
情報が続きます。この情報の形式は pppvvrrm で、各部の意味は次のとおりです。
- ppp は、以下の 3 文字を使用して製品を示します。
- DSN (Db2 for z/OS の場合)
- QSQ (Db2® for i の場合)
- SQL (Db2 for LUW の場合)
- vv は、2 桁のバージョン ID です (例えば、'07' など)。
- rr は、2 桁のリリース ID です (例えば、'02' など)。
- m は、1 文字の修正レベル ID です (例えば、'0' など)。
このアプリケーション・サーバー情報の 後に、文字 (a から z および A から Z)、数字 (0 から 9)、下線、およびコロンからなるストリングが続きます。
エンコードされた DDL ステートメント は、平文形式のステートメントよりも最大 3 分の 1 だけ長くなる可能性があります。 結果が SQL ステートメントの最大長を超える場合、 エラーが発行されます。
注記
ステートメントのエンコードは、内容を難読化することを意図したものであり、強い暗号化の一種と考えるべきではありません。例
例 1: 週 40 時間労働として時間給から年間給与を計算する関数の難読化版を 生成します。
VALUES WRAP('CREATE FUNCTION salary(wage DECFLOAT) RETURNS DECFLOAT
RETURN wage * 40 * 52')
このステートメントの結果は、例えば次のようになります。
CREATE FUNCTION salary(wage DECFLOAT) WRAPPED QSQ07020 <encoded-suffix>
例 2: 複雑なデフォルトを設定するトリガーの難読化版を 生成します。
VALUES WRAP('CREATE OR REPLACE TRIGGER trig1 BEFORE INSERT ON emp
REFERENCING NEW AS n FOR EACH ROW
WHEN (n.bonus IS NULL) SET n.bonus = n.salary * .04')
このステートメントの結果は、例えば次のようになります。
CREATE TRIGGER trig1 WRAPPED QSQ07020 <encoded-suffix>