sql >> Databáze >  >> RDS >> Oracle

Oracle:Přístup pouze pro čtení ke schématu pro jiného uživatele?

Pokud máte kontrolu nad způsobem, jakým se vaše aplikace připojuje (např. inicializační příkaz pro váš fond připojení), vše, co musíte udělat, je spustit:

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

Od tohoto okamžiku (během doby trvání relace) bude jakýkoli nekvalifikovaný název objektu vyhledáván v PRODUCTS schéma.

Všechny granty udělené PRODUCTS_READONLY bude v platnosti. Relace bude probíhat pod přihlašovacími údaji (a bezpečnostními omezeními) původního uživatele použitého k přihlášení.

Pokud nemůžete změnit způsob navázání nebo inicializaci připojení, měl by to provést také spouštěč přihlášení:

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

Všimněte si, že je důležité zachytit jakékoli výjimku, protože jinak případná chyba ve spuštěném SQL efektivně odhlásí každého z databáze. Používejte jej proto opatrně a před uvedením do výroby jej dobře otestujte.



  1. Zabijte nebo zastavte dotazy MySQL po ukončení skriptu PHP

  2. Jak se vypořádám s uvozovkami ' v SQL

  3. Jak nainstalovat MySQL na Debian 7

  4. Ebean hledá nesprávný název sekvence v Play Framework 2