Back To Top

XML DB mit PL/SQL

Oracle XDB: Verwaltung mit dem Paket DBMS_XDB

Comelio Oracle PL/SQLDie PL/SQL-API im Paket DBMS_XDB für die Verwaltung der XML-Datenbank beinhaltet folgende Aktivitätsbereiche:
 

  • Oracle XML DB Ressourcenverwaltung (Anlegen von Verzeichnisstrukturen und Speicherung bzw. Bearbeitung von XML-Ressourcen)
  • Oracle XML DB ACL-basierte Sicherheit
  • Oracle XML DB Konfiguration
  • Oracle XML DB hierarchischer Index-Aufbau

Folgende Unterprogramme sind im Paket DMBS_XDB enthalten. Sie werden alle im Rahmen der gerade erwähnten Tätigkeitsbereiche genauer vorgestellt. Hier folgt nur eine Übersicht über die vorhandenen Möglichkeiten.

  • getAclDocument():
    Lädt ein ACL-Dokument mit Zugriffsrechten für Ressourcen im Repository. getPrivileges(): Liefert alle Rechte (Privilegien), die ein Benutzer an einer gegebenen Ressource besitzt.
  • changePrivileges():
    Verändert die vorhandenen Zugriffsrechte an einer Ressource bzw. ergänzt die vorhandenen Rechte um die neuen.
  • checkPrivileges():
    Überprüft die Benutzerrechte an einer Ressource anhand einer konkreten Ressource und eines gegebenen Benutzers.
  • setacl():
    Definiert die Zugriffsrechte eines Benutzers auf eine Ressource mit Hilfe der übergebenen Rechte.
  • AclCheckPrivileges():
    Überprüft die Zugriffsrechte, die dem aktuellen Benutzer für eine gegebene Ressource zuzuschreiben sind, wobei der Benutzer der Ressource übergeben wird.
  • LockResource():
    Liefert eine WebDAV-Sperre auf die Ressource, wobei der Pfad zu ihr übergeben wird.
  • GetLockToken():
    Liefert das Token einer WebDAV-Sperre für den angegebenen Benutzer und den Ressourcenpfad.
  • UnlockResource():
    Entsperrt die Ressource.
  • CreateResource():
    Erstellt eine neue Ressource.
  • CreateFolder():
    Erstellt einen neuen Ordner (Ressource) am angegebenen Hierarchiepunkt.
  • DeleteResource():
    Löscht die angegebene Ressource (Ordner oder Datei) aus der Hierarchie.
  • Link():
    Erstellt eine Verknüpfung zu einer existierenden Ressource (Ordner oder Datei).
  • CFG_Refresh():
    Aktualisiert die Sitzungsinformationen zu dieser Ressource.
  • CFG_Get():
    Liefert die Konfigurationsinformationen der Sitzung.
  • CFG_Update():
    Aktualisiert die Konfigurationsinformationen.

Ressourcen-Management

Comelio Oracle PL/SQLEine der ersten Aufgaben ist natürlich das Anlegen von Verzeichnisstrukturen und die Einbindung von XML-Dokumenten. Zum Ressourcen-Management gehört dann zusätzlich auch das Löschen oder das Anlegen von Verknüpfung zu Ressourcen. Sofern noch gar keine Ressourcen existieren, müssen zunächst geeignete Ordner mit createFolder() oder createRessource() angelegt werden. Die letzte Funktion eignet sich dann auch für das Anlegen von XML-Strukturen, die entweder als Zeichenkette oder als Variable in XMLType-Form übergeben werden. Im später folgenden Beispiel ist es nur ein kurzes XML-Dokument, das als einfache Zeichenkette vorgegeben wird. Das Anlegen von Ordner-Strukturen ist erfreulich einfach, denn man benötigt nur passende Pfadangaben als Zeichenketten.

Insgesamt eignen sich folgende Funktionen für die Arbeit:

  • Link Parameter:
    (srcpath VARCHAR2, linkfolder VARCHAR2, linkname VARCHAR2), Rückgabewert: nicht verfügbar.
  • LockResource Parameter:
    (path IN VARCHAR2, depthzero IN BOOLEAN, shared IN boolean), Rückgabewert: TRUE, wenn erfolgreich.
  • GetLockToken Parameter:
    (path IN VARCHAR2, locktoken OUT VARCHAR2), Rückgabewert: nicht verfügbar.
  • UnlockResource Parameter:
    (path IN VARCHAR2, deltoken IN VARCHAR2), Rückgabewert: TRUE, wenn erfolgreich.
  • CreateResource
    • FUNCTION CreateResource (path IN VARCHAR2, data IN VARCHAR2), RETURN BOOLEAN;: Erstellt eine neue Ressource (XML-Dokument) mit dem Inhalt der übergebenen Zeichenkette.
    • FUNCTION CreateResource (path IN VARCHAR2, data IN SYS.XMLTYPE), RETURN BOOLEAN;: Erstellt eine neue Ressource (XML-Dokument) mit dem Inhalt des übergebenen XMLType.
    • FUNCTION CreateResource (path IN VARCHAR2, datarow IN REF SYS.XMLTYPE) RETURN BOOLEAN;: Erstellt eine Ressource, deren Inhalt ein XMLType ist, der nicht in einer anderen Ressource vorhanden ist.
    • FUNCTION CreateResource (path IN VARCHAR2, data IN CLOB) RETURN BOOLEAN;: Erstellt eine Ressource mit dem übergebenen CLOB als Inhalt.
    • FUNCTION CreateResource (path IN VARCHAR2, data IN BFILE) RETURN BOOLEAN;: Erstellt eine Ressource mit dem übergebenen BFILE als Inhalt.
  • CreateFolder Parameter:
    (path IN VARCHAR2), Rückgabewert: TRUE, wenn erfolgreich.
  • DeleteResource Parameter:
    (path IN VARCHAR2), Rückgabewert: nicht verfügbar.

Die XML Schema-Datei XDBResource.xsd hat den in den Abbildungen gezeigten schematischen Aufbau, um Ressourcen zu beschreiben.

Ressourceneinstellungen 1 von Oracle XML DB

Ressourceneinstellungen 2 von Oracle XML DB

Im nächsten Beispiel wird innerhalb des public-Ordners ein neuer Ordner für Dozenten-XML-Dateien angelegt, der dann mit zwei unterschiedlichen Dateien gefüllt wird. Den erfolgreichen Abschluss eines Vorgangs testen wir entweder direkt im System im Oracle Enterprise Manager (in diesem Fall dürfen wir natürlich die Ressourcen nicht automatisch wieder löschen) oder über den Wahrheitswert, der jeweils zurückgeliefert wird.

DECLARE
 ordner    boolean; -- Anlegen eines Ordners
 ressource boolean; -- Anlegen einer Ressource
 -- Funktion für den Test einer gültigen Aktion
 FUNCTION  Testen (Test IN BOOLEAN)
  RETURN VARCHAR2
 AS
  BEGIN
   IF Test THEN RETURN 'Erfolgreich';
    ELSE RETURN 'Nicht erfolgreich';
   END IF;
  END Testen;
BEGIN
 -- Anlegen eines Ordners
 ordner := dbms_xdb.createfolder('/public/dozenten');
 DBMS_OUTPUT.PUT_LINE(Testen(ordner));
 -- Anlegen einer Ressource 1
 ressource :=dbms_xdb.createresource
   ('/public/dozenten/doz_ebenhof.xml',
    '<doz_name>Ebenhof</doz_name>');
 DBMS_OUTPUT.PUT_LINE(Testen(ressource));
 -- Anlegen einer Ressource 2
 ressource := dbms_xdb.createresource
   ('/public/dozenten/doz_gelddreh.xml',
    '<doz_name>Gelddreh</doz_name>');
 DBMS_OUTPUT.PUT_LINE(Testen(ressource));
 -- Anlegen eines Links
 dbms_xdb.link
   ('/public/dozenten/doz_ebenhof.xml','/public/dozenten',
    'person_ebenhof.xml');
 dbms_xdb.link
   ('/public/dozenten/doz_gelddreh.xml','/public/dozenten',
 'person_gelddreh.xml');
 -- Löschen von Ressourcen, Links und Ordnern
 dbms_xdb.deleteresource
   ('/public/dozenten/doz_ebenhof.xml');
 dbms_xdb.deleteresource
   ('/public/dozenten/person_ebenhof.xml');
 dbms_xdb.deleteresource
   ('/public/dozenten/doz_gelddreh.xml');
 dbms_xdb.deleteresource
   ('/public/dozenten/person_gelddreh.xml');
 dbms_xdb.deleteresource('/public/dozenten');
END;

Sicherheitsverwaltung

Comelio Oracle PL/SQLDie einzelnen Ressourcen (Ordner und Dateien) besitzen wie andere Dateien in einem Dateisystem auch Zugriffsrechte. Sie werden über die hier vorgestellten Funktionen und Prozeduren eingerichtet. Dabei besteht die Rechteangabe auch wieder aus einer XML-Datei, die ein gültiges Instanzdokument darstellt.

Insgesamt handelt es sich um folgende Funktionen und Prozeduren, die für die Arbeit einsetzbar sind:

  • getAclDocument Parameter:
    (abspath VARCHAR2), Rückgabewert: XMLType des ACL Dokuments.
  • ACLCheckPrivileges Parameter:
    (acl_path IN VARCHAR2, owner IN VARCHAR2, privs IN XMLType), Rückgabewert: Positive Ganzzahl, wenn Rechte geprüft und vorhanden sind.
  • checkPrivileges Parameter:
    (res_path IN VARCHAR2, privs IN XMLType) Rückgabewert: Positive Ganzzahl, wenn Rechte geprüft und vorhanden sind.
    <privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:dav="DAV:" 
               xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
    http://xmlns.oracle.com/xdb/acl.xsd
    DAV: http://xmlns.oracle.com/xdb/dav.xsd">
      <read-contents/>
      <read-properties/>
      <resolve/>
      <dav:waste/>
    </privilege>
  • getprivileges Parameter:
    (res_path IN VARCHAR2), Rückgabewert: XMLType-Instanz des privilege-Elements.
    <privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
    http://xmlns.oracle.com/xdb/acl.xsd">
      <read-contents/>
      <read-properties/>
      <resolve/>
      <read-acl/>
    </privilege>
  • changePrivileges Parameter:
    (res_path IN VARCHAR2, ace IN XMLType), Rückgabewert: Positive Ganzzahl, wenn ACL erfolgreich verändert wurde.
    <ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:dav="DAV:" 
         xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
    http://xmlns.oracle.com/xdb/acl.xsd
    DAV:http://xmlns.oracle.com/xdb/dav.xsd">
      <grant>true</grant>
      <principal>SCOTT</principal>
      <privilege>
        <read-contents/>
        <read-properties/>
        <resolve/>
        <dav:waste/>
      </privilege>
    </ace>
  • setAcl Parameter:
    (res_path IN VARCHAR2, acl_path IN VARCHAR2). Setzt die ACL der Ressource auf res_path auf die ACL, die im acl_path gefunden wird. Rückgabewert: nicht verfügbar.

Die XML Schema-Datei acl.xsd hat den in der Abbildung gezeigten schematischen Aufbau, um Zugriffsrechte und damit auch gültige Instanzdokumente zu beschreiben.

Schema für Sicherheitseinstellungen

Das folgende Beispiel legt zunächst einen Ordner und dann eine Datei in diesem Ordner an, für die zunächst Standard-Rechte für Dateibesitzer gesetzt, dann gelesen und schließlich geändert werden.

DECLARE
 -- Ordner
 ordner boolean;
BEGIN
 -- Ordner anlegen
 ordner := dbms_xdb.createfolder('/public/dozenten');
 COMMIT;
END;
/
DECLARE
 ressource boolean;
BEGIN
 -- Lege Ressource an
 ressource := dbms_xdb.createresource('/public/dozenten/doz_Ebenhof.xml',
                                      '<doz_name>Ebenhof</doz_name>');
COMMIT;
END;
/

-- Setze Standard-Rechte
call dbms_xdb.setacl('/public/dozenten/doz_Ebenhof.xml', 
                     '/sys/acls/all_owner_acl.xml');
COMMIT;

-- Lies Rechte
SELECT dbms_xdb.getacldocument('/public/dozenten/doz_Ebenhof.xml')
  FROM dual;

DECLARE
 r pls_integer; -- Rückgabewert
 ace xmltype;   -- ace-Rechte-XML-Struktur
 ace_data varchar2(2000); -- ace-Rechte-Text
BEGIN
 -- Erstelle ace-Text-Struktur
 ace_data := 
  '<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
               http://xmlns.oracle.com/xdb/acl.xsd
   DAV:http://xmlns.oracle.com/xdb/dav.xsd">
   <principal>SCOTT</principal>
   <grant>true</grant>
   <privilege>
    <all/>
   </privilege>
   </ace>';
 -- Erstelle XMLType von Rechte-Text
 ace := xmltype.createxml(ace_data);
 -- Weise Rechte über XML zu
 r := dbms_xdb.changeprivileges('/public/dozenten/doz_Ebenhof.xml', ace);
 -- Gebe Rückgabewert aus
 dbms_output.put_line('retval = ' || r);
COMMIT;
END;
/

-- Lies ace-Dokument
SELECT dbms_xdb.getacldocument('/public/dozenten/doz_Ebenhof.xml')
FROM dual;

-- Lies Privilegien
SELECT dbms_xdb.getprivileges('/public/dozenten/doz_Ebenhof.xml')
  FROM dual;

-- Lösche Ressourcen
call dbms_xdb.deleteresource('/public/dozenten/doz_Ebenhof.xml');
call dbms_xdb.deleteresource('/public/dozenten');
COMMIT;

Man erhält unterschiedliche XML-Dokumente zurück, die die vorhandenen bzw. gesetzten Rechte an einer bestimmten Ressource beschreiben.

DBMS_XDB.GETACLDOCUMENT('/PUBLIC/DOZENTEN/DOZ_EBENHOF.XML')
<acl description="Private:All privileges to OWNER only 
                  and not accessible to others" 
     xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd 
                         http://xmlns.oracle.com/xdb/acl.xsd">
  <ace>
    <principal>dav:owner</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
</acl>
1 Zeile wurde ausgewählt.

retval = 1001

DBMS_XDB.GETACLDOCUMENT('/PUBLIC/DOZENTEN/DOZ_EBENHOF.XML')
<acl description="Private:All privileges to OWNER only 
                  and not accessible to others" 
     xmlns="http://xmlns.oracle.com/xdb/acl.xsd" 
     xmlns:dav="DAV:" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd 
                         http://xmlns.oracle.com/xdb/acl.xsd">
  <ace>
    <principal>dav:owner</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
  <ace>
    <principal>SCOTT</principal>
    <grant>true</grant>
    <privilege>
      <all/>
    </privilege>
  </ace>
</acl>
1 Zeile wurde ausgewählt.

DBMS_XDB.GETPRIVILEGES('/PUBLIC/DOZENTEN/DOZ_EBENHOF.XML')
<privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd 
                                     http://xmlns.oracle.com/xdb/acl.xsd DAV: 
                                     http://xmlns.oracle.com/xdb/dav.xsd" 
           xmlns:xdbacl="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:">
  <read-properties/>
  <read-contents/>
  <update/>
  <link/>
  <unlink/>
  <read-acl/>
  <write-acl-ref/>
  <update-acl/>
  <resolve/>
  <link-to/>
  <unlink-from/>
  <dav:lock/>
  <dav:unlock/>
</privilege>
1 Zeile wurde ausgewählt.

Konfiguration

Comelio Oracle PL/SQLFür die Konfiguration von XDB existieren folgende Funktionen und Prozeduren.

 

  • CFG_get Parameter:
    keine, Rückgabewert: XMLType für Sitzungskonfigurationsmanagement.
  • CFG_refresh Parameter:
    keine, Rückgabewert: nicht verfügbar.
  • CFG_update Parameter:
    (xdbconfig IN XMLType), Rückgabewert: nicht verfügbar.

Für ihren Einsatz ermittelt man zunächst die vorhandenen Konfigurationseinstellungen, die man ändern und schließlich aktualisieren kann. Dies erfolgt über gültige XMLType-Intanzen der vorhandenen Schema-Datei.

Die XML Schema-Datei xdbconfig.xsd enthält die in den Abbildungen gezeigten Datenstrukturen, die für Konfigurationsdateien gelten müssen, damit sie als gültige Angaben erkannt werden.

Sicherheitseinstellungen System

Sicherheitseinstellungen Protokoll

» Kontaktformular










comelio.com

mail address

mail address

  • Berlin | Comelio GmbH
    Fon: +49(0)30-8145622-00
    Fax: +49(0)30-8145622-10
  • München | Comelio GmbH
    Fon: +49(0)89-38156860-0
    Fax: +49(0)89-38156860-9
  • Hamburg | Comelio GmbH
    Fon: +49(0)40-20934996-0
    Fax: +49(0)40-20934996-9
  • Wien | Comelio GmbH
    Fon: +43-720-2097-97
    Fax: +43-720-2097-98