Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :accès en lecture seule au schéma pour un autre utilisateur ?

Si vous avez le contrôle sur la façon dont votre application se connecte (par exemple, une instruction d'initialisation pour votre pool de connexion), tout ce que vous avez à faire est d'exécuter :

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

À partir de ce moment (durant la durée de vie de la session), tout nom d'objet non qualifié sera recherché dans PRODUCTS schéma.

Toutes les subventions accordées à PRODUCTS_READONLY sera en vigueur. La session s'exécutera avec les informations d'identification (et les restrictions de sécurité) de l'utilisateur d'origine utilisé pour se connecter.

Si vous ne pouvez pas modifier la façon dont la connexion est établie ou initialisée, un déclencheur de connexion devrait également accomplir ceci :

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;
/

Notez qu'il est crucial de piéger tout exception, car sinon une erreur potentielle dans le SQL exécuté déconnectera tout le monde de la base de données. Alors utilisez-le avec précaution et testez-le bien avant de le mettre en production.