Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » ストアドプロシージャー、トリガー、バッチ、ユーザー定義関数

 

プロシージャー、ファンクション、トリガー、イベント、ビューの内容を隠す

プロシージャー、ファンクション、トリガー、イベント、ビューに含まれるロジックを公開しないで、アプリケーションとデータベースを配布できます。追加のセキュリティ対策として、ALTER PROCEDURE 文、ALTER FUNCTION 文、ALTER TRIGGER 文、ALTER EVENT 文、ALTER VIEW 文の SET HIDDEN 句を使用して、これらのオブジェクトの内容を隠すことができます。

SET HIDDEN 句は、関連オブジェクトを使用可能な状態に保ちながら、その内容を難読化して読み取れないようにします。また、アンロードして、別のデータベースに再ロードすることもできます。

修正を元に戻すことはできません。修正すると、オブジェクトの元のテキストが削除されます。オブジェクトの元のソースをデータベースの外部に保存しておく必要があります。

注意

preserve_source_format データベースオプションを On に設定すると、データベースサーバーは、プロシージャー、ビュー、トリガー、イベントの CREATE 文と ALTER 文によってフォーマットされたソースを保存し、それを適切なシステムビューのソースカラムに配置します。この場合、オブジェクト定義とソース定義の両方が隠されます。

ただし、preserve_source_format データベースオプションを On に設定しても、SET HIDDEN 句でオブジェクトの元のソース定義を削除できます。

デバッガーによるデバッグでは、プロシージャー定義が表示されず、プロシージャープロファイリングにもソースが表示されません。

すでに隠されているオブジェクトに対して、前述のいずれかの文を実行しても効果はありません。

特定の型のすべてのオブジェクトのテキストを隠すには、次のようなループを使用できます。



BEGIN
    FOR hide_lp as hide_cr cursor FOR
        SELECT proc_name, user_name
        FROM SYS.SYSPROCEDURE p, SYS.SYSUSER u
        WHERE p.creator = u.user_id
        AND p.creator NOT IN (0,1,3)
    DO
        MESSAGE 'altering ' || proc_name;
        EXECUTE IMMEDIATE 'ALTER PROCEDURE "' ||
            user_name || '"."' || proc_name
            || '" SET HIDDEN'
    END FOR
END;
 参照