8

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

そうです、理論的には、「マイ プログラム」という名前のスクリプト (またはソフト リンク) を作成し、それをコマンド ラインとして使用してファイルを実行することができます。しかし、それは「非常に悲しく、まったく良くない」という尺度でかなり高く評価されています. :(

4

1 に答える 1

0

http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2088.htm言う

PROGRAM     VARCHAR2(48)    Operating system program name

これは、何らかの形でバイナリの名前を期待値に変更する必要があることを意味します。

これを行うためのヒントがいくつかあります: http://www.perlmonks.org/?node_id=500714

perldoc perlvar:

   $0      Contains the name of the program being executed.

           On some (but not all) operating systems assigning to $0
           modifies the argument area that the "ps" program sees. On some
           platforms you may have to use special "ps" options or a
           different "ps" to see the changes. Modifying the $0 is more
           useful as a way of indicating the current program state than it
           is for hiding the program you're running.

...

于 2013-10-01T15:04:00.780 に答える