アプリケーションの接続方法(接続プールの初期化ステートメントなど)を制御できる場合は、次のコマンドを実行するだけです。
ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;
その時点以降(セッションの存続期間中)、修飾されていないオブジェクト名はPRODUCTS
で検索されます。 スキーマ。
PRODUCTS_READONLY
に与えられたすべての助成金 有効になります。セッションは、ログインに使用された元のユーザーの資格情報(およびセキュリティ制限)の下で実行されます。
接続の確立または初期化の方法を変更できない場合は、ログオントリガーもこれを実行する必要があります。
create or replace trigger logon_trg
after logon on database
begin
if (user = 'PRODUCTS_READONLY') then
execute immediate 'alter session set current_schema = products';
end if;
exception
when others then null; -- prevent a login failure due to an exception
end logon_trg;
/
すべてをトラップすることが重要であることに注意してください 例外です。そうしないと、実行されたSQLで潜在的なエラーが発生し、データベースから全員が事実上ログアウトするためです。したがって、慎重に使用し、本番環境に移行する前に十分にテストしてください。