Vorhersagen sind schwierig, besonders wenn sie die Zukunft betreffen. - Niels Bohr, Physiker

Mai 2018

Rekursionstiefe für Oracle PL/SQL beträgt 50. Für Prototypen kann man Rekursionen durchaus nutzen. Produktiv sollte man darauf verzichten.Sind langsamer und kosten Stack!

PGP -und S-MIME Bug : https://www.heise.de/security/artikel/PGP-und-S-MIME-So-funktioniert-Efail-4048873.html

Oracle Bug bis 12.2:

Cursor mit Parameter :

Select distinct ... where CursorParam+2 = ...

Wenn  im Cursor SQL mit dem Parameter gerechnet wird kommen einige nicht deterministische Null values.
Die Datenbank verschluckt regelrecht gültige not null Ergebnisse: Wrong ResultSet!

Simpler Workaround: Rechnen mit CursorParam erst beim Öffnen

for irec in c1( Param +2) 
...

und es klappt...


Januar - April 2018

Sybase ASE -> Oracle 12.2 Migrationen und die Besonderheiten dieser speziellen Datenbank erfordern fast wissenschaftliche Vorgehensweisen. Beispiel: Update ASE erlaubt N True Results pro Condition Key's! Cut bei varchar insert/updates die länger sind als erlaubt. Trigger arbeiten mit virtuellen NEW /OLD Value Tables, die man tunlichst nachbilden sollte! Die implizite Sortierung with Nulls steht der von Oracle genau entgegengesetzt gegenüber. usw.

Man gewinnt den Eindruck die ASE ist eine Datenbank die höflich formuliert fehlertolerant gegenüber Codd/Date implementiert wurde. Das allein wäre nicht so tragisch, wenn sich dieser Ansatz nicht auf einige Anwendungsprogrammierer durchschlagen würde. Verschachtelte Blöcke mit Null Exeception zum Beispiel. Hauptsache keine Exceptions und Haken dran. - Schade...

Meine persönliche Vorstellung über die Sybase ASE Entwicklung: Nach der Fertigstellung der durchaus brauchbarenTransaction Engine und der Implementierung des Select Befehls haben sich die Entwickler vor lauter Freude einige Flaschen Whisky gekönnt und dummerweise einfach weiter programmiert. 

Dezember 2017

Interessanten Oracle IOT / Nested Table Ansatz mit Verschachtelung auf Level 2 realisiert. Mit  vergleichsweise wenig Code lassen sich z.B. Master Detail Relationen in einer IOT abbilden. Implizite Joins sparen Code und besonders Daten mit Clusterpotential  eignen sich hierfür. Da merkt man wieder einmal mit welchen Scheuklappen man Jahrzehnte seine normalisierten Datenmodelle erstellt hat und das relationale Datenbanken durchaus sinnvolle Features haben. 

November 2017

Weiterführung der Entwicklung des Transparent JDBC Gateway für Oracle ( TJG-O ) an In-Memory Datenbanken wie
z.B. SAP HANA.

Oktober 2017

Freue mich auf die nächsten Herausforderungen. Bis jetzt konnte ich bei jedem Oracle Performance Problem eine deutliche Verbesserung erreichen.Hoffe, das ich zeitnah erkenne, wenn es mir nicht möglich ist.

September 2016

Umsetzung des ersten Webcast für das Transparent JDBC Gateway für Oracle ( TJG-O ).

Knobelaufgabe:

Ein komplettes SQL Select Statement beim ersten Aufruf über das Gateway zu schicken ist nicht das Problem,
die dynamischen Rückgabewerte auch nicht. Wie man jedoch die Rückgabewerte einer View als Wrapper auf eine dyn. Tablefunction bei der ersten Abfrage ändert, ist die härteste Denksportaufgabe im Bereich Oracle Datenbanken,
die mir je untergekommen ist.
 
Die Profi Lösung sollte ohne SQL Translation Framework arbeiten damit 11g noch mit im Boot ist. 

Wenn jemand eine Idee hat, nur zu und bitte melden.

Anyway ...

Eine 'arme Leute' Lösung könnte für 12c mit dem SQL Translation Framework erfolgen.
Hier besteht die Denksportaufgabe darin, die Auswertung von sql_text auf true zu bekommen wenn lediglich
ein bestimmter Tabellenname im Select Statement enthalten ist.

August 2016

Optimierung Query Mode des Transparent JDBC Gateway für Oracle ( TJG-O ).

Wording:

Fremddatenbank :
Alles was mit JDBC ereichbar ist, inkl. der eigenen Oracle Instanz, wenn es so sein soll.
Remotetabelle:  Die Tabelle, die per JDBC abgefragt wird.

Im Beispiel liegt die Remotetabelle "M1_BIGTABLE" in der Fremddatenbank MariaDB/db_name.
Zur Orientierung dient der Connection Name 'M1' im Präfix.

Die Connection M1 wurde in der Oracle Session aufgebaut mit :

          
            exec  gw.get_conn( 'M1','jdbc:mysql://localhost:3306/db_name', 'username', 'password', 'conn_profile', 'ren=yes');

            oder bei neuerlichem Connect

            exec  gw.re_conn( 'M1','password');

Mit 'ren_yes' werden alle Proxy Objekte, die für MariaDB und diese Datenbank,db_name, username,  ... freigegeben wurden, mit dem Präfix 'M1_' umbenannt.

Die Lebensdauer der Connection ist im Default Connection Profile aus Sicherheitsgründen identisch mit der Oracle Session Lifetime. Der Parallelisierungsgrad beträgt im Default Connection Profile 1. Bis auf das Passwort
wird im Default Connect Profile die Connection ULRL unter dem Namen, z.B. 'M1' automatisch gespeichert.

Table Mode ( bisher und zukünftig ) :

            Modus setzen.

            exec  gw.set_tbl_prop('M1_BIGTABLE', 'Mode=Table');

            SQL Abfrage:

select count(*) cnt_id from m1_bigtable; 

  1.  Komplette Übertragung der Tabelle BIGTABLE an das Oracle Proxy Object 'BIGTABLE'.
      - optional als Oracle Table oder In Memory via Snapshot mit oder ohne fast refresh
  2.  Ausführung der Count Funktion durch die Oracle SQL Engine auf dem Proxy Object und Ausgabe

bzw.

Query Mode ( bisher ) :

  1. View erstellen:


          create or replace view q_cnt_bigtable_v as select count(*)   as cnt_id from m1_bigtable_q; 

  1. Abfrage auf View:


          select * from  q_cnt_bigtable_v;

Neben dem Proxy Objekt 'm1_bigtable' für den Table Mode gab es ein Proxy Objekt 'm1_bigtable_q' für den Query Mode.

Query Mode ( zukünftig ) :   

            Modus setzen.

            exec  gw.set_tbl_prop('M1_BIGTABLE', 'Mode=Query');

            Beim ersten Aufruf wird die SQL Query registriert.

            select count(*) cnt_id from m1_bigtable; 
                   Query registered  successfully !
      


             select count(*) cnt_id from m1_bigtable;  - > Result

  1.  Übertragung und Ausführung der Count Funktion auf der Remote Tabelle bigtable  z.B. in MariaDB
     Übertragung des Ergebnisses ( im Beispiel ein Datensatz) an das Oracle Proxy Object und Ausgabe. 

Es gibt fortan lediglich ein Proxy Objekt, welches sowohl  im Query Mode als auch im Table Mode verwendet werden kann.
Die Parallelisierung z.B. bei der Abfrage wird über das Setzen von Werten einer Eigenschaft aktiviert.

              exec  gw.set_tbl_prop('M1_BIGTABLE', 'ParallelQuery=4');

Join's sind ebenso möglich, sofern alle Tabellen des Joins in der Fremddatenbank liegen!

Unabhängig davon kann jede Tabelle einer Fremdatenbank bzw. JDBC Quelle in Oracle vorgehalten  werden.
Entweder im Speicher oder als Tabelle jeweils mit oder ohne Refresher.

________________________________________________________________

Neue Eigenentwickung :

Transparent Dataload Oracle > In Memory DB's
z.B. SAP Hana, MariaDB, usw.

Vollkommen transparent aus der Oracle DB z.B. via PL/SQL - SQL und asynchron

Mit Transformation auf  z.B. Columnstore Formate sowie Parallelisierbar!

___________________________________________________________________

In Planung:

Oracle DB Proxy der zwischen Application und Oracle DB  bzw. Oracle Dummy DB geschaltet wird.
Im einfachsten Fall wird die Connection 1:1 durchgereicht.
Vorteil : Keine Änderungen an der Application

Security Features:

  1. Application Filter auch für SQLPLUS / DBA's
  2. Alternative Daten  für z.B. Tests von anderen DB's auch mit dem Transparent JDBC Gateway.
  3. SQL Translation - sicher und auditierbar.
  4. Datenmaskierungen
    usw.

Weitergehende Features:

  1. Migrationen von Oracle DB's zu Whatever, ohne die Applications ändern zu müssen.


Juni 2016

Unified Auditing Oracle 12c in Practice Teil 4 (new  14.06.2016 )


März 2016


Unified Auditing Oracle 12c in Practice Teil 3 ( 09.03.2016 )

DWH/BIG DATA - Oracle Konferenz in Mainz
Gateway Port auf C++

Februar 2016


Gateway in Java und PL/SQL abgeschlossen. Vorführung und Verkauf  auf Anfrage.

Januar 2016

Unified Auditing Oracle 12c Teil 2 (update 10.01.2016 )

Update Tipps&Tricks : Unfied Auditing Oracle 12c 

Dezember 2015

Diverse Parallel Pipelined Tablefunctions teils mit ODCI erstellt.
Die Wirkung geht deutlich über das hinaus was man dem alten Monolithen Oracle DB zutrauen würde.
Dies besonders, wenn die Connectivity  Datenbankgrenzen überwindet.

November 2015

Update Tipps&Tricks : Unfied Auditing Oracle 12c ( update 26.11.2015 )
 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Im Backlog stehen folgende Artikel zu Oracle Security 12c:

Wie kann man die Nutzung von Translate any SQL auditieren und den Original-  und Ersatz- SQL protokollieren ?
Wie kann man die Nutzung von Inherit any Privileges auditieren samt Ausweisung der geerbten Privilegien?

Ob mir eine simple Lösung einfällt, welche Auditeinträge bei Mixed Mode 12c von sys.aud$ in das Unified Audit Trail überträgt, werden wir sehen. Eine View basierend auf einer Table Function welche sys.aud$ als Union an das Unified Audit Trail hängt sollte jedoch immer gehen.

Tipps&Tricks : Unfied Auditing Oracle 12c ( update 24.11.2015 )

August+Oktober 2015

Damit das JDBC Gateway auch für Massenabfragen genutzt werden kann, muss die Parallel Query Funktionalität von Oracle mit der Architektur des Gateways verheiratet werden. Dies gilt auch für Parallelized PipelinedTable Functions.

Damit lassen sich dann auch über Apache Hive Massendaten nach Oracle und zurück transportieren, sofern es genug Performance für den Java Anteil gibt.

July 2015

JDBC Gateway - ( Korrektur 25.08.2015 )

Volldynamische Variante  des JDBC Gateways erstellt.
 
select * from table ( gw.dyn_tbl ( 'MARIADB_CON_1', 'PRODUCTS' , 'S_GT_NF', 'DT_MAP_1', 'FULL' ) );
             Abfrage des erstellten Objects, sofern gewünscht.
   
             select * from "PRODUCTS@MARIADB_CON_1";

--------------------------------------------------------------------------------------------------------------------------------------------------------
 gw.dyn_tbl( Param_1,Param_2,Param_3,Param_4,Param_5,.. );
Param_1 :  Connection  -- im Beispiel hinterlegt und zur Erläuterung mit  Herstellernamen
Param_2 :  Table/View/Tablefunction, ..
Param_3 :  Persistenzverhalten
                   C_VM         -  Call Volatile Memory - flüchtig
                   S_GT_NF   - Session   Global Temp Table ohne Fast Refresh
                   P_MW_FR - Permanent   Fast Refresh
                  
 
Param_4 :  Datatype Mapping mt Lob,Geo,.. 
Param_5 :  Data Mapping
                        Anonymisierung
                        Verwürfelung
                        Verschlüsselung
                        Sichtbarkeit - Full /Partial/ Null / Fakedata
                    
                       
Param_6 :
...
Param_nm  optional



Juni 2015

Fast Key Generation for PGP in der Oracle Datenbank.
Aktuell für z.B. OraPGP von DidiSoft
Eigene Implementierung folgt.
Entscheidend für den Einsatz der asymmetrischen Verschlüsselung sind passende
Konzepte für die logische Partitionierung und die Lebensdauer von Schlüsselpaaren bzw.
PwdPhrases.

Mai 2015

Neue Version Audittransport  to SIEM für Unified Auditing.
Redundanzen bei den Daten vermeiden.Sicherheit und Performance gegen Aufwand!
 Cosima Jörgens


Termin : 27.11. 2013, 18:30  Raum D14/104, h_da (Fachhochschule DA, Informatikgebäude),
Schöfferstraße 8, Darmstadt.

http://www.it-stammtisch-darmstadt.de/vortraege/oracle-database-security.html

 

Der Vortrag versucht für relevante Sicherheitslücken praxinahe Hilfestellungen zu vermitteln.
.