0

アプリケーションの 2 つのコピー (ライブ バージョンとテスト バージョン) を持つターミナル サーバーがあります。

これらは、ユーザーのデスクトップ上の 2 つのアイコンです。アプリケーションを起動するときに、アプリケーションが接続する Oracle データベースの名前を入力します。

ユーザーが TEST アイコンを使用するときに実稼働データベースにアクセスできないようにし、PROD アイコンを使用するときにユーザーが TEST 環境にアクセスできないようにしたいと考えています。

残念ながら、アプリケーションを介してこれを行うことはできません。また、ベンダーによってアプリケーションが変更されるというルートをたどりたくありません。アプリケーションは、単一の tnsnames.ora ファイルを使用して、テスト バージョンと製品バージョンの両方のデータベースに接続するため、これを変更することはできません (複数を使用する方法がない限り?)。

テストアプリケーションがライブサーバーにアクセスするのを防ぐ(接続をブロックするだけ)ローカルファイアウォールを用意できると思っていましたが、現時点では両方とも同じサーバー上にあります。

では、特定のアプリケーションが Oracle データベースにアクセスするのを防ぐ方法を考えられる人はいますか? アプリケーション EXE は同じ名前ですが、テスト バージョンか製品バージョンかによって異なるパスから実行されます。

4

2 に答える 2

1

ターミナルサーバー上の環境を制御できるため、非常に簡単なオプションの1つは、アプリケーションをバッチファイルでラップして、制限付きのを使用するように強制することtnsnames.oraです。

test_tns_adminとなどの2つのディレクトリを作成しますlive_tns_admin。のコピーをtnsnames.ora各ディレクトリに配置しますが、それぞれが1つのターゲットデータベースのTNSエイリアスのみを持つように編集します。

となどの2つのバッチファイルを作成live.batしますtest.bat。それぞれでTNS_ADMIN、適切なディレクトリを指すようにadmin変数を設定してから、実際のアプリケーションを起動します。したがってtest.bat、次のようになります。

::Batch wrapper for the TEST application
@set TNS_ADMIN="\path\to\test_tns_admin"
@"\path\to\real\application.exe"

...live.bat同じですが、他のディレクトリを指しています。実際のアプリケーションの代わりに、デスクトップにバッチファイルへのショートカットを配置できます。それらの1つが実行され、アプリケーションが起動すると、TNS_ADMINはカットダウンを取得することを意味するtns_names.oraため、TESTTNSエイリアスのみが認識されます。ターミナルサーバーまたはデータベース上の他の何も影響を受けません。

tnsnames.ora2つの新しいファイルも実際には必要ありません。既存のシステム全体のエイリアスからエイリアスを削除しTEST、ライブアプリケーションをそのままにして、テストランチャーをバッチファイルに置き換えるだけで済みます。これは、ライブには影響がないため望ましいかもしれませんが、管理方法によって異なります。両方を同じように機能させることがより明確になるかどうか。

于 2013-02-21T09:56:38.017 に答える
1

v $ sessionというビューがあり
、次のクエリにセッション情報が表示されます

select username,program
from   v$session 


制限された(または許可された)プログラム名を一覧表示するためのテーブルがある場合があります

CREATE TABLE RESTRICTED_PROGRAMS(
PROGRAM_NAME     VARCHAR2(64))

INSERT INTO RESTRICTED_PROGRAMS VALUES ('TEST.exe');
COMMIT;

以下のスクリプトを使用して、AFTER LOGONONTRIGGERを作成できます。

 CREATE OR REPLACE TRIGGER logon_audit
  AFTER LOGON ON database
DECLARE
  v_program            VARCHAR2(100);
BEGIN
    SELECT program into v_program;
      FROM v$session
     WHERE audsid = userenv('sessionid');


  for x in (SELECT * FROM RESTRICTED_PROGRAMS) loop
    IF upper(v_program) == upper(x.PROGRAM_NAME) THEN
      RAISE_APPLICATION_ERROR(-20001,
                              'You are not allowed to login using ' ||
                              v_program);
    end if;
  end loop;
END;

ユーザーがアプリケーションX.exeを使用してデータベースに接続できる場合、Y.exeの名前をXに変更しても、ユーザーはそのままです。

于 2013-02-20T09:40:46.717 に答える