55 DBMS_DEBUG_JDWP_CUSTOM
DBMS_DEBUG_JDWP_CUSTOM
パッケージは、Java Debug Wire Protocol (JDWP)を使用するデバッガへのデータベース・セッションのデバッグ接続要求のカスタム処理を実行する手段をユーザーに提供します。
55.1 DBMS_DEBUG_JDWP_CUSTOMの概要
DBMS_DEBUG_JDWP_CUSTOM
パッケージは、Java Debug Wire Protocol (JDWP)を使用して、データベース・セッションをデバッガに接続しようとすると起動されます。データベースに接続する前に、クライアント側のOCIアプリケーションで、ORA_DEBUG_JDWP
環境変数を設定する必要があります。スキーマにこのパッケージを定義すると、データベース・セッションをデバッガに接続する前に、カスタム・アクションを実行できます。
55.2 DBMS_DEBUG_JDWP_CUSTOMのセキュリティ・モデル
このDBMS_DEBUG_JDWP_CUSTOM
パッケージのデフォルトの実装では、追加のセキュリティ・チェックは実行されず、デバッグ接続を行うためのDBMS_DEBUG_JDWP
パッケージが起動されるだけです。DBMS_DEBUG_JDWP
パッケージが起動されると、接続する前に、必要なDEBUG CONNECT
システム権限またはユーザー権限がチェックされます。
追加のカスタム・セキュリティ・チェックを実行する必要があるデータベース・ユーザーは、次のステップを実行してこのデフォルトの実装をオーバーライドする必要があります。
-
ユーザー独自のスキーマに
DBMS_DEBUG_JDWP_CUSTOM
パッケージを定義します。 -
DBMS_DEBUG_JDWP
パッケージのユーザーのローカル・コピーでこのパッケージを起動する前にチェックを実装します。
55.3 DBMS_DEBUG_JDWP_CUSTOMサブプログラムの要約
この表は、DBMS_DEBUG_JDWP_CUSTOMサブプログラムの要約を示しています。
表55-1 DBMS_DEBUG_JDWP_CUSTOMサブプログラム
サブプログラム | 説明 |
---|---|
このプロシージャは、デバッガへの現在のデータベース・セッションのデバッグ接続要求を処理するために起動されます。 |
55.3.1 CONNECT_DEBUGGERプロシージャ
このプロシージャは、デバッガへの現在のデータベース・セッションのデバッグ接続要求を処理するために起動されます。
構文
PROCEDURE CONNECT_DEBUGGER
(
HOST VARCHAR2,
PORT VARCHAR2,
DEBUG_ROLE VARCHAR2 := NULL,
DEBUG_ROLE_PWD VARCHAR2 := NULL,
OPTION_FLAGS PLS_INTEGER := 0,
EXTENSIONS_CMD_SET PLS_INTEGER := 128
)
パラメータ
前述のパラメータは、デバッグ接続要求を処理するためのプロシージャをデフォルトで実装するためのものです。この要求の処理をカスタマイズする必要があるユーザーは、ユーザー独自のスキーマに同じ名前のプロシージャを含むパッケージ(仕様部および本体)を定義することで、DBMS_DEBUG_JDWP_CUSTOM
パッケージ・プロシージャのこのデフォルトの実装をオーバーライドする必要があります。引数の数および名前はカスタマイズできますが、パッケージ(DBMS_DEBUG_JDWP_CUSTOM
)およびプロシージャ(CONNECT_DEBUGGER
)に対して同じ名前を指定する必要があります。ユーザーがカスタマイズしたバージョンのパッケージには、引数が異なる、オーバーロードされたバージョンのCONNECT_DEBUGGER
プロシージャが含まれている場合があります。カスタム・パッケージ・プロシージャに対するすべての引数は、VARCHAR2型またはPL/SQLがVARCHAR2から暗黙的に変換できる型である必要があります。
たとえば、営業時間外のデバッグを許可しない場合に、デバッグ中に表示されるプログラム値にオプションのNLS設定を適用している場合は、次の方法で、ユーザーのスキーマにパッケージのカスタム実装を定義できます。
CREATE OR REPLACE PACKAGE DBMS_DEBUG_JDWP_CUSTOM AUTHID CURRENT_USER IS
PROCEDURE CONNECT_DEBUGGER(HOST VARCHAR2,
PORT VARCHAR2,
NLS_LANGUAGE VARCHAR2 DEFAULT NULL,
NLS_TERRITORY VARCHAR2 DEFAULT NULL);
END;
/
CREATE OR REPLACE PACKAGE BODY DBMS_DEBUG_JDWP_CUSTOM IS
PROCEDURE CONNECT_DEBUGGER(HOST VARCHAR2,
PORT VARCHAR2,
NLS_LANGUAGE VARCHAR2 DEFAULT NULL,
NLS_TERRITORY VARCHAR2 DEFAULT NULL) IS
BEGIN
SELECT EXTRACT(HOUR FROM LOCALTIMESTAMP) INTO HOUR FROM DUAL;
IF (HOUR < 9 OR HOUR > 5) THEN
RAISE_APPLICATION_ERROR(-20000,
'Debug connection disallowed outside business hours');
ELSE
IF (NLS_LANGUAGE IS NOT NULL) THEN
DBMS_DEBUG_JDWP.SET_NLS_PARAMETER('NLS_LANGUAGE', NLS_LANGUAGE);
END IF;
IF (NLS_TERRITORY IS NOT NULL) THEN
DBMS_DEBUG_JDWP.SET_NLS_PARAMETER('NLS_TERRITORY', NLS_TERRITORY);
END IF;
DBMS_DEBUG_JDWP.CONNECT_TCP(HOST, PORT);
END IF;
END;
END;
/
クライアント・アプリケーションを実行してプロシージャのパラメータに引数を渡す前に、次のようにORA_DEBUG_JDWP
環境変数を設定する必要があります。
> setenv ORA_DEBUG_JDWP "host=123.45.67.89;port=4000;nls_language=american"
> myapp -user HR/<password>
...