Um eine Oracle Datenbank zu administrieren, kann als elegante Lösung der Oracle Developer verwendet werden. Auf den vorherigen Artikel Eine Oracle 19c Datenbank erstellen (Microsoft Windows) folgt nun die Installation und Einrichtung des Oracle SQL Developers.

Der Oracle SQL Developer ist derzeit in der Version 19.2.1 auf der Seite SQL Developer 19.2.1-Downloads erhältlich.

Da wir den Oracle SQL Developer unter Microsoft Windows nutzen möchten, wählen wir Download in der Zeile Windows 64-Bit mit JDK 8 aus.

Die heruntergeladene .zip Datei können wir in ein beliebiges Verzeichnis entpacken. Anschließend starten wir die Datei sqldeveloper.exe.

Auf der Startseite klicken wir auf Verbindung manuell erstellen.

Im Fenster Datenbankverbindung erstellen/w√§hlen, geben wir der Verbindung einen beliebigen Namen. Unter Benutzername geben wir sys ein, w√§hlen als Rolle SYSDBA aus und unter Details geben wir SID der Datenbank ein. Anschlie√üend k√∂nnen wir einen Test mit Klick auf den Button Test durchf√ľhren oder uns Anmelden mit einem Klick auf Anmelden.

Wenn die Anmeldung erfolgreich war, erscheint auf der linken Seite die Datenbank mit dem Namen den wir im Feld Namen eingegeben hatten.

PS: Es gibt auch die Oracle Developer Tools for Visual Studio. Aber dazu irgendwann später.

Einen Oracle Benutzer erstellen

Um einen Benutzer zu erstellen öffnen wir sqlplus und loggen uns ein. Mit dem nachfolgenden Befehl können wir einen Benutzer mit einem Passwort erstellen. Der Benutzername soll ouser1 und das Passwort Passw0rd sein.

sqlplus sys/Passw0rd@orcl_b as sysdba

Beim Versuch mit dem nachfolgenden Befehl einen Benutzer zu erstellen wird man in einen Fehler laufen.

create user ouser1 identified by "Passw0rd";
SQL> create user ouser1 identified by "Passw0rd";
create user ouser1 identified by "Passw0rd"
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

Oracle Benutzer m√ľssen mit einem Pr√§fix erstellt werden. Theoretisch kann man mit einem undokumentierten Befehl das umgehen, wovon jedoch aufgrund von nicht absehbaren Folgende abgeraten wird.

Mit dem setzen des undokumentierten Parameters _oracle_script auf True könnte man einen Benutzer ohne Präfix erstellen.

alter session set "_oracle_script"=true;

Wie bereits erw√§hnt, rate ich davon ab. Der Standard-Pr√§fix f√ľr einen Oracle User ist c##. Also m√ľssen wir nun als Benutzernamen c##ouser1 w√§hlen.

SQL> create user c##ouser1 identified by "Passw0rd" container=all;

User created.

Und voila, User wurde erfolgreich erstellt. Man kann sich jedoch mit diesem Benutzer noch nicht anmelden, da der Benutzer keine Rechte dazu hat. Damit ein Benutzer sich anmelden kann, m√ľssen wir diesem das Recht create session geben.

SQL> grant create session to c##ouser1;

Grant succeeded.

Damit ein Benutzer Tabellen erstellen kann, m√ľssen diesem weitere Rechte zuweisen. In diesem Fall create table.

SQL> grant create table to c##ouser1;

Grant succeeded.

Noch könnte der Benutzer keine Tabellen erstellen, da ihm eine Tablespace Quota fehlt. Nachfolgend kann man dem Benutzer Tablespace Quota zuweisen.

SQL> alter user c##ouser1 quota unlimited on users;

User altered.

Als letztes weisen wir dem Benutzer weitere Rechte zu, damit dieser Views oder Sequenzen erstellen kann.

  • create view ‚Äď Erm√∂glicht es Views zu erstellen
  • create procedure ‚Äď Erm√∂glicht dem Benutzer Procedures, Functions und Packages zu erstellen
  • create sequence ‚Äď Sequenzen erstellen
SQL> grant create view, create procedure, create sequence to c##ouser1;

Grant succeeded.

Aus Sicherheitsgr√ľnden sollten man den Benutzer, welcher die Datenbankenobjekte erstellen, modifizieren und l√∂schen kann, nicht f√ľr den Zugriff aus einer Anwendung heraus nutzen. Hierzu empfiehlt es sich einen weiteren Benutzer nur mit Login sowie SELECT, INSERT, UPDATE und DELETE f√ľr die Bearbeitung von Datens√§tzen innerhalb dieser Objekte zu versehen. Also keine strukturellen √Ąnderungen sondern nur Datensatz√§nderungen erlauben.

Dazu erstellen wir einen “Application User” mit dem Namen c##auser1. Dieser bekommt das Recht sich an der Datenbank anzumelden. Anschlie√üend geben wir ihm das Recht auf bestimmten Tabellen im c##ouser1 Schema CRUD Operationen durchzuf√ľhren. Die letzte Befehlszeile gibt ihm das Recht eine Operation auszuf√ľhren.

SQL> create user c##auser1 identified by "Passw0rd";

User created.

SQL> grant create session to c##auser1;

Grant succeeded.

SQL> grant select, insert, update, delete on c##ouser1.customers to c##auser1;

Grant succeeded.

So, nun h√§tten wir sichergestellt, dass durch m√∂gliche Fehler in der Anwendungsentwicklung SQL Injections auf der Datenbankseite abgewehrt werden k√∂nnen, welche beispielsweise einen DROP <Datenbankobjekt> erm√∂glichen k√∂nnten. Man k√∂nnte es noch weiterf√ľhren, aber das ist nicht Gegenstand dieses Beitrags.

Um eine Tabelle mit unserem zuvor erstellten User c##ouser1 zu erstellen verbinden wir uns nun mit diesem Benutzer an der Datenbank und erstellen eine Tabelle.

SQL> conn c##ouser1/Passw0rd
Connected.
SQL> create table customers (
  2    customer_id integer not null primary key,
  3    customer_name varchar2(100) not null
  4  );

Table created.

SQL>
SQL> insert into customers values ( 1, 'Unser erster Kunde iin einer Oracle Datenbanktabelle!' );

1 row created.

Das war’s! Benutzer ist angelegt mit den notwendigen Berechtigungen und der Test mit diesem Benutzer eine Tabelle zu erstellen war ebenfalls erfolgreich!