sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Skrivskyddad åtkomst till schemat för en annan användare?

Om du har kontroll över hur din applikation ansluter (t.ex. en initialiseringssats för din anslutningspool), är allt du behöver göra att köra:

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

Från den tidpunkten och framåt (under sessionens livstid) kommer alla okvalificerade objektnamn att sökas efter i PRODUCTS schema.

Alla bidrag som ges till PRODUCTS_READONLY kommer att gälla. Sessionen kommer att köras under autentiseringsuppgifterna (och säkerhetsbegränsningarna) för den ursprungliga användare som användes för att logga in.

Om du inte kan ändra hur anslutningen upprättas eller initieras bör en inloggningsutlösare också åstadkomma detta:

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

Observera att det är avgörande att fånga alla undantag, eftersom ett potentiellt fel i den exekverade SQL-filen i praktiken kommer att logga ut alla från databasen. Så använd den med försiktighet och testa den väl innan du sätter den i produktion.



  1. Hur skapar man automatisk inkrementering / SERIELL ID-kolumn på DBeaver med PostgreSQL?

  2. Förhindrar pg_prepare() förberedd sats (inte PDO) SQL-injektion?

  3. Oracle konverterar RAW till datumformat

  4. Hur man konverterar ett heltal till en decimal i SQL Server