Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Nur-Lese-Zugriff auf das Schema für einen anderen Benutzer?

Wenn Sie die Art und Weise kontrollieren können, wie Ihre Anwendung eine Verbindung herstellt (z. B. eine Initialisierungsanweisung für Ihren Verbindungspool), müssen Sie nur Folgendes ausführen:

ALTER SESSION SET CURRENT_SCHEMA = PRODUCTS;

Ab diesem Zeitpunkt (während der Lebensdauer der Sitzung) wird in den PRODUCTS nach jedem nicht qualifizierten Objektnamen gesucht Schema.

Alle Zuschüsse für PRODUCTS_READONLY wird in Kraft treten. Die Sitzung wird unter den Anmeldeinformationen (und Sicherheitseinschränkungen) des ursprünglichen Benutzers ausgeführt, der für die Anmeldung verwendet wurde.

Wenn Sie die Art und Weise, wie die Verbindung hergestellt oder initialisiert wird, nicht ändern können, sollte dies auch durch einen Logon-Trigger erreicht werden:

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

Beachten Sie, dass es entscheidend ist, alle zu trappen Ausnahme, da sonst ein potenzieller Fehler in der ausgeführten SQL alle effektiv von der Datenbank abmelden wird. Verwenden Sie es also mit Vorsicht und testen Sie es gut, bevor Sie es in Produktion nehmen.