DBD::Oracle を使用して、ログイン時に v$session.program を検証する LOGON トリガーを持つ Oracle データベースに接続する必要があります。
私が試してみました:
use strict;
use warnings;
use DBI;
DBI->connect ('dbi:Oracle:host=<ip>;sid=<sid>', 'test', 'TEST',
{ ora_module_name => 'My Program'}) || die DBI::errstr;
しかし、DBD::Oracle は接続後まで v$session.program を設定しないため、これは機能しません。
ただし、JDBC は接続前の設定をサポートしています。
Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.put("v$session.program", "My Program");
Class driver = Class.forName(driverClass);
しかし、私はJavaを使用していません。私はパールを使用しています。助言がありますか?!
[アップデート]
プロセスで「strace」を実行すると、DBD::Oracle モジュールが次のことを行っていることがわかります。
open("/proc/self/cmdline", O_RDONLY) = 4 read(4, "perl\0test.pl\0", 255) = 13
そうです、理論的には、「マイ プログラム」という名前のスクリプト (またはソフト リンク) を作成し、それをコマンド ラインとして使用してファイルを実行することができます。しかし、それは「非常に悲しく、まったく良くない」という尺度でかなり高く評価されています. :(