APEX Application Archive (Teil 1) – Installation und Anwendungen archivieren

Mit der Packaged Application “APEX Application Archive” lassen sich Backups Ihrer Anwendungen erstellen. Mit einigen kleinen Erweiterungen, können Sie diesen Prozess auch automatisieren. Wie Sie diese Anwendung einsetzen und entsprechend erweitern können, können Sie dieser dreiteiligen Artikel-Serie entnehmen.

Bei der Anwendung “APEX Application Archive” handelt es sich, wie auch bei der in diesem Artikel vorgestellten Anwendung QuickSql, um eine sogenannte Packaged Application. Oracle stellt mit den Packaged Applications den Nutzern von APEX einige nützliche Werkzeuge zur Verfügung, die Sie auch produktiv einsetzen können.

Das Programm “APEX Application Archive” dient, wie der Name schon erahnen lässt, der Sicherung und Archivierung von APEX-Anwendungen. Sie können mit diesem Programm Anwendungsarchive erstellen, die eine oder mehrere Programme eines Workspaces enthalten können. Gespeichert werden diese Archive in entsprechenden Tabellen der Datenbank.

Interressant ist diese Anwendung im Entwicklungsprozess. Sie können so eine Versionierung bzw. Archivierung von Zwischenständen durchführen. Natürlich ist das auch manuell über die Exportfunktion des Application Builder zu erreichen. Allerdings müssen Sie sich bei dieser Variante um eine entsprechende Ablagestruktur im Filesystem kümmern.

Leider sieht die Anwendung keine automatische, z.B. zeitlich geplante Archivierung vor. Dieses Manko möchte ich allerdings in einem der nachfolgenden Artikeln durch eine eigene Lösung beheben.

APEX Application Archive installieren

Die Installation einer Packaged Application geht recht einfach von der Hand.

Im Application Builder klicken Sie einfach auf die Schaltfläche “Packaged Application”.

APEX Packaged Application installieren
Abbildung 1: APEX Packaged Application installieren

In der nächsten Seite werden Ihnen alle Packaged Applications der aktuellen APEX-Version (hier 18.1 EA) aufgelistet.

Filtern Sie diese nach den produktiv einsetzbaren Anwendungen, erhalten Sie die folgende Auflistung.

Abbildung 2: Produktiv einsetzbare Packaged Applications

Jetzt müssen Sie die Anwendung APEX Application Archive auswählen und im nächsten Fenster auf Installation klicken. Folgen Sie dann einfach dem Installations-Wizzard und schließen Sie den Vorgang ab.

Abbildung 3: APEX Application Archive installieren

Nach erfolgreicher Installation der Anwendung werden Sie nach der Anmeldung mit Ihrem APEX-Account beim ersten Start noch gebeten einige Parameter festzulegen.

Abbildung 4: Parameter APEX Application Archive

Fertig.

Anwendungen archivieren

Nach der Einrichtung der Anwendung, sehen Sie das Dashboard des “APEX Application Archive” Programms.

 

Abbildung 5: Application Archive Dashboard

Nun können Sie das erste Anwendungsarchiv anlegen. Betätigen Sie einfach die Schaltfläche “Archive Applications”.

Abbildung 6: Anwendung selektieren

In diesem Schritt wählen Sie eine oder mehrere Anwendung aus dem aktuellen Workspace aus.

Klicken Sie auf Next > .

Abbildung 7: Kommentar einfügen

Jetzt noch ein paar hilfreiche Informationen ergänzen und das Archiv mit “Create Archive” erstellen.

Bitte beachten Sie, dass die so erstellten Archive lediglich die selektierten APEX-Anwendungen enthalten. Die zugehörigen Datenbankobjekte wie Tabellen, Views, Packaged,usw. sind nicht enthalten. Um ein möglichst vollständiges Abbild eines Entwicklungs(zwischen)standes einer Applikation zu erhalten, empfehle ich Ihnen, die notwendigen DDL-Skripte in den Supported Objects der APEX-Anwendung zu hinterlegen.

Alternativ können Sie auch ein Dump-file mittels expdp (bzw. exp) erzeugen. Dies bringt allerdings den Nachteil mit sich, dass Sie sich wieder selber um die Versionierung der Dateien kümmern müssen.

Teil 2-Wiederherstellen und Exportieren

Im nächsten Teil dieser Beitragsreihe wird es um das Zurücksichern und Exportieren einer Anwendung gehen.

Wenn es Sie interessiert, wie es weiter geht, bestellen Sie doch den Newsletter von INFORMATIK-TRANSPARENT oder schauen Sie später noch einmal hier vorbei.

Beitragsübersicht

 

 

 

APEX Application Archive (Teil 2) – Anwendungen wiederherstellen

Im zweiten Teil der Beitragsreihe zur “APEX Application Archive” -Anwendung, geht es um das Wiederherstellen und das Herunterladen der archivierten APEX Anwendungen.

Im ersten Teil der Reihe habe ich Ihnen gezeigt, wie Sie eine oder mehrere Anwendungen mit Hilfe des “APEX Application Archive” in einem Archive sichern können. Die Anwendungen speichert der “APEX Application Archiver” in der Tabelle APEX$ARCHIVE_CONTENTS in einem BLOB.

Um nun eine oder mehrere Anwendungen, die Sie so gesichert haben, wiederherzustellen,  können Sie auf zweierlei Arten vorgehen.

Für beide Varianten ist der Ausgangspunkt der Menüeintrag “Archived Content”. Über diesen gelangen Sie zu einem Interaktiven Grid, welches alle archivierten Applikationen auflistet.

Abbildung 8: Anwendungsarchiv auswählen

Hier können Sie über das Setzen entsprechender Filter die benötigte Version der Anwendung auswählen.

APEX-Anwendung wiederherstellen

Als erste Möglichkeit können Sie eine archivierte Anwendung direkt aus einem Archiv heraus recovern. Dazu sind aber einige Schritte notwendig.

Suchen Sie in der Tabelle “Archived Content” die wiederherzustellen dies  Anwendung. Klicken  Sie auf den  Button “Restore”, so wird Ihnen auf der nächsten Seite des Wizzards eine Zusammenfassung der gewählten Anwendungen präsentiert.

Abbildung 9: Restore Content

Wie in Abbildung 9 dargestellt, starten Sie die Extraktion über “Restore Content”.

Jetzt wird die Exportdatei aus dem Archiv geladen und direkt in Ihrem Workspace in das sogenannte “Export Repository” importiert.

Anschließend bekommen Sie eine Checkliste angezeigt, die Ihnen die nächsten Schritte zur Installation der Anwendung erklärt.

Abbildung 10: Checkliste Installation der Anwendung

Wechseln Sie nun in die APEX-Entwicklungsumgebung und dort in den “Application Builder” des zugehörigen Workspaces. Klicken Sie auf “Utilities”.

Abbildung 11: Export Repository

Wie in Abbildung 11 dargestellt geht es weiter über den Link Export.

Abbildung 12: APEX-Anwendung installieren

Danach betätigen Sie den Link “Export Repository”.

Abbildung 13:Export Repository

Nun öffnet Sie das Export Repository. In dieser Tabelle sehen Sie die zuvor extrahieren Version Ihrer Anwendung(en). Über den Link “Install” starten Sie den Anwendungs Import-Assistenten.

Dieser stellt Ihnen verschiedene Möglichkeiten zur Verfügung. So können Sie die Anwendung parallel zu der aktuellen Anwendung installieren. Der eigentliche Ablauf ist im Abschnitt “Install Database Application” beschrieben.

APEX-Anwendung herunterladen

Bei der zweiten Variante können Sie einfach ein Archiv selektieren und die gewünschten Anwendung als APEX-Exportfile herunterladen. Diese Datei können Sie dann über die Importfunktion des Application-Builders importieren.

Dabei gehen Sie so vor.

Der Ausgangspunkt ist wieder, wie bereits in Abbildung 8 gezeigt, der Menüpunkt “Archived Content”. Dort suchen Sie sich wieder die Anwendungsversion, die Sie herunterladen möchten.

Klicken Sie hier auf “Download”.

Jetzt wird die Anwendung als Exportfile über Ihren Browser heruntergeladen. Diese Datei können Sie nun in einem beliebigen Workspace importieren.

Dazu melden Sie sich an der APEX-Entwicklungsumgebung an und öffnen dort den “Application Builder”.

Im “Application Builder” gelangen Sie über das Icon “Import” zum Import-Wizzard.

Hier können Sie die eben extrahierte Datei auswählen. Den File Type belassen Sie bei “Database Application,…”. Über Next> gelangen Sie zur nächsten Seite des Import-Assistenten.

Wie bereits erwähnt, verläuft die Installation einer Anwendung bei beiden Varianten ab diesem Punkt gleich.

Install Database Application

Im Installations-Wizzards können Sie, wie in der Abbildung 14 gezeigt, festlegen, ob Sie die Anwendung mit der ursprünglichen oder einer neuen App-ID automatisch oder manuell versehen lassen möchten. Je nach Auswahl wird die vorhandene Version der Anwendung überschrieben oder als parallele Version installiert.

Abbildung 14: Import Database Application

Über “Install Application” geht es zum nächsten Schritt. Hier müssen Sie noch die Frage beantworten, ob Sie die “Supported Objects” installieren möchten.

Bei den “Supported Objects” handelt es sich  meist um DDL-Skripte, welche bei der Installation bzw. Update oder auch Deinstallation ausgeführt werden.  Diese “Supported Objects” sind Bestandteil einer Anwendung.

Hier sollten Sie sich im Klaren darüber sein, ob diese SQL- Skripte ausgeführt werden sollen. Im Zweifelsfall können Sie sich diese Skripte über den etwas versteckten Bereich Tasks in dieser Seite anzeigen lassen. Nach dem aufklappen der Tasks klicken Sie dazu einfach auf den Link “Preview Installation Script”. In dem sich nun öffnenden Fenster sind alle Skripte einsehbar.

Jetzt müssen Sie den Wizzard nur noch bis zu Ende folgen und dabei die Installation abschließend bestätigen.

APEX Application Archive (Teil 3) – Automatisieren mit dem dbms_scheduler

Im dritten Teil der Beitragsserie wird es um die automatische Erzeugung von Anwendungsarchiven gehen. Nutzt man darüber hinaus noch die Metadaten des APEX -Repositories, so lässt sich der Vorgang auch noch etwas smarter gestalten.

Beitragsübersicht

 

 

 

 

 

Neue Funktionen zum 18ten – Oracle APEX 18.1 Early Adopter 2

Oracle “feiert” den 18 Geburtstag von Apex mit der Veröffentlichung der Version 18.1. Unter https://apexea.oracle.com können Sie diese Version ausprobieren. Die passenden Beta-Doku gibt es auch schon.

Darüber hinaus gibt es eine Vorabversion der Javascript-API-Dokumentation.

Die Version 18.1 erweitert die Funktionen der Version 5.2 in diversen Bereichen. In den Releasenotes listet Oracle  diese auf. Im Folgenden finden Sie eine erste Zusammenfassung interessanter Punkte und erste Impressionen dazu.

Oracle REST-Data Services

Im Bereich des REST-Services sind einige, gerade im Cloud Bereich nützliche Neuerungen dazu gekommen.

REST-Data Services

Über das PL/SQL Package APEX_EXEC lassen sich SQL-Queries und PL/SQL Blöcke in entfernten Oracle-Datenbanken aufrufen.

In den Shared Components können Sie jetzt die Referenzen der zu konsumierenden  REST-Services (Web Source Modules) verwalten. Diese Web-Sources sind als Datenquelle in verschiedenen Regionen und Items verwendbar. Durch die verbesserte Funktionalität können auch nicht Oracle-Datenbank Systeme in APEX- Anwendungen einfacher integriert werden.

App-Wizzard

Wie bereits in der Version 5.2 erkennbar war, wurde der App-Wizzard deutlich umgestaltet. Neben einem kompakteren Design, bietet er jetzt die Möglichkeit aus einer reichhaltigen Palette komplette Features wie den Zugriff auf die Benutzerverwaltung, Zugriffsstatistiken, eine (neue) Feedback-Funktion, usw. in eigene Anwendungen zu integrieren.

App-Wizzard APEX 18.1 EA
App-Wizzard APEX 18.1 EA

In der Anwendung finden sich diese dann in einem eigens erstellten Menüpunkt “Administration”.

APEX-APP Eigenschaften

JET Charts

Es wurden diverse neue JET Charts in die neue APEX Version eingebaut. Sie können sich eine wirklich schöne Übersicht der echt beachtlichen Chart-Type über die Packaged Application “Sample Charts” verschaffen.

Packaged Application: Sample Charts

Das neue APEX  18.1 bringt jetzt z.B. Pyramiden-Charts mit.

Oracle JET: Pyramid

Auch Box-Plots sind nun mit an Bord:

Oracle JET: Box Plot

Interaktives Grid

Auch bei dem Interaktiven Grid gibt es interessante Neuerungen.

Es wird nun des Herunterkopieren von Daten unterstützt.
Auch das Kopieren in die Zwischenablage (für Zeilen- oder Zellbereichsselektionen) ist jetzt möglich.

Interaktives Grid: Copy to Clipboard

 

 

Oracle Application Express – Quick SQL

Low Code Entwicklung von Datenmodellen mit Quick SQL, einer APEX Packaged Application.

Oracle bietet im Rahmen seiner Entwicklungsumgebung APEX sogenannte Packaged Applications. Bei diesen Anwendungen handelt es sich zum Einen um Bespielanwendungen zum Anderen aber auch um produktiv nutzbare Systeme.

Eine dieser Anwendungen ist Quick SQL.

Quick SQL einrichten

Die Installation von Quick SQL geht zügig von der Hand. In APEX angemeldet, klicken Sie auf den Menüpunkt Packed Application.

APEX Packaged Application (Mitgelieferte Anwendungen)

Nun können Sie in der sich öffnenden Übersicht die Packaged Application Quick SQL auswählen.

Quick SQL auswählen

Neben einer Kurzbeschreibung finden Sie auf der sich öffnenden Seite die Schaltfläche Installieren. Folgen Sie dem Installationsassistenten. Fertig.

Starten Sie die Anwendung das erste mal, können Sie sich mit dem bei der Installation gewählten Authentifizierungsverfahren an Quick SQL anmelden. Bei dem ersten Start, müssen Sie noch einige Parameter prüfen und bei Bedarf anpassen. Das stellt sich wie in folgender Abbildung  dar.

QuickSQL einrichten

Datenmodell mit Quick SQL entwerfen

Quick SQL gliedert sich in  zwei Bereiche. Links können Sie sehr kompakt Tabellen und ihre Relationen zueinander definieren.

Rechts wird bei jeder Änderung das zugehörige DDL (Data Definition Language) Skript erzeugt.

Benutzeroberfläche QuickSQL

Als einfaches Beispiel soll ein Datenmodell für ein Projektplanungstool dienen.

Tabellen werden einfach durch die Eingabe des Tabellennamens deklariert. Die zugehörigen Spalten rücken Sie einfach in den folgenden Zeilen ein.

Datenmodell Projektplanung

Quick SQL Eigenschaften

Schauen Sie sich das erzeugte DDL-Script näher an, so sehen Sie, dass eine ID-Spalte als künstlicher Schlüssel erzeugt wurde.  Diese Spalte wird über einen Trigger gefüllt. Auch gibt es mehrere Spalten, in denen Audit-Informationen gespeichert werden. Diese Spalten können beim Einsatz der Tabelle in einer APEX-Anwendung sogar mit den APEX-Account über einen Trigger belegt werden. Dies sind nur zwei Beispiele, die Ihnen Quick SQL bietet. Festlegen können Sie die Generierung dieser Funktionen in den Eigenschaften von Quick SQL.

Quick SQL Eigenschaften

Die Abbildung zeigt nur einen Teil der Möglichkeiten. So können Sie z.B. allen Tabellen einen Präfix voran stellen, Änderungen automatisch über einen Trigger in einer Audit-Tabelle protokollieren und noch vieles mehr erledigen lassen. Nehmen Sie sich Zeit, um diese Möglichkeiten in Gänze kennen zu lernen.

Relationen

Jedem Projekt sollen in dem gezeigten Beispiel n ToDos zugeordnet werden können. Also eine einfache 1:n Beziehung.

Um diese abhängige Tabelle zu erzeugen, geben Sie auf der Ebene der Spalten zunächst ToDos als neuen Tabellennamen ein. In den nächsten Zeilen rücken Sie die Spaltenbezeichner um eine weitere Ebene tiefer ein. Quick SQL erweitert das DDL-Script um die Tabelle ToDos und fügt eine Fremdschlüsselspalte project_id ein.  Neben der Spalte wird auch sofort ein foreign key constraint erzeugt.

Relationen erzeugen

Syntax and Examples

Nähere Informationen über die sehr umfangreichen Möglichkeiten von Quick SQL verbergen sich hinter dem Link Syntax and Examples in der Anwendung.

Fazit

Quick SQL bietet als Low Code Entwicklungstool durch die Nutzung von Konventionen eine enorme Geschwindigkeit bei der Erstellung eines Datenmodells. Auch für nicht APEX-Entwickler verdient diese Anwendung eine genauere Betrachtung.

 

Oracle Datenbank härten

Sehr viele Systeme im geschäftlichen Umfeld nutzt im Backend eine Datenbank. In diesem Beitrag möchte ich Ihnen einige Anregungen geben, wie Sie eine Oracle Datenbank sicher betreiben können.

In der Praxis eines Softwareentwicklers wird dessen Leistungsfähigkeit in der Regel an der Geschwindigkeit gemessen, mit der eine Anforderung umgesetzt wird. Dabei geht es meist um Funktionalität aber auch Aussehen einer Anwendung. Dem Komplex Sicherheit – ein zugegebener Maßen – lästiges und mitunter recht aufwendiges Thema wird meist eine nachgelagerte Rolle zugewiesen. Sicherheit wird immer dann aktuell, wenn es zu Problemen gekommen ist. Das müssen nicht immer spektakuläre Hacks sein, bei denen Kundendaten oder Kreditkarteninformationen entwendet werden. Bei fehlenden oder auch fehlerhaft vergebenen Berechtigungen können leicht Informationen in die falschen – wenn auch interne – Hände gelangen. Unterschätzen sie nicht den Wissensdurst der eigenen Leute.

Die erste Überlegung, die Sie zum Thema Sicherheit anstellen sollten, ist die Klassifizierung Ihrer Anwendung. Welche Verfügbarkeitsanforderungen muss das System gerecht werden? Wie brisant sind die Daten, die mit der Anwendung verwaltet werden? Ist die Anwendung für den internen Gebrauch gedacht, oder soll ein Zugriff über das Internet möglich sein? Werden personenbezogene Daten verarbeitet? Welche maximal tolerierbare Ausfallzeit können Sie in kauf nehmen? Sind gesetzliche Vorgaben und staatliche Vorschriften (Compliance) zu beachten? Welche Kosten und welcher Image-Verlust entstehen durch Kompromittierung?

Betrachten Sie immer das Gesamtsystem

Eine datenbankgestütze Anwendung benötigt mindestens einen Server, eine Datenbank und ein Frontend. Diese Komponenten werden in einer IT-Infrastruktur aus Netzwerk, Domaine, usw. betrieben.  Um ein sicheres Gesamtsystem zu erhalten, ist es notwendig alle beteiligten Komponenten zu betrachten und abzusichern.

Zu einer genaueren Risikoanalyse möchte ich Sie an dieser Stelle auf den IT-Grundschutz-Katalog des Bundesamtes für Sicherheit in der Informationstechnik aufmerksam machen. Sie finden auf der Web-Seite https://www.bsi.bund.de umfangreiche Informationen rund um das Thema Sicherheit.

Je nach Sicherheitsbedürfnis des Systems müssen Sie verschiedene Maßnahmen ergreifen.

Server härten

Alle beteiligten Server eines Gesamtsystems – seien es Application Server, Web Server oder Datenbank-Server müssen gehärtet werden. Da eine Abhandlung dazu ganze Bücher füllen kann und natürlich auch von den verwendeten Systemen abhängt, beschränke ich mich hier auf eine Auflistung wichtiger Punkte und Schritte, die hier zu beachten sind.

  • Sie sollten immer eine Neuinstallation des Systems durchführen, wobei Sie ausschließlich originale Installationsmedien verwenden müssen. Widmen Sie keine bestehenden Server (Installationen) um.
  • Legen Sie sich eine Patch-Strategie fest. Automatisches Patchen ist nur bedingt zu empfehlen, da komplexere Systeme erst getestet werden müssen. Hier bieten sich auch automatische Testverfahren (z. B. Unit-Tests) an.
  • Nicht benötigte Dienste/Prozesse stellen ein unnötiges Gefahrenpotenzial dar. Betreiben Sie nur die Dienste, die auch wirklich benötigt werden. Dabei sollten Sie darauf achten, diese mit möglichst geringen Privilegien zu betreiben.
  • Verwenden Sie keine administrativen Accounts um Dienste zu betreiben. Jeder Dienst ist über einen eigenen User mit eigenem Kennwort auszuführen.
  • Löschen Sie nicht benötigten Accounts.
  • Verwenden Sie starke Passwörter, wobei Sie deren Komplexität über entsprechende Policies erzwingen sollten. Kennwörter für Benutzer sind regelmäßig zu ändern. Systemkennwörter sind entsprechend lang und komplex anzulegen. Überschreiben Sie jedes Default-Passwort. Auflistungen gängiger Accounts sind ganz einfach im Internet zu erhalten.
  • Beschränken Sie die Systemressourcen für Daten, die von außen in das System hereingetragen werden können. Dies gilt z. B. für Mails, hoch ladbare Dateien aber auch von Log-Files.
  • Prüfen Sie regelmäßig Log- und Tracefiles sowie Event-Log Einträge.
  • Verwenden Sie einen Virenscanner.
  • Lassen Sie nur die notwendige Kommunikation mit dem System zu. Sichern Sie den Zugriff über eine Firewall.
  • Begrenzen Sie administrative Zugriffe auf die benötigten Services. Lassen Sie den Zugriff nur von ausgewählten Rechnern (Admin-Konsolen) zu und begrenzen Sie den Personenkreis mit administrativen Rechten.
  • Beschränken Sie den physischen Zugriff auf dass System (Rechenzentrum abschließen).
  • Schützen sie das System mit einem BIOS-Passwort und evtl. mit einem Passwort für den Boot loader. Ändern Sie die Bootreihenfolge so, dass das System nicht von externen Medien gebootet werden kann.
  • Verwenden Sie sichere Dateisysteme und verschlüsseln Sie bei Bedarf auch die Festplatte.
  • Halten Sie die Systemdokumentation auf einem separaten System, so ersparen Sie es sich entsprechende Reader zu installieren und diese aktuell zu halten. Im Fehlerfall nützt Ihnen die beste Dokumentation nichts, wenn Sie nicht darauf zugreifen können.
  • usw. …

Härten der Datenbank

Haben Sie es zu einer sicheren Basis für die benötigten Server gebracht, können Sie sich um die Einrichtung der Datenbank kümmern. Den Grundsatz des Härtens eines Systems finden Sie auch hier wieder. Beschränken Sie sich auf das Notwendige und halten Sie das System aktuell.

Datenbankversion und Patchen

Oracle bietet für eine gewisse Zeit, Updates und Sicherheits-Patches für seine supporteten Produkte. Aber nach gewisser Zeit werden ältere Versionen aus dem Support genommen. Sicherheitslücken werden dann nicht mehr geschlossen.

Setzen Sie also für Ihre Systeme immer eine supportete möglichst aktuelle Datenbankversion ein.

Oracle veröffentlicht regelmäßig sogenannte Critical Patch Updates (CPU). Diese fixen die bis dahin bekannten Sicherheitslücken. Sie können sich auch proaktiv von Oracle per Mail über sicherheitsrelevante Themen benachrichtigen lassen. Sie sollten diese nach Prüfung auf einem Testsystem, möglichst zeitnah einspielen.

Vereinbaren Sie nach Möglichkeit mit den Nutzern Ihrer Anwendungen bestimmte Wartungsfenster, in denen Sie oder der entsprechende DBA diese Arbeiten erledigen kann.

Default-Accounts

Eine Oracle Standard-Installation bring diverse Accounts mit auf die mittels Default-Passwort zugegriffen werden kann. Recherchieren Sie mal im Internet danach, so finden Sie verschiedene Listen dieser Accounts. Es gibt diverse Scanner mit denen Sie eine Datenbank auf diese Benutzer prüfen können. Sie sollten – dem Minimalprinzip folgende – nach Möglichkeit die Accounts entfernen. Wenn das nicht möglich ist, können Sie noch den User deaktivieren oder mit einem unbekannten sicheren Passwort schützen.

Folgende Auflistung zeigt die gängigsten Benutzer und eine Handlungsempfehlung, wie mit Ihnen umzugehen ist.

Benutzer

Password

Nutzung

Löschen möglich

Passwort ändern

SYS

CHANGE_ON_INSTALL ODER INTERNAL

Oracle Data Dictionary

Nein

Ja

SYSTEM

MANAGER

Standard DBA

Nein

Ja

SYSMAN

CHANGE_ON_INSTALL

Administration aus Enterprise Manager

Nein

Ja

OUTLN

OUTLN

Administration der Tuning-Statistik

Nein

Ja

SCOTT

TIGER

Beispiele

Ja

Ja

ADAMS

WOOD

Beispiele

Ja

Ja

JONES

STEEL

Beispiele

Ja

Ja

CLARK

CLOTH

Beispiele

Ja

Ja

BLAKE

PAPER

Beispiele

Ja

Ja

HR

HR

Beispiele

Ja

Ja

OE

OE

Beispiele

Ja

Ja

SH

SH

Beispiele

Ja

Ja

DBSNMP

DBSNMP

Enterprise Manager

Nein

Ja

CTXSYS

CTXSYS

Text-Extender-Funktion

Nein

Ja

DIP

DIP

Administration der Directory Integration Platform (DIP)

Ja über

“oidprovtool”

Wenn DIP nicht mehr benötigt.

Ja über

“oidprovtool”

DMSYS

DMSYS

Data-Mining

Ja

Ja

EXFSYS

EXFSYS

Expression-Filter-Indizierung

Ja mittels catnoexf.sql

Ja

LBACSYS

LBACSYS

Label Based Access

Control owner

Ja

CSMIG

Database

Character Set Migration

Utility

Ja

Ja

Eine Übersicht der in der Datenbank vorhandenen Benutzer verschaffen Sie sich am besten über ein Admin- bzw. Datenbankentwicklungswerkzeug. Mit dem SQL-Developer können Sie sich die entsprechenden Benutzer anzeigen lassen.

Sie können Sich aber auch über den dba-View (select * from dba_users ) die entsprechenden Accounts auflisten lassen.

Seit Oracle11g können Sie in regelmäßigen Abständen über die dba-View DBA_USERS_WITH_DEFPWD prüfen, ob in Ihrer Datenbank User mit Standardpasswörten vorhanden sind.

Der SQL Developer bietet Ihnen auch die Möglichkeit benutze zu sperren, zu löschen und das Passwort zu ändern. Die folgende Abbildung zeigt, wie man den Benutzer HR sperren kann.

HR Account sperren

Über SQLPLUS lässt sich das über den Befehl ALTER USER “HR” PASSWORD EXPIRE ACCOUNT LOCK ; erledigen.

Mit dem Befehl alter user <Benutzername> identified by <Passwort>; können Sie einem Account ein neues Kennwort geben.

Der Befehl drop user username cascade; entfernt den Benutzer aus der Datenbank. Der Postfix cascade sorgt dafür, dass auch alle Objekte (Tabellen, Packages, …) welche sich im Besitz dieses Users befanden ebenfalls entfernt werden.

Berechtigungen

Haben Sie nun alle überflüssigen Accounts gesichert, so können Sie sich den Berechtigungen der verbliebenen einmal näher ansehen.

Grundsätzlich gilt – gehen Sie sparsam mit den Berechtigungen um.

Oracle unterscheidet verschiedene Arten von Rechten.

Über Systemberechtigungen wird in Oracle Datenbanken gesteuert, welcher User welche DDL-Befehle ausführen darf. Eine Übersicht der aktuell erteilten Privilegien liefert Ihnen folgendes Statement.

select * from dba_sys_privs;

Seien Sie vor allem sehr sparsam mit der Vergabe von „ANY“ Privilegien.

select * from dba_sys_privs where privilege like ‘%ANY%’

Objektberechtigungen steuern, welche DML-Befehle ein User für ein bestimmtes Datenbank-Objekt ausführen darf.

select * from dba_tab_privs; zeigt alle vergebenen Objektberechtigungen.

Noch granularer lassen sich die Zugriffe über sogenannte Spaltenberechtigungen vergeben.

select * from dba_col_privs;

Rechte warden über den Befehl GRANT <Recht> TO <Benutzer> ergeben und mit REVOKE <Recht> FROM <Benutzer> entzogen.

Rechte können auch zur Gruppen – sogenannten Rollen – zusammengefasst werden.

select * from role_sys_privs;

select * from role_tab_privs;

Diese Rollen werden dann wieder als Recht einem User zugewiesen.

Rollen wiederum können auch anderen Rollen zugeordnet werden, so das eine verschachtelte Struktur entsteht. Eine Übersicht liefert

select * from role_role_privs; .

Um nun zu ermitteln, welcher Benutzer welche Rolle(n) besitzt, führen sie folgende Anweisung aus. select * from dba_role_privs

In der Praxis spielt oft die Zeit für eine Lösung eine erhebliche Rolle, wodurch es recht häufig dazu kommt, dass einem User zu viele Rechte oft über mächtige Rollen (DBA) zugewiesen werden. Diese Rechte ermächtigen den Benutzer dann schnell mit seiner Arbeit fortfahren zu können, stellen aber ein erhebliches Risiko dar.

Überprüfen Sie regelmäßig die Berechtigungen und schränken Sie diese auf das Nötige ein.

select * from dba_role_privs where granted_role =’DBA’

Optionen und Features

Oracle bietet für seine Datenbanken ein sehr umfassendes Spektrum an Funktionen. Viele diese Möglichkeiten werden zu sogenannten Optionen zusammengefasst, die dann meist auch lizenzrechtlich zusätzlich betrachtet werden müssen. Auch wenn die Frage der Lizenzierung geklärt ist, sollten Sie sich auf die notwendigen Optionen für Ihr System beschränken. Jede Option bietet eine potenzielle Schwachstelle und muss bei Nutzung natürlich auch entsprechend in die Patch-Strategie mit einbezogen werden.

Die View V$OPTION (select * from V$OPTION) liefert Ihnen einen Überblick der Installierten Optionen und Features. Features sind Bestandteile der entsprechenden Datenbank-Version, während Optionen auch noch manuell hinzugefügt werden können. Über select * from DBA_REGISTRY können Sie alle installierten Optionen sichten.

Wenn Sie sich unsicher sind, welche Features von Ihrer Anwendung verwendet werden, können Sie sich über select * from DBA_FEATURE_USAGE_STATISTICS das entsprechende Nutzungsverhalten ansehen.

Im Verzeichnis $ORACLE_HOME/rdbms/admin finden Sie für die meisten Fälle die entsprechenden Skripte zum Deinstallieren. Hier hilft die Lektüre der entsprechenden Systembeschreibungen von Oracle.

Gesicherte Kommunikation – Oracle LISTENER

Um mit einer Oracle Datenbank über ein Netzwerk in Kontakt treten zu können, wird auf Server-Seite der sogenannte LISTENER benötigt. Der LISTENER ist ein Prozess, welcher auf einem TCP/IP Port – Default ist hier 1521 – lauscht und bei Anforderung durch den Client eine Verbindung zur Datenbank aufbaut. Die Konfiguration des LISTNERS erfolgt über die Datei listener.ora, welche Sie im Verzeichnis $ORACLE_HOME/network/admin finden.

01 […]

02 LISTENER =

03 (DESCRIPTION_LIST =

04 (DESCRIPTION =

05 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

06 (ADDRESS=(PROTOCOL=TCP)(HOST=<SERVER_NAME>)

07 (PORT= 1521))

08 )

09 )

10

11 DEFAULT_SERVICE_LISTENER = (XE)

12 […]

LISTENER.ORA ohne Anpassungen

Der LISTENER bietet also einen entsprechenden Angriffspunkt für einen Hacker. Der erste Schritt um es einem Angreifer zu erschweren, sich diesen Prozess zunutze zu machen ist es, den vorgegebenen Namen LISTENER zu ändern. Tragen Sie dazu wie in Zeile 02 des folgenden Konfigurations-Files apxlsn ein.

Darüber hinaus sollte niemals der Standard-Port 1521 verwendet werden. Hier können Sie einfach einen freien Port zwischen 1024 und 65535 wählen. In diesem Beispiel lautet der Port 2012.

Oracle Datenbanken bieten die Möglichkeit, externe Prozeduren aus Klassenbibliotheken (*.DLL) über den LISTENER zugänglich zu machen. Diese können dann per PL/SQL verwendet werden. Erhält nun ein Angreifer Zugriff auf die Datenbank, könnte er über diesem Weg direkt auf den Server zugreifen. Dies geschieht dann mit den Berechtigungen der Datenbankprozesse. Können Sie in Ihrer Anwendung auf diese Möglichkeit verzichten, so sollten Sie die Zeile 05 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) aus der Konfiguration entfernen.

01 […]

02 apxlsn =

03 (DESCRIPTION_LIST =

04 (DESCRIPTION =

05 (ADDRESS = (PROTOCOL = TCP)(HOST = <SERVER_NAME>)

06 (PORT = 2012))

07 )

08 )

09

10 DEFAULT_SERVICE_LISTENER = (XE)

11 CONNECTION_RATE_apxlsn = 5

12 LOCAL_OS_AUTHENTICATION_apxlsn = ON

13 […]

Gehärtete Version der LISTENER.ORA

In Zeile 11 wird über das setzten der connection_rate festgelegt, dass maximal 4 Verbindungen pro Sekunde zur Datenbank neu aufgebaut werden dürfen. Hiermit können Sie einem DoS (Denial of Service)–Angriff entgegenwirken.

Über die Zeile 12 wird verhindert, dass der LISTENER remote beendet werden kann. Ein DBA muss sich also mit entsprechenden Rechten direkt am Server anmelden, um dies zu bewerkstelligen. Also richten Sie entsprechende Zugangsbeschränkungen auf Seite des Betriebssystems ein.

Speichern Sie die Änderungen und führen, dass über die Kommandozeile den Befehl lsnrctl stop und anschließend lsnrctl start  aus. Hierdurch wird der vorhandene LISTENER beendet und die angepasste Version gestartet. Unter Windows finden Sie anschließend einen neuen Dienst mit dem Namen des LISTENERs.

Den aktuellen Status des LISTENERs können Sie sich mit lsnrctl stat <name> ansehen.

Um die Kommunikation zwischen dem LISTENR und der Datenbank korrekt wiederherzustellen, müssen Sie noch über SQLPLUS direkt auf dem Server folgendes Statement absetzen. SQLPLUS können Sie wie folgt starten: sqlplus system as sysdba. Führen Sie dann folgende Anweisung aus.

ALTER SYSTEM SET local_listener = ‘(address=(protocol=tcp)(host=<SERVER_NAME>)(port=2012))’ SCOPE=both;

Im nächsten Schritt geht es nun daran, den Zugriff auf den LISTENER und damit auf die Datenbank auf einen exklusiven Kreis einzuschränken.

Neben der Datei listener.ora finden Sie im Verzeichnis $ORACLE_HOME/network/admin eine weitere Konfigurationsdatei namens sqlnet.ora. Diese Datei finden Sie auch auf der Client-Seite.

01 SQLNET.AUTHENTICATION_SERVICES = (NONE)

02 SQLNET.INBOUND_CONNECT_TIMEOUT = 6

03

04 TCP.VALIDNODE_CHECKING = YES

05 TCP.INVITED_NODES = <IP_WEB_SERVER>, 192.168.178.*

06

07

08 sqlnet.encryption_server = required

09 sqlnet.encryption_types_server = AES256

10 sqlnet.encryption_client = required

11 sqlnet.encryption_types_client = AES256

12

13 sqlnet.crypto_checksum_server = required

14 sqlnet.crypto_checksum _types_server = MD5,SHA1

15 sqlnet.crypto_checksum_client = required

16 sqlnet.crypto_checksum _types_client = MD5,SHA1

Gehärtete Version der SQLNET.ORA auf dem Server

In Zeile 01 sollten Sie den Standardeintrag SQLNET.AUTHENTICATION_SERVICES = (NTS) auf NONE setzen. Sonst ist es einem User, welcher zugriff auf das Betriebssystem hat und Mitglied in der lokalen Benutzergruppe ORA_DBA ist, möglich sich über sqlplus / as sysdba ohne Angabe eine Passwortes an der Datenbank mit DBA-Rechten anmelden kann.

Durch den Eintrag in Zeile 02 wird der LISTERNER dazu gebracht, dass er maximal sechs Sekunden für den Aufbau einer Verbindung für einen Client zu Datenbank aufwenden soll. In Kombination mit dem Parameter CONNECTION_RATE_apxlsn = 5 aus der LISTENER.ORA wird dies DoS-Attacken entgegen.

Über die Zeilen 04,05 beschränken Sie den Zugriff auf die Datenbank auf die Clients, welche Sie mithilfe des Parameters TCP.INVITED_NODES festlegen können. In dem eingangs geschilderten Konstrukt, sollte es genügen den Zugriff auf den Web-Server und die internen Clients zu beschränken.

Ein weiterer Schachpunkt bei der Normalkonfiguration ist der Netzwerkverkehr. Daten und Befehle werden unverschlüsselt übertragen, sodass über einen einfachen Netzwerk-Sniffer diese leicht abgefangen werde können. Dies umfasst u.a. auch die Benutzernamen und Passwörter, welche zur Anmeldung an der Datenbank übertragen werden müssen. Abhilfe können Sie durch die Nutzung vorn verschiedenen Verschlüsselungsverfahren schaffen. Durch die Zeilen 08/09 wird auf Serverseite, dass die Kommunikation mit AES256 verschlüsselt wird. Auf Clientseite muss ebenfalls die Datei sqlnet.ora wie auch hier in Zeile 10/11 angegeben werden, da sonst keine Verbindung zustande kommen kann. Die Zeilen 10 und 11 sollten Sie auch auf dem Datenbankserver eintragen, da eine Datenbank – z. B. über Datenbanklinks – auch als Client fungiert. Oracle bietet folgende Verschlüsselungsverfahren an.

  • AES256: Advanced Encryption Standard (AES), Nachfolger von DES und 3DES, basiert auf dem Rijndael-Algorithmus.
  • AES192: Advanced Encryption Standard (AES), mit einer Blockgröße von 192 bits.
  • AES128: Advanced Encryption Standard (AES), mit einer Blockgröße von 128 bits.
  • RC4_256, RC4_128, RC4_40: Rivest Cipher 4 (RC4), Stream-Verschlüsselung, wird z. B. bei folgenden Protokollen eingesetzt HTTPS, SSH 1 und WEP bzw. WPA.
  • 3DES168, 3DES112: Triple Data Encryption Standard (TDES) , nicht mehr sicher genug
  • DES, DES40: Data Encryption Standard (DES) 56-bit Schlüssel, nicht mehr sicher genug

In Zeile 13 bis 16 wird noch ein Verfahren festgelegt, über welches die übertragenen Daten signiert werden. Hierdurch können Sie einem Man-in-the-middle-Angriff (MITM-Angriff) entgegenwirken, wobei ein potenzieller Angreifer die übertragenen Datenpakete abfangen und manipuliert weiterleiten möchte.

Jetzt müssen Sie nur noch die tnsnames.ora auf dem Server und auf allen Clients anpassen, de auf die Datenbank zugreifen sollen. Die notwendigen Modifikationen stellen sich recht moderat dar. Ändern Sie einfach den Port auf 2012 und speichern Sie die Datei in dem Verzeichnis $ORACLE_HOME/network/admin.

01 XE =

02 (DESCRIPTION =

03 (ADDRESS = (PROTOCOL = TCP)(HOST = <SERVER_NAME>)

04 (PORT = 2012))

05 (CONNECT_DATA =

06 (SERVER = DEDICATED)

07 (SERVICE_NAME = XE)

08 )

09 )

Beschränken Sie über das Betriebssystem den Zugriff auf das Verzeichnis $ORACLE_HOME und seine untergeordneten Ordner auf einen eingeschränkten Kreis von Administratoren.

Achtung! Vergessen Sie nicht den technischen User, über den die Datenbankinstanz ausgeführt wird ebenfalls zu berechtigen.

Je nach Konfiguration des SQL-Developers müssen Sie auch hier den neuen Port für den Verbindungsaufbau berücksichtigen.

Autor: Ralf Beckmann