1

私は使用していますOracle apex 5oracle database 12c

で正常に構成oracle apex 5されましoracle DB 12cた。

authentication scheme認証スキームが正常に機能するデータベーステーブルを使用して作成しました。

しかし、私の要件は - 各ユーザーは、同じアプリケーションで独自のschema (例: user1 = HR; user2 = SCOTT) に接続する必要があります。

まもなく、アプリケーションは で実行する必要がありmultiple schemasますrun time

しかし、私はそれを得ることができません、私は以下のものを試しました-

現在の解析スキーマは「SCOTT」です - を使用して変更してみてください -

  1. apex_application.g_flow_owner := 'HR'; - 失敗した
  2. ALTER SESSION SET CURRENT_SCHEMA = 'HR'; - 失敗した

何をすればいいのかわかりません。解決のために体を助けてください。

4

1 に答える 1

1

あなたは正しい軌道に乗っていると思います。apex_application.g_flow_owner := 'HR';コマンドはトリックを実行する必要がありますが、共有コンポーネント>セキュリティ>セキュリティ属性>データベースセッション>初期化PL/SQLコードに配置する必要があります

編集:まず、アプリケーションにログインする各ユーザーのスキーマを持つことは、最善の方法ではないと思います。すべてのスキーマに対してすべての変更を行う必要があると考えてください。データ アクセスの制御に役立つVirtual Private Database (VPD) をご覧になることをお勧めします。

それでもスキーマを変更したい場合は、このようにできると思います。アプリケーションのページごとに 2 つのプロセスを作成します。1 つはOn Load Before Headerで、もう 1 つはOn Submitです。このプロセスには、次のようなものが含まれている必要があります。

BEGIN
if :APP_USER='SCOTT' THEN
apex_application.g_flow_owner := 'SCOTT';
ELSE
apex_application.g_flow_owner := 'HR';
END IF
END;

このように、Scott がページをロードすると、スキーマが SCOTT に変更され、彼のスキーマからのデータが表示されます。HR がページをロードすると、スキーマが HR に変更され、データが表示されます。ページを送信するときも同じです。スキーマが最初に変更されてから、他の操作を行います。

この 2 番目のアイデアは防弾ではありません。そのため、やりたいことを再考することをお勧めします。

Edit2: コンポーネント ビューで、[プロセス] のプラス記号をクリックしてプロセスを追加し、ウィザードで [送信時 - 計算と検証の前] をポイント オプションとして選択します。 ここに画像の説明を入力

于 2015-11-24T08:29:48.180 に答える