システム開発ブログ


PL/SQLをコンパイルするとデータベースに配置されますが、通常、そのPL/SQLはソースコードを見ることが可能です。
もし、見られたくない情報が記述されている場合、どのような対応策をとればよいでしょうか?

対応策の一つとして、wrapというOracleのユーティリティを使うことで、PL/SQLのソースコードを難読化することができます。

wrapユーティリティはOracleをインストールすると使えるようになります。(Database、Clientのどちらでも可)
コマンドプロンプトで入力して使用します。
入力方法は、SAMPLE.sqlを例にすると下記のようになります。

D:\works\plsql>wrap iname=SAMPLE.sql

PL/SQL Wrapper: Release 10.2.0.1.0- Production on 水 1月 27 21:29:45 2010

Copyright (c) 1993, 2004, Oracle. All rights reserved.

Processing SAMPLE.sql to SAMPLE.plb

D:\works\plsql>

上記のように、SAMPLE.sql から SAMPLE.plb というファイルが生成されているのが分かります。

後は、この生成されたSAMPLE.plbを普通のPL/SQLと同様にしてコンパイルを行えば、
ソースコードが難読化された状態でデータベースに配置されます。

Oracle Database 11g Release 11.1.0.7.0 - Production
に接続されました。
SQL> @D:\works\plsql\SAMPLE.plb

パッケージが作成されました。

エラーはありません。

パッケージ本体が作成されました。

エラーはありません。
SQL>

これで、PL/SQLのソースコードの難読化は完了です。

ただし、wrapで難読化されたコードでも解析される可能性はあります。
(もちろん、誰でも解析できるわけではなく相応の実力が必要になりますが。)

「簡単にソースを読ませない」ための対応という位置づけで使用するのが望ましいでしょう。


ちなみに下記が難読化の例に使用したPL/SQLになります。

<難読化前のPL/SQLソースコード> - SAMPLE.sql

-- パッケージ
CREATE OR REPLACE PACKAGE SAMPLE
IS
PROCEDURE MAIN (INC_LOGIN_ID IN VARCHAR2);

END SAMPLE;
/
SHOW ERROR;

-- パッケージボディ
CREATE OR REPLACE PACKAGE BODY SAMPLE
IS
PROCEDURE MAIN(INC_LOGIN_ID IN VARCHAR2)
IS
CO_PGID CONSTANT VARCHAR2(40) := 'MAIN';
BEGIN

-- コードを記述
DBMS_OUTPUT.PUT_LINE('PGID = ' || PGID);

EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END MAIN;
END SAMPLE;
/
SHOW ERROR;

<難読化後のPL/SQLソースコード> - SAMPLE.plb

CREATE OR REPLACE PACKAGE SAMPLE wrapped
a000000
340
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
9
4c 85
JdtEtOb/U0tshzT2yXjK2k5/K1Ewg5m49TOf9b9c55/SsqVSQ5t0iwZ055u/nzK9ssBcpTLS
0l5QpdLHSv4Iv/7Sbf71zKaeFkatOa0SVzmI3qPHUr6SvmeBo4Kmph51084=

/
SHOW ERROR;
CREATE OR REPLACE PACKAGE BODY SAMPLE wrapped
a000000
340
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
b
f3 113
oxLkV60ikUSGCTdjDsDwa984s1owgyrQcp4VfHTU7WGu9xP94+MwwDB9g0tEsaDfkKrcELXE
SzLnoc7nnc+hUS2/gqhfrxBnX9CZJ9M74J5vVewvNKi543mTFaJxhft/3esU2hP1uQ0nU8Jr
2/RxtlYxuCuqUZhuIzLtr7yIzVs7YNgiMpFtYU20j0uGZpPLcG2cJmRuK85hBIICYJ3JkedC
1BRp9vY+eCM+ONdS18bsAajU3ByZ6F0THcL4kCR96GG7QFUf6BitUA==

/
SHOW ERROR;


システム周りのお悩みを解決します

まずは無料ダウンロード

この記事に関連する記事の一覧


システム開発ブログ

Twitterでilovex_officialをフォローしてください

カテゴリー

以前の部署別ブログ

ページのトップ