Skip to content

Oracle Container Datenbank

Seit einiger Zeit gibt es eine Neuauflage des SQL Datenbankklassikers von Oracle. Unter der Bezeichnung Oracle 12c (C wie Cloud) und der internen Versionsnummer 12.1 stehen einige neue Funktionen bereit.

Multitenant Architectur (CDB) 

Mit der 12c Release hat Oracle eine neue Multitenant Architektur eingeführt, die es erlaubt eigenständig verwaltbare Datenbanken in einer gemeinsamen Datenbankinstanz zu betreiben. Damit verbunden sind einige neue Features wie der Transport der gesamten Datenbank (nicht nur einzelner Tablespaces) von einer Instanz in eine andere. Es erlaubt ebenfalls das bereitstellen von Clones der Datenbank für Entwicklung und QA. Das Hauptargument ist jedoch die Selbstverwaltung durch beschränken der Sichtbarkeit der Datenbankobjekte auf den jeweiligen Untermieter - alles was man für die Konsolidierung von Datenbanken so braucht.

Damit zieht Oracle mit dem Microsoft SQL Server gleich, bei dem Datenbanken ja schon länger eigenständige Objekte (mit eigenen Usern) waren. Allerdings wirkt es wie gewohnt bei Oracle etwas aufgesetzter. So gibt es die normalen Systemuser die in allen PDB gelten (z.B. DBSNMP) aber für weitere User empfiehlt Oracle eine Namenskonvention "C##USERNAME" für gemeinsam benutzte (Common) User.

Meiner Erfahrung nach heißt es Vorsicht beim Umstieg auf 12c (wenn die CDB aktiviert ist). Die neue Multitenant Architektur ist zwar praktisch, DBA sind es aber nicht gewöhnt. So ist es z.B. wichtig vorhandene User+Rollen Definitionsscripte entweder im richtigen Container aufzurufen. Entweder man benutzt einen Common DB User und ändert den Session Context:

ALTER SESSION SET CONTAINER = 'PDBTEST'; 

Dann muss man sich aber auch regelmäßig vergewissern, welches die gerade aktive PDB ist:

SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;

Oder man legt entsprechende Administrationuser in jeder PDB separat an. Dazu muss man dann auch einen TNS Connect String verwenden der auf einen Datenbank Service verweist, welcher der jeweiligen PDB zugeordnet ist. Wenn eine neue PDB angelegt wurde, wird auch ein neuer Service mit PDB Name + DB_Domain registriert:

> SELECT NAME,PDB,CON_ID from GV$SERVICES;
NAME                         PDB                  CON_ID
---------------------- -------------------------- ----------
pdbtest.eckenfels.net   PDBTEST                   4
pdborcl.eckenfels.net   PDBORCL                   3
orcl.eckenfels.net      CDB$ROOT                  1
SYS$BACKGROUND          CDB$ROOT                  1
SYS$USERS               CDB$ROOT                  1  

Die Arbeit mit CDBs macht Oracle nicht gerade einfach. Wenn man eine neue Container Datenbank mit dem Datebank Konfigurationsassistent (oder CREATE Statement) anlegt, so wird diese Datenbank bei einem Instanzstart nicht automatisch geöffnet. Man muss sich also mit einem Systemtrigger behelfen. Das hätte man wirklich komfortabler lösen können (und wenn Oracle in einer nächsten Version eine Lösung dafür anbietet wird man sich mit den Triggern wieder beschäftigen müssen).

Das ist übrigens ein sehr ärgerliches Problem, der Oracle SQL Developer gibt zwar in der Console eine entsprechende Fehlermeldung aus:

> ALTER SESSION SET container = PDBORCL;
session SET geändert.
> CREATE ROLE "NORMAL_USER";
Fehler beim Start in Zeile 1 in Befehl:
CREATE ROLE "NORMAL_USER"
Fehler bei Befehlszeile:1 Spalte:1
Fehlerbericht:
SQL-Fehler: ORA-01109: Datenbank nicht geöffnet
01109. 00000 -  "database not open"
*Cause:    A command was attempted that requires the database to be open.
*Action:   Open the database and try the command again
> ALTER PLUGGABLE DATABASE PDBORCL OPEN READ WRITE;
pluggable DATABASE geändert.
> CREATE ROLE "NORMAL_USER";
role "NORMAL_USER" erstellt.

Wenn man das ganze allerdings im SQL Developer macht, so wird die Meldung durch ein Fehler Pop-Up mit unverständlicher Fehlermeldung verdeckt:

Bei der Ausführung des angeforderten Vorgangs ist ein Fehler aufgetreten:
ORA-06550: Zeile 3, Spalte 35:
PLS-00201: Bezeichner 'DBMS_SQL.OPEN_CURSOR' muss deklariert werden
ORA-06550: Zeile 3, Spalte 19:
PL/SQL: Item ignored
ORA-06550: Zeile 13, Spalte 26:
PLS-00320: Die Typ-Deklaration dieses Ausdruckes ist unvollständig oder fehlerhaft
ORA-06550: Zeile 13, Spalte 9:
PL/SQL: Statement ignored
ORA-06550: Zeile 16, Spalte 17:
PLS-00201: Bezeichner 'DBMS_SQL.LAST_ERROR_POSITION' muss deklariert werden
ORA-06550: Zeile 16, Spalte 5:
PL/SQL: Statement ignored
ORA-06550: Zeile 18, Spalte 34:
PLS-00320: Die Typ-Deklaration dieses Ausdruckes ist unvollständig oder fehlerhaft
ORA-06550: Zeile 18, Spalte 11:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Herstellercode 6550

Eine gute Zusammenfassung aller CDB spezifischen Punkte findet sich im Oracle Database Administrator's Guide im Kapitel 40 Administering a CDB with SQL*Plus

Enterprise Manager Database Express

Eine neue Funktion ist das Enterprise Manager Database Express Modul. Statt einen abgespeckten Enterprise Manager (Database Control) mit eigenem Prozess und Ablaufumgebung zu installieren kann man das in der Datenbank eingebaute Express Modul verwenden. Dieses basiert auf der AppEx Infrastruktur. Das als Performance Hub getaufte Dashboard profitiert dann auch mit den Offline abspeicherbaren HTML Reports. Ansonsten ist die Funktionalität allerdings sehr eingeschränkt. Es gibt z.B. keine DDL Funktionen zum Anlegen oder verwalten von Tabellen.

EM DB Express unterstützt die Verwendung von Plugable Databases dahingehend, dass man für jeden Tenant ein eigener http oder https Listener (Port) anlegen kann. Wenn man sich dann nicht im Root Container anmeldet, so sieht man dann erst die jeweils in der PDB angelegten User (Und leider nur dann).

> select dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
------------
5500
> alter session set container = PDBTEST;
> select dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
------------
> exec DBMS_XDB_CONFIG.SETHTTPSPORT(5502);
> select dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
------------
5502

Wenn man sich mit einer PDB verbunden hat (in meinem Beispiel https://server:5502/em/) so wird in der Titelzeile des EM Express links oben nicht nur die SID, sondern auch den Namen der PDB angezeigt. Ebenso enthält die Userliste nicht mehr (nur) die Gemeinsamen User:

Das Jahr der Kryptografie

Ich habe bewusst keinen Jahresrückblick verfasst, jedoch hat sich einiges im letzten Jahr einiges entwickelt, das ich hier kommentieren möchte: die von Edward Snowden geleakten Dokumente über das Tun des us-amerikanischen NSA und des britischen GCHQ brachten neue Spekulationen über Methoden und Fähigkeiten hervor.

Besonders im Bereich der Kryptografie gibt es ja schon seit Jahren Spekulationen welche Möglichkeiten der Mathematikerstab und die Rechnerparks der NSA haben (oder welche Erkenntnisse die der Wissenschaft vorenthalten werden bekannt sind). Daran hat sich bisher noch nicht viel geändert, aber es kam eine neue Dimension dazu: Die Unterwanderung von Standardisierungsverfahren sowie die Beeinflussung von Software- und Hardwareherstellern.

Aktuell im Fokus steht dabei RSA Security LLC - laut Reuters Berichten gab es einen Zusammenhang zwischen Zahlungen der NSA und der Default Verwendung des ECPRNG Zufallsgenerators in der RSA BSafe library. Der Generator war in die Kritik gekommen, weil bei der Verwendung von im Standard vorgegebenen Punktkoordinaten es nicht ausgeschlossen ist, dass die Zahlenfolge vorhersehbar ist (für den Ersteller der Parameter). Diese Kritik ist schon länger bekannt, trotzdem hat RSA Security den Generator nicht nur implementiert und als default eingebaut, und auch nicht wieder zurückgerufen.

Von RSA Security (das inzwischen zu EMC gehört) erwartet man nicht wirklich transparentes vorgehen. Im Falle der SecurID Hardware Token hat RSA Security auch nur sehr zögerlich auf bekanntgewordene Probleme reagiert und war nie sehr transparent mit den eigentlich eingesetzten Algorithmen. Von daher hat das im Fall der RSA BSafe library nicht wirklich verwundert dass es immer noch kein klares Statement zu den Zahlungen und der Bewertung des Dual_EC_DRBG gibt. Update: Habe vergessen zu erwähnen dass auch Mikko Hypponen (Chief Research Officer bei f-secure) eine Meinung zum Verhalten von RSA hat, und seine Rede auf der RSA Conference abgesagt hat (Open Letter). Besonders brisant in dem Zusammenhang ist übrigens der Titel seines geplanten Vortrags: Governments as Malware Authors.

Schaut man sich allerdings die Historie etwas näher an (und dazu eignet sich besonders gut das Blog Post von Matthew Green) so kann man erkennen dass die Eigenschaften des Generators schon sehr früh bekannt waren (und sogar in einer Patentanmeldung erwähnt wurden). Die Mitglieder des Standardisierungsgremiums der ANSI & NIST sowie Mitarbeiter von RSA Security  mussten gewusst haben, dass eine Vorgabe von Parametern für den Generator sehr kritisch sind und nicht verwendet werden sollten. Das Unternehmen das die meisten Patente im Bereich der Eliptic Curve Cryptografie hält (und eben auch das Patent auf ECRNG) ist Certicom. Ich denke wir werden im Laufe dieses Jahres noch eine Diskussion über das Verhältniss zur NSA bekommen.

Das ist insbesondere deswegen wichtig, weil 2014 das Jahr ist in dem ECC eine weite Verbreitung erfahren wird. Viele neuen Protokolle setzen auf die effiziente Krypto (die mit kleineren Schlüsseln auskommt und damit besonders für Mobile Computing oder IoT geeignet ist). Darunter z.B. Bernsteins NaCl (gesprochen: Salt) oder die iOS Filesystem Verschlüsselung. Außerdem ändert sich die Einschätzung was im Bereich RSA Kryptosystem (Faktorisierungsproblem, Post-Quantum Cryptography) als sichere Schlüssellängen angesehen wird. Inzwischen gibt es schon Empfehlungen (ENISA) die auf RSA Schlüssellängen bis zu 16k bit hinweisen. In dieser Größenordnung wird RSA in vielen Einsatzgebieten unmöglich zu verwenden - auch hier wendet man sich dann eher ECC zu.

Deswegen muss jetzt auf den Tisch welche Schwächen eventuell im Design schon absichtlich eingebaut wurden. Tanja Lange und DJB haben in einem Vortrag bereits das Design und diverse Implementierungen der NIST standardisierten (und teilweise von NSA angestellten entworfenen) ECC Kurven kritisiert, und wir werden hier noch einiges zu hören bekommen.