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!