Oracle: Benutzerverwaltung

Aus Wikibooks


Durch Installation angelegte Benutzer[Bearbeiten]

Wenn eine Oracle-Datenbank installiert wird, dann werden die folgenden Benutzer eingerichtet:


User-ID durch die Installation vergebenes Passwort Verwendung
SYS CHANGE_ON_INSTALL Systemstart und Betrieb
SYSTEM MANAGER Administration

Der User SYS hat die DBA-Rolle und das SYSDBA-Recht. Er kann sich an der Datenbank-Instanz anmelden, wenn diese noch nicht hochgefahren ist. SYS darf den STARTUP-Befehl ausführen. SYS kann nicht nur die Datenbank administrieren, sondern darf auch alle Tabelleninhalte der anderen Benutzer anzeigen lassen. Der User SYS kann selber Tabellen erstellen. Diese Möglichkeit sollte nur dafür genutzt werden, um Tabellen zu erstellen, die vom System oder für die Systemverwaltung genutzt werden. Benutzer, die dieses Privileg erlangen wollen, müssen in der Betriebssystemgruppe dba sein und müssen sich mit dem Kommandozeilenzusatz as sysdba anmelden. Aus Sicherheitsgründen sollte dieses Konto geLOCKED sein, damit keine Loginmöglichkeit mehr über den Listener, trotz bekanntem Passwort, besteht. Ein lokaler Login ist weiterhin möglich.

Der User SYSTEM hat ebenfalls die DBA-Rolle und das SYSDBA-Recht. Er kann jedoch - im Vergleich zum SYS - nicht die Tabellen der anderen Benutzer anzeigen. Auch das SYSTEM Konto sollte aus Sicherheitsgründen geLOCKED sein, damit keine Loginmöglichkeit mehr über den Listener, trotz bekanntem Passwort, besteht. Ein lokaler Login ist weiterhin möglich.

Die oben angegebenen Passwörter werden bei einer Installation bis zur Version 9 automatisch vergeben. Ab der Version 10g muss man die Initial-Passwörter während der Installation selber bestimmen.

Weitere User-IDs, die bei der Installation zusätzlicher Komponenten erstellt werden:

User-ID durch die Installation vergebenes Passwort Verwendung
SCOTT TIGER Bis zur Version 8 wurde der User SCOTT immer als Beispiel-User mitinstalliert.

Seit der Version 9 (?) wird er nur noch dann erstellt, wenn die Beispiel-Datenbank SAMPLE installiert wird. Handelt es sich bei der Instanz nicht um eine Test-Beispieldatenbank, sollte der User, inklusiv aller Objekte, gelöscht werden. Dies gilt erst recht für Produktivdatenbanken.

SYSMAN CHANGE_ON_INSTALL für die Administration der Datenbank aus dem Oracle Enterprise Manager
DBSNMP DBSNMP für Zugriffe aus dem Oracle Enterprise Manager
CTXSYS CTXSYS für die Administration der Text-Extender-Funktionen
DIP DIP Administration der Directory Integration Platform (DIP), die Änderungen im OID (Oracle Internet Directory) mit Applikationen in der Datenbank synchronisieren kann
DMSYS DMSYS für die Administration der data mining-Funktionen
EXFSYS EXFSYS für die Administration der Expression-Filter-Indizierungs-Funktionen
MDDATA MDDATA für die Administration der Oracle Spatial- und Geodaten-Funktionen
MDSYS MDSYS für die Administration der Oracle Spatial- und interMedia-Locator-Funktionen
MGMT_VIEW wird generiert wird für die Kontrolle durch den Oracle Enterprise Manager benutzt
OLAPSYS MANAGER für die Administration der OLAP metadata-Strukturen
ORDPLUGINS ORDPLUGINS der Oracle interMedia User
ORDSYS ORDSYS der Oracle interMedia Administrator Account
OUTLN OUTLN für die Administration der Tuning-Statistiken
SI_INFORMTN_SCHEMA SI_INFORMTN_SCHEMA für die Administration der Oracle interMedia-Funktionen

Einen neuen Benutzer anlegen[Bearbeiten]

Um einen Benutzer anzulegen, sind nur wenige Angaben erforderlich:

create user jm identified by geheim;

Die User-ID des neuen Benutzers lautet jm und es wurde das Passwort "geheim" festgelegt. Diesem Benutzer wird der default Tablespace (meistens der Tablespace USERS) und der default TEMP Tablespace (meistens der Tablespace TEMP) und das Profil mit dem Namen DEFAULT zugewiesen.

Oft soll der neue Benutzer einen eigenen Tablespace erhalten. Dann muss dieser erst angelegt werden:

create tablespace sjm datafile 'c:\oracle\oradata\oracle\sjm.dbf' size 5G;

Dann kann man den neuen Benutzer anlegen und diesen Tablespace als seinen default Tablespace angeben:

create user jm            
   identified by geheim    
   default tablespace sjm        
   temporary tablespace temp_jm  -- muss man vorher anlegen
   profile entwickler_profil     -- muss man vorher anlegen (siehe unten)
   account unlock                -- Der Account soll nicht gesperrt sein
   quota 1G on sjm               -- Der User darf 1 GB Platz verbrauchen
;

Einige Berechtigungen für den User jm vergeben:

grant connect to jm;               -- Connect-Berechtigung (erst dann ist ein Connect möglich)
grant create procedure to jm;      -- Prozeduren erstellen
grant create trigger to jm;        -- Trigger erstellen
grant create sequence to jm;       -- Sequence erstellen
grant create public synonym to jm; -- öffentliche Synonyme erstellen
grant drop public synonym to jm;   -- öffentliche Synonyme löschen
grant execute on sys.sp1 to jm;    -- Prozedur sys.sp1 ausführen 
grant select on pr_tab to jm;      -- Lesezugriffe auf Tabelle pr_tab
grant create tablespace to jm;     -- Tablespace erstellen

Anmeldung als der neu erstellte User jm:

connect jm/geheim;

Bei der externen Autorisierung übernimmt das Betriebssystem die Passwortprüfung für die Authentifizierung. In diesem Fall wird innerhalb der Oracle-Datenbank kein Passwort für einen Benutzer gespeichert bzw. überprüft. Der Benutzer muss lediglich der Oracle-Datenbank bekannt gemacht werden.

create user jmex identified externally;

Passwort ändern:

alter user jm identified by tiger;

Das Passwort des eigenen Users kann man immer ändern. Das Passwort eines anderen Users kann nur der Administrator ändern.

Einen bestehenden Benutzer löschen[Bearbeiten]

Sollten für den Benutzer bereits abhängige Daten existieren, muss die 'cascade' Option angegeben werden, um alle Abhängigkeiten mitzulöschen.

drop user username cascade;

Systemprivilegien[Bearbeiten]

Systemprivilegien sind Rechte zur Administration der Datenbank. Sie sind unabhängig von bestimmten Objekten (z.B. Tabellen, Spalten, Indices)

Welche Systemprivilegien hat ein User erhalten?

 select * from user_sys_privs;
 select * from dba_sys_privs;
 select * from session_privs;

Objektprivilegien[Bearbeiten]

Objektprivilegien sind Berechtigungen zur Administration bestimmter Datenbank-Objekte. Bei der Vergabe dieser Berechtigungen muss immer das betreffende Objekt genannt werden, auf das sich das Recht bezieht.

Welche Objektprivilegien hat ein User erhalten?

 select * from all_tab_privs;
 select * from user_tab_privs;
 select * from dba_tab_privs;

Durch die Quota wird festgelegt, wie viel Platz ein Benutzer in Anspruch nehmen darf für die Tabellen, die er erstellt und mit Daten füllt. Die Quota kann ein Administrator ändern:

 alter user jm quota 15M on stest;

Welche Quotas wurden vergeben:

 select * from user_ts_quotas;
 select * from all_ts_quotas;
 select * from dba_ts_quotas;

Welche Spaltenprivilegien wurden vergeben?

 select * from all_col_privs;
 select * from user_col_privs;
 select * from dba_col_privs;

Welche Objektprivilegien hat er weitergegeben?

 select * from all_tab_privs_made;
 select * from user_tab_privs_made;

Welche Objektprivilegien hat er von anderen Usern erhalten?

 select * from all_tab_privs_recd;
 select * from user_tab_privs_recd;

Welche Spaltenprivilegien hat er erhalten?

 select * from all_col_privs_recd;
 select * from user_col_privs_recd;

Welche Spaltenprivilegien hat er weitergegeben?

 select * from all_col_privs_made;
 select * from user_col_privs_made;

Profil[Bearbeiten]

Jeder User hat ein Profil, in dem verschiedene Ressource- und Passwort-Parameter festgelegt sind. Über die Ressource-Parameter kann ein Benutzer eingeschränkt werden in der Benutzung der Systemressourcen (z.B. maximal zulässige Anzahl Sessions, CPU-Nutzung). Die Passwort-Parameter legen z.B. fest, wie lange ein Passwort verwendet werden darf und die zulässige Anzahl der Fehleingaben. Welches Profil ein User hat, ist in DBA_USERS eingetragen.

select profile from dba_users where username = 'JM'; 

Welche Profile gibt es und welche Einstellungen sind z.B. in dem Profil 'DEFAULT' festgelegt?

select * from dba_profiles where profile = 'DEFAULT'

Der Systemadministrator kann auch weitere Profile anlegen. Beispiel:

create profile pr_develop limit 
   password_reuse_max 10
   password_reuse_time 30
   sessions_per_user unlimited
   cpu_per_session unlimited
   cpu_per_call 3000
   connect_time 45
   ;

Rolle[Bearbeiten]

Meistens gibt es in einem Unternehmen verschiedene Gruppen von Mitarbeitern, die bestimmte Berechtigungen haben. Beispiel: Softwareentwickler, Administratoren, Anwender. Jeder Oracle-User braucht eine Vielzahl von Berechtigungen, die davon abhängig ist, in welcher Gruppe er tätig ist. Damit nun diese vielen Einzel-Berechtigungen nicht bei jeder personellen Veränderung einzeln zugewiesen oder entzogen werden müssen, gibt es in Oracle das Rollen-Konzept.

Eine Rolle wird eingerichtet und die dafür vorgesehenen Berechtigungen werden dieser Rolle gegeben.

create role anwend_a;
grant select on a01.umsatz to anwend_a;
grant select, delete on a01.log to anwend_a;
grant execute on prog035 to anwend_a;

Dann wird diese Rolle an die einzelnen User vergeben.

grant anwend_a to jm;

Jedem User kann eine Default-Rolle zugewiesen werden. Beispiel:

alter user jm default role r_default;

Wenn ein User mehrere Rollen erhalten hat, dann kann er diese aktivieren und deaktivieren durch den Befehl SET:

set role r01, r02, r03; -- Nur diese Rollen werden aktiviert
set role all; -- Alle Rollen werden aktiviert
set role none; -- Alle Rollen werden deaktiviert

Welche Rollen sind in der aktuellen Session gerade aktiv?

select * from session_roles;

Welche Rollen gibt es?

select * from dba_roles;

Welche System- und Objektprivilegien wurden einer Rolle gegeben? Wurden einer Rolle noch weitere Rollen zugewiesen?

select * from role_sys_privs;
select * from role_tab_privs;
select * from role_role_privs;

Welche Rollen hat der User JM erhalten?

select * from dba_role_privs where grantee = 'JM';

Was machen die einzelnen User gerade?[Bearbeiten]

 select EXECUTIONS, USERS_EXECUTING, username, sql_text 
 from v$session se , v$sql sq
 where se.sql_address = sq.address;

In der Katalog-View v$session sind alle gerade aktiven Sessions verzeichnet. In der View v$sql sind die zuletzt ausgeführten SQL-Statements eingetragen. Bei einer Verknüpfung dieser beiden Views kann man sich ausgeben lassen, welche SQL-Statements die einzelnen Benutzer ausgeführt haben und wie oft diese Statements ausgeführt wurden.

Übersicht über das User-Profil[Bearbeiten]

 select * from user_users;
 select * from all_users;
 select * from dba_users;


Zugriff auf Dictionary-Tabellen[Bearbeiten]

Der Initilisierungsparameter O7_DICTIONARY_ACCESSABILITY sollte auf dem Default FALSE stehen. Dadurch wird verhindert, dass Benutzer mit dem Privileg SELECT ANY TABLE Tabellen des Data Dictionary lesen können. Der Wert TRUE stellt den Zustand her, der in Version 7 der Datenbank Default war: Das SELECT ANY TABLE Privileg galt auch für die Tabellen des Data Dictionary.

Drei Rollen erlauben eine differenzierte Steuerung des Zugriffs auf Objekte des Data Dictionary:

  • SELECT_CATALOG_ROLE erlaubt den Zugriff auf Data Dictionary Views
  • DELETE_CATALOG_ROLE ermöglicht das Löschen in den Tabellen des Audit Trails und
  • EXECUTE_CATALOG_ROLE eröffnet den Zugriff auf Prozeduren und Packages des Data Dictionary.

Das Privileg SELECT ANY DICTIONARY erlaubt nicht nur den Zugriff auf Views des Data Dictionary, sondern den Zugriff auf ALLE Objekte des Benutzers SYS.