3

仕事

マルチテナント アプローチを使用するように既存のアプリケーションを改良します。テナントを作成することは可能であり、各ユーザーのセッションはアクティブなテナントを 1 つだけ参照する必要があります。各テナントは、データベース スキーマの自分のパーティションのみを表示および更新できる必要があります。

アプローチ

  • テナント ID を含む Oracle アプリケーション コンテキストを作成する
  • 範囲を指定する必要があるテーブルにテナント ID 列を追加します
  • SELECT、INSERT、UPDATE、および削除に対して「tenant_id = sys_context('tenant_context', 'tenant_id')」を返す述語関数を作成する
  • dbms_rls を介して適切なポリシーを追加し、述語関数を登録します。

これは、SELECT、UPDATE、および DELETE の既存のアプリケーションに触れることなく、魅力的に機能します。

質問

挿入すると、tenant_id 列が設定されず、セキュリティ例外が発生します。セキュリティ関連のフィールドを常に設定する述語関数と同じくらい洗練された方法はありますか? 300 以上のテーブルにトリガーを追加したくありません。

4

1 に答える 1

4

質問することで答えが得られることもあります。列のデフォルト値に非定数式を使用できることを知らなかったので、

alter table XXX
add column tenant_id default sys_context('tenant_context', 'tenant_id');

実際に私の問題を解決します。

于 2010-02-14T19:56:25.747 に答える