sql >> Database >  >> RDS >> Oracle

Oracle:alleen-lezen toegang tot het schema voor een andere gebruiker?

Als u controle heeft over de manier waarop uw toepassing verbinding maakt (bijvoorbeeld een initialisatieverklaring voor uw verbindingspool), hoeft u alleen maar het volgende te doen:

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

Vanaf dat moment (tijdens de levensduur van de sessie) wordt er gezocht naar een niet-gekwalificeerde objectnaam in de PRODUCTS schema.

Alle beurzen gegeven aan PRODUCTS_READONLY van kracht zal zijn. De sessie wordt uitgevoerd onder de inloggegevens (en beveiligingsbeperkingen) van de oorspronkelijke gebruiker die is gebruikt om in te loggen.

Als u de manier waarop de verbinding tot stand wordt gebracht of geïnitialiseerd niet kunt veranderen, zou een aanmeldingstrigger dit ook moeten doen:

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

Merk op dat het cruciaal is om elke . te vangen uitzondering, omdat anders een mogelijke fout in de uitgevoerde SQL iedereen effectief uit de database zal afmelden. Dus wees voorzichtig en test het goed voordat je het in productie neemt.



  1. Variabele 'sql_mode' kan niet worden ingesteld op de waarde van 'NO_AUTO_CREATE_USER'

  2. Docker wacht tot postgresql actief is

  3. PHP :Ongedefinieerde functie mysql_connect()

  4. Zelfstudie SQL-transacties