Grundsätzlich sollen Anwendungen auch mit diesen Schema-Benutzern arbeiten. Und wenn man daher verhindern will, dass sich Anwender als dieser "Schema-Benutzer" anmeldet, dann wird dieser Benutzer gerne gesperrt. Seit Oracle Database 18c geht das auch einfacher, mit den "Schema-Only-Accounts".
Vereinfacht gesagt sind "Schema-Only-Accounts" Benutzer ohne Password. Das wird deutlich wenn man einen derartigen Account anlegt:
SQL> create user doag_schema no authentication;
User created.
In der Dictionary-View DBA_USERS kann man diese Accounts anhand der Spalte AUTHENTICATION_TYPE erkennen:
SQL> select username,authentication_type
2 from dba_users where username like 'DOAG%';
USERNAME AUTHENTI
------------------- ------------
DOAG_SCHEMA NONE
DOAG_USER PASSWORD
Direkte Anmeldungen unter diesem Account sind nicht möglich. Die Anmeldung als dieser Account erfolgt über einen Proxy-Benutzer. Dazu muss allerdings der Schema-Only-Account das Create-Session-Recht haben:
SQL> grant create session to doag_schema;
Grant succeeded.
Weiterhin braucht der Schema-Only-Account auch die üblichen Rechte, die nötig sind, um Objekte anzulegen (CREATE-Rechte, Quotas auf Tablespaces etc.). Und natürlich muss der User, den man für die Verbindung nutzen möchte, das Recht haben, sich als Proxy-Benutzer für dieses Schema anzumelden:
SQL> ALTER USER doag_schema GRANT CONNECT THROUGH doag_user;
User altered.
Anschließend kann sich der Benutzer DOAG_USER mit seinem Password als DOAG_SCHEMA anmelden:
SQL> Connect doag_user[doag_schema]/doag@playpdb
Connected.
SQL> show user
USER is “DOAG_SCHEMA”
Und dann muss man die üblichen Sachen machen, die unter einem solche Schema bei Installationen oder Applikations-Upgrades erforderlich sind: Tabellen anlegen oder ändern, Prozeduren anlegen usw.
Wenn man einen vorhandenen Benutzer zum "Schema-Only-Account" machen möchte, kann man dem Benutzer einfach das Password entziehen:
SQL> ALTER USER BEISPIEL NO AUTHENTICATION;
User altered.
Und andersherum kann man aus einem "Schema-Only-Account" einen normalen Benutzer machen, indem man ein Password vergibt:
SQL> ALTER USER BEISPIEL IDENTIFIED BY geheim;
User altered.
Das Feature ist seit Oracle Database 18c verfügbar. Seit Oracle Database 19c sind auch alle administrativen Oracle-Accounts außer SYS und SYSTEM Schema-Only-Accounts um direkte Anmeldungen zu verhindern. Früher hatten diese Accounts oft Standard-Passworte und das war ein Sicherheitsrisiko.
Insgesamt bieten die Schema-Only-Accounts eine einfache Möglichkeit, Daten besser abzusichern, in dem sie für eine bessere Trennung zwischen Daten und Anwendungsbenutzern sorgen.
Markus Flechtner
DOAG Themenverantwortlicher Open Source


