Erweiterung eines Werkzeuges zur Datenbank-Administration f ur Oracle 8 in Java
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Erweiterung eines Werkzeuges zur Datenbank-Administration für Oracle 8 in Java Studienarbeit von Marcus Heeb und Tobias Kischkat im Rahmen des Studiengangs Mathematik mit der Studienrichtung Informatik an der Universität Hannover Betreuer: Prof. Dr. Udo Lipeck Dipl.-Math. Thomas Esser Hannover, den 19. Januar 1999
ii
Inhaltsverzeichnis 1 Einleitung 1 1.1 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Verwendete Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Typographische Konventionen . . . . . . . . . . . . . . . . . . . . . . 3 2 Konzepte und Veränderungen 5 2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Rollen und Rechte in Oracle . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Anfrageoptimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Gemeinsame Baumzeichenroutine . . . . . . . . . . . . . . . . . . . . 8 2.5 Property-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.6 Veränderungen an Dato . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.7 Veränderungen zu ODDIS . . . . . . . . . . . . . . . . . . . . . . . . 9 3 Benutzerhandbuch 13 3.1 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 Programmstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3 Am Anfang ist ein Fenster . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Die Anzeige des Anfrageergebnisses . . . . . . . . . . . . . . . . . . . 16 3.5 Statistiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.6 Zugriffspläne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.7 Benutzerverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4 Implementierung 27 4.1 Package appl.odto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.2 Package appl.optimize . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.3 Package appl.security . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.4 Package util.win . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.5 Veränderte Klassen von Dato . . . . . . . . . . . . . . . . . . . . . . 53 5 Installationshandbuch 55 5.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.2 Entpacken des Archivs . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.3 Der CLASSPATH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.4 Das Startskript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.5 Die neuen Systemtabellen . . . . . . . . . . . . . . . . . . . . . . . . 56 5.6 Administratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
iv INHALTSVERZEICHNIS 6 Anpassung 57 6.1 Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.2 Neue Versionen von Oracle . . . . . . . . . . . . . . . . . . . . . . . 57 6.3 Datumsformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.4 Ergebnisfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Literaturverzeichnis 58
Kapitel 1 Einleitung 1.1 Aufgabenstellung In der vorliegenden Studienarbeit besteht die Aufgabe darin, das Softwaretool Da- to zu erweitern. Dato ist im Rahmen einer Studienarbeit von Arnim von Helmolt [He98] entstanden und ist größtenteils eine Umsetzung des Programms ODDIS auf die Programmiersprache Java. ODDIS ist ein am Institut für Datenbanken im Rahmen mehrerer Studien- und Diplomarbeiten [BS95] entstandenes Programm, das eine graphische Benutzeroberfläche zur Arbeit mit dem Datenbankmanagementsystem Oracle 7 bietet. Es bietet u.a. einen einfachen Zugang zu den Oracle-Systemtabellen, Funktionen zur Benutzerverwaltung, die Möglichkeit, Anfragen auszuführen und sich Zugriffspläne sowohl tabellarisch als auch graphisch als Baumstruktur anzeigen zu lassen sowie Informationen über logische und physische Speicherstrukturen der Da- tenbank und die Belegung der vom System verwendeten Festplatten. Geschrieben wurde ODDIS in der Sprache Tcl/Tk. Während ODDIS für die Version 7 des Oracle-RDBMS entwickelt wurde, ver- folgt Dato den Ansatz, möglichst unabhängig vom Datenbankmanagementsystem zu bleiben. Dies wird dadurch erreicht, daß Teile der Menüs sowie alle Anfragen aus Property-Dateien ausgelesen werden und nicht fest ins Programm eincodiert sind. Durch Änderung dieser Dateien kann Dato ohne Neukompilierung an neue Datenbankmanagementsysteme angepaßt werden. Nun ist seit einiger Zeit Oracle in der Version 8 erhältlich, das als erste Version objekt-relationale Erweiterungen enthält. Aufgabe ist es nun u.a., die Anpassung an diese Version vorzunehmen und insbesondere die Anzeige von Objektdatentypen mit ihren Attributen und Methoden zu ermöglichen. Außerdem besteht Dato nur aus dem Kern von ODDIS: es ermöglicht einen ein- fachen inspirierenden Zugriff auf das Data-Dictionary-System. ODDIS hat aber im Laufe der Zeit viele Erweiterungen erhalten. Die Aufgabe besteht nun weiterhin darin, die ODDIS-Erweiterungen für die Benutzer- , Rechte- und Benutzergruppen- verwaltung (Studienarbeit von Ralf Lilischkis, 1997, [Li97]) und die Analyse von Zugriffsplänen (Studienarbeit von Regine Kasten, 1996, [Ka96]) in Java als Erwei- terung von Dato zu implementieren. Als Ergebnis soll das neue Programm ODTO (Oracle Data-Dictionary Tool) entstehen. Die Benutzerverwaltung besteht dabei im Wesentlichen aus Dialogen zum einfa- chen Einrichten, Ändern und Löschen von Benutzern, Rollen und Profilen. Es wer- den Benutzergruppen eingeführt, um Änderungen an einer Menge von Benutzern auf einmal durchführen zu können und das Erstellen von vielen Benutzern mit gleichen Einstellungen zu ermöglichen. Mit diesem Teil der Arbeit hat sich hauptsächlich
2 Einleitung Tobias Kischkat befaßt. Die Zugriffsplananalyse besteht aus einem Teil, mit dem das Berechnen von Statistiken zu Tabellen, Indexen etc. durchgeführt werden kann und einem Teil, der Zugriffspläne zu einer Anfrage erstellt und auch grafisch in Form eines Baumes anzeigt. Aus der Aufgabenstellung von 1996 wurde der Teil ausgenommen, der sich auf die Analyse von Datenbankdateien im Filesystem des Datenbankservers und dessen Festplattenkapazitäten bezieht. Hiermit hat sich Marcus Heeb beschäftigt. 1.2 Gliederung Kapitel 1 gibt einen kurzen Überblick über die Aufgabe dieser Studienarbeit, sowie über die verwendeten Werkzeuge, die bei der Bearbeitung der Aufgabe verwendet wurden. Kapitel 2 erläutert einige grundlegende Konzepte, die bei der Implementierung von ODTO genutzt wurden. Außerdem werden die an Dato vorgenommenen Änderungen, die zur Implemen- tierung der neuen Funktionen nötig waren, sowie die Veränderungen in der Bedie- nung bezüglich ODDIS beschrieben. Kapitel 3 beschreibt die Benutzung von ODTO. Kapitel 4 zeigt einen Überblick über die implementierten Klassen mit ihren gegen- seitigen Abhängigkeiten. Kapitel 5 beschreibt, was vor dem ersten Start von ODTO zu tun ist. Kapitel 6 zeigt einige Möglichkeiten, wie das Programm ohne Neukompilierung verändert werden kann, um es dem Geschmack des Benutzers anzupassen. 1.3 Verwendete Werkzeuge ODTO wurde mit Hilfe des von Sun vertriebenen Java Developer Kits (JDK) in der Version 1.1.6 in Java als Applikation implementiert. Zum Compilieren wurde der sehr schnelle Java-Kompiler Jikes der Firma IBM benutzt. Desweiteren wurden die am Institut für Datenbanken und Informationssysteme entwickelten Programme ODDIS und Dato und natürlich das DBMS Oracle 8, für das ODTO entwickelt wurde, verwendet.
1.4 Typographische Konventionen 3 1.4 Typographische Konventionen Folgende Schrifttypen werden in dieser Arbeit verwendet: Schrifttyp Verwendung für Schreibmaschine Kommandos, Dateien und Quelltexte Schreibmaschine geneigt Packages fett serifenlos Klassen und Interfaces serifenlos Objekte, Attribute, Methoden und Argumente Kapitälchen SQL-Kommandos geneigt Variablen und Platzhalter in SQL-Kommandos
4 Einleitung
Kapitel 2 Konzepte und Veränderungen 2.1 Allgemeines Während Dato noch unabhängig vom verwendeten Datenbankmanagementsystem war, mußte dieser Ansatz bei der Implementierung von ODTO leider aufgegeben werden, da die weitergehenden Funktionen von ODTO nicht mehr unabhängig vom DBMS zu realisieren waren. 2.2 Rollen und Rechte in Oracle 2.2.1 Rollen Eine Rolle kann wie ein Benutzer gehandhabt werden. Es können ihr System- und Objektprivilegien vergeben werden. Durch das Vergeben einer Rolle an einen Be- nutzer erhält dieser Benutzer alle Privilegien der Rolle. Dabei ist zu beachten, daß auch einer Rolle eine Rolle zugewiesen werden kann. Wenn man dieses Prinzip öfter anwendet, können komplexe Abhängigkeiten zwischen den Rollen entstehen. Um sich hier einen Überblick verschaffen zu können, sollen diese Rollenabhängigkeiten grafisch in Form eines Baumes angezeigt werden können. Da die Rollenabhängigkei- ten aber einen zyklenfreien gerichteten Graphen bilden, wird dieser Graph in einen Baum transformiert, was zur Folge hat, daß einzelne Knoten evtl. mehrfach auftre- ten. Es ist zu beachten, daß Oracle verhindert, daß die Rollenabhängigkeiten einen Zyklus bilden. Benutzern, die nur auf bestimmte Teile der Datenbank Zugriff haben sollen, weist man eine Rolle zu, die dem Benutzer dann auf einmal alle gewünschten Rechte vergibt. So z.B. die Rolle DBA, die einem Benutzer die Rechte zur Datenbankadmi- nistration gibt. Bei Rollen ist zwischen default-Rollen und nicht-default-Rollen zu unterscheiden. Eine default-Rolle ist mit dem Einloggen eines Benutzers in die Datenbank sofort aktiviert. Dann ist in keinem Fall eine Passworteingabe zur Aktivierung der Rolle nötig. Rollen, die nicht default-Rollen eines Benutzers sind, müssen erst aktiviert werden. Dazu ist evtl. auch noch die Eingabe eines Passwortes nötig. 2.2.2 Privilegien Privilegien enthalten das Recht, bestimmte Bereiche der Datenbank lesen oder verändern zu dürfen. Hier werden System- und Objektprivilegien unterschieden.
6 Konzepte und Veränderungen Objektprivilegien beziehen sich auf ein ganz bestimmtes Datenbankobjekt (Tabelle, Sicht, Objekttyp etc.) eines bestimmten Datenbankschemas. Systemprivilegien sind allgemeine Rechte wie unlimitierter Speicherplatz, das Recht zum Erstellen bestimmter Datenbankobjekte, Benutzern, Rollen etc. 2.2.3 Gruppen Gruppen sind nicht von Oracle unterstützt. Gruppen bestehen aus einer Menge von Benutzern, die gemeinsam verwaltet werden können. Es besteht nicht einmal der Zwang, daß die Benutzer gleiche Rechte oder Einstellungen haben müssen. Gruppen eignen sich zum Verwalten von Studenten, die zum Bearbeiten von Übungen einen Datenbankaccount haben sollen. So kann der Administrator alle Benutzer mit einem Befehl löschen, ihre Rechte ändern oder ihre Einstellungen (Tablespaces, Profile usw.) festlegen. Außerdem ist ein automatisches Erstellen einer Menge von Benutzern vorgese- hen. Diese Benutzer können sofort einer Gruppe zugewiesen werden. Die erstellten Benutzernamen bestehen aus einem Namanspräfix und einer fortlaufenden Nummer. Falls dies gewünscht ist, werden zufällige Passwörter erstellt, den neuen Benutzern zugewiesen und zum Mitteilen an den Administrator in einer Systemtabelle gespei- chert. 2.3 Anfrageoptimierung 2.3.1 Grundlagen Ziel der Anfrageoptimierung ist es, das Resultat einer Anfrage innerhalb einer möglichst kurzen Zeit unter möglichst geringem Resourcenaufwand zu liefern, al- so unter anderem, die bei der Bearbeitung benötigten Zwischenergebnisse möglichst klein zu halten. Unter Oracle gibt es dazu zwei verschiedene Methoden, nämlich die regelbasierte und die kostenbasierte Optimierung. Bei dem regelbasierten Ansatz wird der Zugriffsplan zur gestellten Anfrage mit- tels fest im System implementierter Regeln erstellt. Grundlage sind dabei vor allem die Regeln der algebraischen Optimierung. Diese besagen zum Beispiel, daß Selek- tionen möglichst früh ausgeführt werden sollen, um nicht benötigte Daten so früh wie möglich aus der Ergebnismenge zu streichen und damit das Datenaufkommen gering zu halten. Das gleiche Ziel verfolgt der Ansatz, Projektionen nach innen zu verschieben, um nicht benötigte Spalten sofort zu streichen. Sie sollten aber nicht vor Selektionen ausgeführt werden. Soll nun beispielsweise ein Verbund über zwei Tabellen ausgeführt werden, bei dem noch weitere Bedingungen an die Ergebnistupel gestellt werden, so sollten zunächst aus beiden Tabellen nur die Tupel ausgewählt werden, die diese Bedin- gungen erfüllen. Danach sollten die nicht benötigten Spalten entfernt werden, und mit diesen reduzierten Tabellen kann dann der Verbund ausgeführt werden. Sowohl der Daten- als auch der Berechnungsaufwand sind damit wesentlich geringer als wenn man erst den Verbund durchführt und dann die Selektionen und Projektionen auf die gewünschten Spalten ausführt. Der kostenbasierte Ansatz benötigt Statistiken zu den an der Anfrage beteiligten Objekten. Diese enthalten z.B. Angaben über die Anzahl der Tupel einer Tabelle oder die Anzahl verschiedener Werte bei Indexen.
2.3 Anfrageoptimierung 7 Der Optimierer erstellt dabei zu einer Anfrage mehrere Zugriffspläne und wählt dann aufgrund der Statistiken den Plan mit den geringsten Bearbeitungskosten aus. Wichtig dabei ist, daß die Statistiken möglichst auch den tatsächlichen Gegebenhei- ten entsprechen. Deshalb sollten diese Statistiken in regelmäßigen Abständen und insbesondere nach größeren Änderungen aktualisiert werden. 2.3.2 Statistiken Die kostenbasierte Optimierung steht nur zur Verfügung, wenn zu mindestens einem bei der Anfrage beteiligten Objekt (Tabellen, Indexe, Cluster) Statistiken vorhan- den sind. Diese können mittels folgender Anfrage berechnet werden: analyze table|index|cluster compute statistics Bei großen Tabellen ist eine Berechnung evtl. zu aufwendig. Daher können Statistikbe- rechnungen auch anhand eines Teiles der Tabelle ausgeführt, also geschätzt werden. Dabei kann die Anzahl der verwendeten Zeilen oder ein Prozentsatz spezifiziert wer- den: analyze table|index|cluster estimate statistics [sample rows|percent] Statistiken können auch gelöscht werden, und zwar mit: analyze table|index|cluster delete statistics All diese Funktionen stehen unter ODTO menügeführt zur Verfügung. 2.3.3 Zugriffspläne Oracle erstellt für jede Anfrage unter einem vorher bestimmten Optimierungsziel einen Zugriffsplan. Dieser enthält Informationen über die einzelnen Schritte, die bei der Abarbeitung der Anfrage ausgeführt werden. Die Ausgabe dieser Zugriffspläne ist nun sinnvoll, um z.B. zu prüfen, ob ein Index zu einer Tabelle auch tatsächlich bei der Bearbeitung der Anfrage benutzt wird. Um so einen Plan auszugeben, geht man unter Oracle folgendermaßen vor: 1. Optimierungsziel wählen mit alter session set optimizer goal = ALL ROWS|FIRST ROWS|CHOOSE|RULE Mit dem Optimierungsziel bestimmt man die Art der Erstellung des Zugriffs- plans. Bei RULE wird die regelbasierte Optimierung verwendet. FIRST ROWS und ALL ROWS entsprechen der kostenbasierten Optimierung, wobei bei FIRST ROWS auf die kürzeste Antwortzeit (also die Zeit, bis das erste Ergebnistupel er- scheint), bei ALL ROWS auf den besten Datendurchsatz hin optimiert wird. CHOOSE schließlich ist die Systemvoreinstellung und bewirkt die Verwendung der kostenbasierten Optimierung mit ALL ROWS falls zu mindestens einem An- frageobjekt Statistiken vorhanden sind, ansonsten wird die regelbasierte Op- timierung verwendet. 2. Plan erstellen und im PLAN TABLE speichern mit explain plan set statement id = ´id´ into PLAN TABLE for ´Anfrage´
8 Konzepte und Veränderungen 3. Den Plan anzeigen, z.B. mit select * from PLAN TABLE where STATEMENT ID = ´id´ Genau dies kann mit ODTO wesentlich komfortabler ausgeführt werden. Insbe- sondere wird dabei der Plan mit Einrückungen angezeigt, so daß die Reihenfolge der Abarbeitung besser zu erkennen ist. Da solche Pläne zum Teil sehr groß und damit unübersichtlich werden, hat man unter ODTO zusätzlich die Möglichkeit, solche Pläne graphisch als Baumstruktur darzustellen. Außerdem können Zugriffspläne in einer Textdatei gespeichert werden. 2.4 Gemeinsame Baumzeichenroutine Da sowohl die Abhängigkeiten der Rollen zueinander als auch die Zugriffspläne zu Anfragen als Baumstruktur dargestellt werden, wurde hierfür eine gemeinsame Rou- tine verwendet. Diese befindet sich daher im Package util.window und wurde nicht einem der neuen Packages appl.optimize und appl.security zugeordnet. Die verwendeten Klassen sowie der Algorithmus zur Baumdarstellung sind im Kapitel 4 beschrieben. 2.5 Property-Dateien Es wurde versucht, in ODTO möglichst keine Strings fest hineinzucodieren, um ein maximal veränderbares Programm zu erhalten, ohne das Programm neu übersetzen zu müssen. Einen Ausblick über die Veränderbarkeit von ODTO gibt das Kapitel 6. 2.5.1 String-Properties Die Datei Strings.properties enthält alle Beschriftungen von Knöpfen, Labels etc. und sämtliche nicht-fatalen Fehlermeldungen. Es gibt einen ersten Abschnitt mit oft benötigten Strings (z.B. OK, Cancel, Add), die von allen Klassen benutzt werden. Danach folgen Strings, die nur von einzelnen Klassen benutzt werden (Feh- lermeldungen, Fenstertitel etc.). 2.5.2 SQL-Properties Es wurden zu den bestehenden Dateien mit SQL-Properties zwei neue Dateien ge- schaffen. Sie heißen SecuritySQL.properties und OptimizeSQL.properties. Wie den Namen zu entnehmen ist, gehören sie zu den neuen Packages appl.security und appl.optimize. Diese Dateien enthalten aber nicht nur komplette SQL-Anfragen, sondern auch weitere Informationen über Spaltennamen bei Anfrageergebnissen, oder Objektprivilegien. Im Normalfall steht vor jeder Stringzeile eine Kommentar- zeile, die angibt, was der String leisten soll. So kann das Programm einfach an veränderte Systemtabellen, neue Datenbankversionen oder sonstige Umstrukturie- rungen angepaßt werden. Die meisten angegebenen SQL-Anfragen enthalten Platzhalter der Form $WERT. Diese werden von ODTO durch die aktuellen Parameter ersetzt. Wenn ein String verändert wird, dann muß er hinterher die gleichen Platzhalter (in der gleichen Anzahl, aber beliebiger Reihenfolge) enthalten.
2.6 Veränderungen an Dato 9 2.6 Veränderungen an Dato In Dato wurden die aus ODDIS bekannten Menüs hinzugefügt. Einige schon be- stehende Klassen mußten um ein paar Methoden und Variablen erweitert werden. Näheres dazu wird im Abschnitt Implementierung“ erläutert. ” 2.7 Veränderungen zu ODDIS Die Erweiterungen des Data-Dictionary wurden von ODDIS übernommen, um eine Abwärtskompatiblität“ zu von ODDIS eingerichteten Benutzern zu erhalten. Es ist ” also vor dem ersten Benutzen einer Datenbank mit ODTO die Skriptdatei von ODDIS auszuführen, die die neuen Systemtabellen für die Benutzerinformationen erstellt.Vom Datenbank-Package MANAGE USERS wird kein Gebrauch gemacht, außer von der darin enthaltenen Prozedur check tableinfos, die die Konsistenz der neuen Systemtabellen sicherstellt. 2.7.1 Veränderungen an der Benutzerverwaltung Beim Erstellen von einzelnen und mehreren Benutzern ist es nun möglich, die Option Password expire“ zu aktivieren (Paßwort des Benutzers muß geändert werden). ” Beim Erstellen oder Ändern von Benutzern kann der Benutzeraccount auch gesperrt und wieder freigegeben werden (account lock). Das Zuweisen von Objektprivilegien an einen Benutzer wurde vereinfacht: man muß nicht mehr in einem Fenster das Objekt festlegen und dann in einem überge- ordneten Fenster die betreffenden Rechte auswählen. In einem dreigeteilten Fenster kann man nacheinander Schema, Objekt und Rechte wählen und zuweisen. Aus den auswählbaren Schemaobjekten wurden Cluster, Index, Trigger und Package body entfernt, da die Oracle-Dokumentation gar keine Privilegien an diesen Schemaobjek- ten vorsieht. Dafür wurden folgende Schemaobjekte neu aufgenommen: Procedure, Snapshot und Type. Diese waren in ODDIS nicht vorhanden, Oracle8 sieht dort aber Privilegien vor. Zusammengefaßt können also an diesen Objekten Privilegien vergeben werden: • Table • View • Sequence • Procedure • Function • Package • Snapshot • Synonym • Type
10 Konzepte und Veränderungen Das Gruppenmenü wurde umstrukturiert: es enthält nun • Create Group • Alter Group • Drop Group • Add Privileges • Revoke Privileges • Edit Usersettings (Einstellungen von alter user) Zuweisungen von Benutzern zu Gruppen finden nun in Create Group“ und Al- ” ” ter Group“ statt. Etwaige Inkonsistenzen zwischen den Privilegien der Benutzer einer Gruppe führen zu folgender Vereinbarung: Es werden bei Add Privileges die Privilegien als schon zu den Gruppenmitgliedern zugewiesen angezeigt, die al- le Gruppenmitglieder zugewiesen bekommen haben (Schnittmenge der Privilegien aller Gruppenbenutzer). Bei Revoke Privileges wird die Vereinigungsmenge aller Privilegien der Gruppenbenutzer als Menge der entziehbaren Privilegien angezeigt. Das Erstellen und Bearbeiten von Profiles wurde um einige Optionen erweitert. Einstellbar sind nun zusätzlich: • PASSWORD LIFE TIME • PASSWORD REUSE TIME • PASSWORD REUSE MAX • PASSWORD LOCK TIME • PASSWORD GRACE TIME • PASSWORD VERIFY FUNCTION Das Programm stellt dabei sicher, daß PASSWORD REUSE TIME und PASSWORD REUSE MAX nicht gleichzeitig limitiert sind. 2.7.2 Veränderungen an der Zugriffsplananalyse Bei der Zugriffsplananalyse wurden einige Menüs umgestellt: • Der Menüpunkt zum Erstellen eines Plans befindet sich nicht mehr unter SQL-Actions/Explain, sondern unter Optimize/Explain. • Die Berechnung der Statistiken erfolgt unter Optimize/Analyze anstatt im Analyze-Menü bei den User-Objects. • Bei der tabellarischen Anzeige der Zugriffspläne wurden die Menüs Object, ShowTree und File zu einem Menü Plan zusammengefaßt. • Die Funktionen bei der graphischen Anzeige des Zugriffsplans sind jetzt nicht mehr über die drei Maustasten, sondern über ein Popupmenü erreichbar.
2.7 Veränderungen zu ODDIS 11 2.7.3 Veränderungen an den Navigationsmöglichkeiten Die Möglichkeiten, von einem Datenbankobjekt zu dazu in Beziehung stehenden anderen Datenbankobjekten über die Popupmenüs zu navigieren, sind in der nach- folgenden Zeichnung zu sehen. Zu beachten sind dabei die neuen Oracle8-spezifischen Informationen zu Objektdatentypen. constraints tablespaces tables indexes views columns grants types users triggers source functions packages methods attributes procedures Abbildung 2.1: Navigationsmöglichkeiten zwischen Datenbankobjekten
12 Konzepte und Veränderungen
Kapitel 3 Benutzerhandbuch 3.1 Allgemein Die Abschitte 3.2 bis 3.4 sind beinahe unverändert der Studienarbeit von Arnim von Helmolt entnommen, um eine zusammenhängende Dokumentation zu erhalten. Da sich ODTO in weiten Teilen an ODDIS orientiert, besonders auch in der äußeren Erscheinung, werden die groben Bedienungsstrukuren nicht näher erläutert und sind entsprechend in der ODDIS -Dokumentation nachzulesen. Auch das gra- phische Hilfesystem wurde nicht implementiert, dies bleibt als zukünftige Erweite- rungsmöglichkeit. 3.2 Programmstart Abbildung 3.1: Loginfenster Beim Start des Programms erscheint ein Fenster, in welchem • der verwendete JDBC-Treiber, • die zugehörige komplette URL, • der Benutzer des DBS und • sein zugehöriges Paßwort eingegeben werden können. Der standardmäßige JDBC Treiber und die passende URL sind schon vorgegeben und können im Bedarfsfall geändert werden. Hierfür ist
14 Benutzerhandbuch gegebenenfalls die JDBC-Dokumentation zur Hilfe zu nehmen. 3.3 Am Anfang ist ein Fenster Abbildung 3.2: Das Hauptfenster (DBMS Oracle) Prinzipiell ist das Hauptfenster identisch mit dem von ODDIS. Unter der Menülei- ste befindet sich ein Texteingabefeld, der Editor, in welchem eigene Anfragen for- muliert und über den Button Execute an das DBS geschickt werden können. 3.3.1 Die Menüleiste Abbildung 3.3: File-Menü Das Menü File dient dem Laden und Speichern von Anfragen. Hier ist es möglich, über den Menüpunkt New den Editorinhalt zu löschen, um eine neue Anfrage einzugeben, Open eine gespeicherte Anfrage in den Editor zu laden, Save eine eingegebene Anfrage des Editor zu speichern, Save As eine eingegebene Anfrage des Editor unter einem bestimmten Namen zu speichern,
3.3 Am Anfang ist ein Fenster 15 Exit das Programm zu beenden. Dabei wird ein commit ausgeführt. Wenn dies nicht erwüscht ist, muß vor dem Beenden ein rollback durchgeführt werden. Das Menü Options dient der Einstellung des im Editor verwendeten Zeichensat- zes. Die folgenden Menüs sind vom verwendeten DBMS abhängig und entsprechen im konkret implementierten Fall denen von ODDIS. Das optionale Menü My Queries erscheint nur, wenn entsprechende Anfragen aus dem Editor gespeichert sind. Diese sind dann unter My Queries immer wieder ausführbar und können bei Bedarf gelöscht werden. Die unter dem Menü My Queries vermerkten Anfragen bleiben nur für die Dauer der Sitzung erhalten. Abbildung 3.4: Informationsfenster Das Help Menü zeigt vorläufig nur Informationen zum Programm an. Hier sol- len als mögliche Erweiterungen verschiedene Hilfen angeboten werden, wie dies bei ODDIS der Fall ist. 3.3.2 Der Editor und das zugehörige Popupmenü Abbildung 3.5: Das Toolmenü des Editorfensters Durch das Drücken der rechten Maustaste über dem Editorfeld erscheint ein Popupmenü, welches das Ausführen und Speichern der eingegebenen Anfrage, sowie das Anhängen“ der Anfrage an die Menüleiste erlaubt. Dadurch ist es möglich, ” häufig benötigte eigene Anfragen während einer Sitzung schnell zugreifbar zu ha- ben. Es erscheint in der Menüleiste ein weiteres Menü My Queries, über welches die entsprechenden Anfragen ausgeführt werden können. Beim Anhängen kann ein
16 Benutzerhandbuch selbstdefinierter Name vergeben werden, der als Menüname verwendet wird (siehe Abbildung 3.6). Der Menüpunkte Save und Save As sind identisch mit denen im Menü File, Execute hat die gleiche Funktion wie der Execute Button. Abbildung 3.6: Dialog zur Angabe des Menünamen Abbildung 3.7: Dialog zum Löschen eines Menüs in My Queries Die gespeicherten Anfragen können auch wieder mittels des ersten Menüpunkts von My Queries, dem Menü Delete Query, gelöscht werden. Aus der erscheinenden Liste der vorhandenen Anfragen können eine oder auch mehrere Anfragen selektiert werden, die aus dem Menü My Queries entfernt werden sollen (siehe Abbildung 3.7). 3.4 Die Anzeige des Anfrageergebnisses Das Ergebnis einer Anfrage wird in einem separaten Fenster angezeigt, welches ein Menü Options zur Einstellung des Schrifttyps der Anzeige und einen Button Close zum Schließen des Fensters besitzt. Bei Bedarf kann durch die Scrollbars der ange- zeigte Ausschnitt des Anfrageergebnisses verändert werden. Die Spaltenbreite kann durch Verschieben der Linie mit Hilfe des Mauszeigers verändert werden. Bei sehr großen Anfrageergebnissen wird dieses im Hintergrund eingelesen und die bereits vorhandenen Tupel werden angezeigt. Dabei kann sich der Programmablauf ver- langsamen, bis das Ergebnis vollständig eingelesen ist (siehe Abbildung 3.8). Mit der rechten Maustaste kann eine Zeile (nicht jedoch die Titelzeile!) selektiert werden und anhand des erscheinenden Menüs die Zeile in einem separaten Fenster angezeigt oder eine neue Anfrage gestartet werden (siehe Abbildung 3.9 und 3.10). 3.5 Statistiken Um einen Zugriffsplan zu einer Anfrage mit dem Optimierungsziel der geringsten Kosten (FIRST ROWS bzw. ALL ROWS) zu erstellen, ist es nötig, Statistiken zu den an der Anfrage beteiligten Objekten zu berechnen. Diese enthalten u.a. Anga- ben zur Gesamtanzahl der Tupel von Tabellen und die Anzahl verschiedener Tupel. Sind keine Statistiken vorhanden, so steht lediglich die regelbasierte Optimierung
3.5 Statistiken 17 Abbildung 3.8: Anzeige eines Anfrageergebnisses Abbildung 3.9: Menü nach Selektion einer Zeile des Anfrageergebnisses (angezeigt werden die möglichen Anfragen des Datenbankobjekts tables (RULE) zur Verfügung. Deshalb sollten Statistiken in regelmäßigen Abständen und insbesondere nach größeren Änderungen erstellt werden. Der Menüpunkt Analyze aus dem Optimize-Menü bietet nun die Möglichkeit, sich die Tabellen, Indexe oder Cluster des Benutzers tabellarisch anzeigen zu lassen. Im Ergebnisfenster kann dann mit der rechten Maustaste ein Objekt markiert wer- den. Durch anschließende Wahl eines der Punkte Compute, Estimate oder Delete können dann Statistiken zu diesem Objekt berechnet, geschätzt oder gelöscht wer- den. Die Auswahl eines der Menüpunkte öffnet jeweils einen Dialog. • Compute • ok startet die Berechnung der Statistiken zum gewählten Objekt. • help gibt einen kurzen Hilfstext zu dieser Funktion aus. • cancel bricht die Bearbeitung ab.
18 Benutzerhandbuch Abbildung 3.10: Anzeige eines Tupels Abbildung 3.11: Analyze-Menü • Estimate Hier muß zusätzlich der Anteil der Tabelle, dem die Schätzdaten entnommen werden, spezifiziert werden (in Zeilen oder Prozent). Der Dialog enthält die folgenden Elemente • ein Feld zur Eingabe eines positiven, ganzzahligen Wertes. • zwei Knöpfe zur Entscheidung, ob die obige Angabe als Zeilenzahl oder als Prozentangabe aufgefasst werden soll. • ein Feld, in dem bei einer fehlerhaften Eingabe eine entsprechende Mel- dung erfolgt
3.5 Statistiken 19 Abbildung 3.12: Statistics-Menü Abbildung 3.13: Calculate-Dialog • ok startet die Schätzung der Statistiken zum gewählten Objekt. Ist die Eingabe im Integer-Feld fehlerhaft, so wird nur eine Meldung aus- gegeben. Bei Prozentangaben über 100% wird der Wert intern auf 100 gesetzt, bei Werten kleiner als 1 wird als Standardwert 50% angenom- men und die Berechnung gestartet. • help gibt einen kurzen Hilfstext zu dieser Funktion aus. • cancel bricht die Bearbeitung ab. • Delete Der Dialog enthält die folgenden Elemente • ok löscht die Statistiken zum gewählten Objekt. • help gibt einen kurzen Hilfstext zu dieser Funktion aus. • cancel bricht die Bearbeitung ab.
20 Benutzerhandbuch Abbildung 3.14: Estimate-Dialog Abbildung 3.15: Delete-Dialog 3.6 Zugriffspläne Der Menüpunkt Explain des Optimize-Menüs gibt zu der im Hauptfenster an- gegebenen Anfrage einen Zugriffsplan in tabellarischer Form aus. Dabei muß im Untermenü noch eines der vier möglichen Optimierungsziele ausgewählt werden. Dies sind im Einzelnen: • CHOOSE Sind Statistiken zu mindestens einem der beteiligten Objekte verfügbar, so wird der kostenbasierte Ansatz mit Optimierungsziel ALL ROWS benutzt. Andernfalls wird RULE verwendet. • FIRST ROWS Es wird hinsichtlich der besten Antwortzeit optimiert. • ALL ROWS Bei der Optimierung steht der beste Datendurchsatz im Vorder- grund. • RULE Es werden die fest implementierten Optimierungsregeln (z.B. die der algebraischen Optimierung) benutzt. Das Ergebnisfenster hat ein Plan-Menü mit den Menüpunkten • Show Tree zeigt den Plan in einer Baumdarstellung an. • Object zeigt Informationen zu dem vorher mit der rechten Maustaste gewähl- ten Objekt an. Das Objekt ist das Objekt, mit dem in der gewählten Zeile eine Operation ausgeführt wird. Ein Ergebnis erscheint nur, wenn dieses Ob- jekt nicht null ist, d.h. insbesondere nicht bei Operationen wie SORT oder MERGE JOIN. • Object Details zeigt detailierte Informationen zu dem gewählten Objekt an. Dabei gelten die gleichen Bedingungen wie beim Punkt Object. • Save Plan as speichert den Plan in Textform unter einem in einem Dateidia- log zu wählenden Namen ab.
3.7 Benutzerverwaltung 21 Abbildung 3.16: Explain-Menü Abbildung 3.17: Plan-Menü 3.7 Benutzerverwaltung 3.7.1 Benutzer Nach dem Wählen des Menüpunktes user aus dem Security-Menü erscheint ein Fenster, das Daten zu allen Benutzern des DBMS enthält. Ausgehend von diesem Fenster können einzelne oder mehrere Benutzer erstellt, einzelne Benutzer gelöscht, deren Einstellungen und Rechte/Rollen eingesehen und verändert werden. • Einen Benutzer erstellen: Nach dem Auswählen von create user öffnet sich ein Fenster, in dem alle Einstellungen vorgenommen werden können. Das Verhalten beim Zuweisen von Default-Rollen ist das gleiche wie bei ODDIS: die default-role Einstellung
22 Benutzerhandbuch Abbildung 3.18: Fenster mit der Baumdarstellung eines Zugriffsplans des neuen Benutzers bleibt auf ALL und die ausgewählten Rollen werden dem neuen Benutzer zugewiesen (und damit automatisch zu Default-Rollen). Der neue Benutzer wird erst nach dem Betätigen des create-Knopfes ertellt. • Mehrere Benutzer mit fortlaufendem Musternamen erstellen: Nach dem Anwählen von create set of users öffnet sich ein sehr ähnli- ches Fenster. Hier ist zur Erstellung der Benutzernamen ein Namenspräfix, die Anzahl der Zahlenstellen und Start-/Endnummer anzugeben. Es werden dann Namen wie Mustername0001“, Mustername0002“ u.s.w. vergeben. Wenn aus ” ” Authentifikationsmethode Passwortauthentifikation angewählt wurde, dann werden zufällige Paßwörter vergeben. Diese werden in einer Systemtabelle (standardmäßig USER SET PASSWD wie bei ODDIS) abgespeichert und so dem Administrator zugänglich gemacht. • Passwortliste anzeigen: Die Tabelle mit den Passwörtern zu den neu erstellten Benutzern kann durch Anwählen des Menupunktes show password list angezeigt werden. Die Liste kann dann zur Weiterverarbeitung in einer Datei gespeichert und zur Sicherheit aus der Datenbank gelöscht werden. • Einstellungen eines Benutzers verändern: Das Fenster wird durch alter user aufgerufen, nachdem mit der rechten Maustaste ein Benutzer angewählt wurde und entspricht dem von create user bis auf die fehlende Namenseingabe. Es können nur Rollen zu Default-
3.7 Benutzerverwaltung 23 Rollen des Benutzers gemacht werden, die dem Benutzer bereits zugewiesen und keine Default-Rollen sind. • Löschen eines Benutzers: Nach dem Markieren eines Benutzers mit der rechten Maustaste und dem Auswählen des Menüpunktes drop user wird der Benutzer nach dem Bestäti- gen einer Sicherheitsabfrage gelöscht. Hierbei kann die Option cascade akti- viert werden, die mit dem Benutzer auch alle seine Objekte löscht. • Privilegien und Rollen anzeigen/verändern: Das Auswählen des Menüpunkes edit privileges nach dem Markieren ei- Abbildung 3.19: Fenster zum Anzeigen und Ändern von Benutzerprivilegien nes Benutzers öffnet ein Fenster, das die Systemprivilegien, Objektprivilegien oder Rollen des gewählten Benutzers anzeigt. An drei Auswahlknöpfen kann man die anzuzeigende Privilegart auswählen. Mit der Maus ausgewählte Pri- vilegien/Rollen werden mit dem Remove-Knopf entzogen. Auch hier muß erst eine Sicherheitsabfrage bejaht werden. Privilegien/Rollen zuweisen geschieht mit dem Add-Knopf. Bei Systemprivilegien und Rollen erscheint ein kleines Fenster mit der Liste aller noch nicht zugewiesenen Privilegien/Rollen. Hier werden die gewünschten ausgewählt und nach Bestätigung dem Benutzer zu- gewiesen. Etwas komplizierter ist die Sache bei Objektprivilegien: es erscheint ein Fenster mit drei großen Listen. In der linken Liste sind alle Benutzer des Systems aufgeführt. Nach dem Anwählen eines dieser Benutzer erscheinen in der mittleren Liste alle Objekte des durch die Auswahlknöpfe gewählten Typs des gewählten Benutzers. Nach Auswahl eines der Objekte erscheinen in der rechten Liste alle noch nicht vergebenen Privilegien, die an diesem Objekt vergeben werden können. Hier werden dann die gewünschten Privilegien aus- gewählt und nach Betätigen des Add-Knopfes zugewiesen. 3.7.2 Rollen Alle Rollen des Systems bekommt man angezeigt, nachdem im Security-Menü der Punkt Roles ausgewählt wurde. Die Einstellungen zu Rollen werden wie bei Benutzern getätigt.
24 Benutzerhandbuch • Rolle erstellen: Es muß ein Name für die neue Rolle und die Art der Authentifikation angege- ben werden. • Rolle ändern: Hier kann nur die Art der Authentifikation geändert werden. • Rolle Löschen: Die markierte Rolle wird nach Bestätigen einer Sicherheitsabfrage gelöscht. • Privilegien und zugewiesene Rollen: Das Zuweisen und Entziehen von Rechten geschieht vollständig analog zu Be- nuztern. • Baum der zugewiesenen Rollen anzeigen: Nach dem Markieren einer Rolle und dem Auswählen des Menüpunktes Roles tree wird ein Fenster geöffnet, das alle dieser Rolle direkt und indirekt zuge- wiesenen Rollen graphisch in Form eines Baums anzeigt. Mit einem Mausklick der rechten Maustaste auf eine angezeigte Rolle wird das zugehörige Fenster zum Anzeigen und Editieren der Privilegien geöffnet. 3.7.3 Profiles Für das Anzeigen der verfügbaren Benutzerprofile ist der Menüpunkt Profiles zuständig. • Profile erstellen: Der Menüpunkt Create profile öffnet ein Fenster, in dem alle Limits für das Profile eingestellt werden können. Voreingestellt ist hier der Wert default“, ” also der Wert des Default-Profiles. • Profile ändern: Es erscheint das gleiche Fenster, es sind aber die derzeit eingestellten Werte angegeben und der Name kann nicht editiert werden. • Resourcekosten anzeigen/ändern: Der Menüpunkt Edit resource cost öffnet ein kleines Fenster, in dem die derzeitigen Kosten für die Datenbankresourcen angezeigt werden und geändert werden können. 3.7.4 Benutzergruppen Alle eingerichteten Benutzergruppen werden durch den Menüpunkt Groups ange- zeigt. Benutzergruppen erleichtern die Administration von vielen Benutzern mit meistens (aber nicht notwendig) gleichen Rechten und Einstellungen. • Neue Gruppe erstellen: Der Menüpunkt Create group öffnet das Fenster. Es muß ein Name angege- ben werden, die Einträge Remarks“ und Expiredate“ können leer gelassen ” ” werden. Im unteren Teil des Fensters befinden sich zwei Listen: eine mit den Be- nutzern, die der Gruppe zugeordnet werden sollen und eine mit allen restlichen Benutzern (also auch Benutzern, die bereits einer anderen Gruppe zugewiesen sind). Wird ein Benutzer, der bereits zu einer anderen Gruppe gehörte, der neuen Gruppe zugewiesen, dann wird er aus der alten Gruppe entfernt. • Gruppe ändern: Das Fenster des Menüpunktes Alter group entspricht dem von Create group.
3.7 Benutzerverwaltung 25 Abbildung 3.20: Fenster zum Erstellen einer neuen Gruppe • Einstellungen der Gruppenbenutzer: Die Einstellungen die man durch Edit usersettings tätigen kann, entspre- chen denen von Alter user für alle Gruppenbenutzer. Da bei den Einstel- lungen der Gruppenbenutzer Inkonsistenzen möglich sind, haben die Aus- wahlboxen einen zusätzlichen Eintrag: No change. Bleibt dieser Eintrag aus- gewählt, werden die betreffenden Einstellungen der Benutzer nicht verändert und können so inkonsistent bleiben, wenn das erwünscht ist. Bei der Auswahl eines anderen Auswahleintrags wird die Einstellung für alle Gruppenbenutzer so gesetzt, unabhängig von der vorherigen Einstellung. Bei den Default-Rollen werden die Rollen angezeigt, die Default-Rollen von allen Gruppenbenutzern sind. Entsprechend können nur Rollen zu Default-Rollen gemacht werden, die bereits allen Gruppenbenutzern zugewiesen sind. • Privilegien den Gruppenbenutzern entziehen: Hier gibt es jeweils einen Menüpunkt für das Entziehen und Zuweisen von Privilegien. Der Grund dafür sind wieder mögliche Inkonsistenzen zwischen den Gruppenbenutzern. Wird der Menüpunkt Revoke privileges gewählt, dann erscheint fast das gleiche Fenster wie bei Privilegienvergabe an Benutzer bis auf den fehlenden Add-Knopf. Angezeigt wird die Obermenge der Privilegien aller Gruppenbenutzer. Markierte Privilegien/Rollen können wie bei einzelnen Benutzern entzogen werden. Mit diesem Fenster kann man sich außerdem einen Überblick über die Rechte der Gruppenbenutzer verschaffen. • Privilegien an Gruppenbenutzer vergeben: Durch Add privileges öffnet sich das gleiche Fenster, nur diesmal ohne Remove- dafür mit Add-Knopf. Angezeigt wird hier aber die Schnittmenge der Privilegien/Rollen aller Gruppenbenutzer. Das Hinzufügen von Privilegien wird analog zu einzelnen Benutzern vorgenommen.
26 Benutzerhandbuch
Kapitel 4 Implementierung Die Implementierung der Datenbankschnittstelle und die möglichst datenbankun- abhängige Programmierung waren durch Dato schon vorgegeben und sind der Do- kumentation der Studienarbeit von Arnim von Helmolt zu entnehmen. Die Hauptaufgabenteile Benutzerverwaltung“ und Zugriffsanalyse“ wurden je- ” ” weils als neue Packages zu Dato hinzugefügt. Die neuen Packages sind appl.security und appl.optimize. Zusätzlich wurden neue Klassen in die schon vorhandenen Packages appl.odto (vorher appl.dato) und util.window eingefügt. Es wurde versucht, möglichst wenig in vorhandenen Quelltexten zu verändern. 4.1 Package appl.odto 4.1.1 Allgemeine Bemerkungen Hier wurden die beiden für die neuen Funktionen nötigen Menüs hinzugefügt. 4.1.2 Die neuen Klassen 4.1.2.1 OptimizeMenu Diese Klasse implementiert das Optimierungsmenü für das ODTO-Hauptfenster. Konstruktor: public OptimizeMenu(ResourceBundle rb, Odto odto) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. Menüpunkte: • Analyze zeigt Informationen zu Tabellen, Indexen oder Clustern an und ermöglicht weiterhin das Erstellen bzw. Löschen von Statistiken zu den ver- schiedenen Datenbankobjekten. • Explain erstellt den Zugriffsplan zur Anfrage im Hauptfenster und zeigt ihn tabellarisch an.
28 Implementierung 4.1.2.2 SecurityMenu Diese Klasse implementiert das Sicherheits-/Benutzerverwaltungsmenü für das ODTO- Hauptfenster. Dieses Menü wird nur für Benutzer mit Administratorrechten und Rechten an den neuen Systemtabellen des Benutzers SYS angezeigt. Die Benutzer, die diese Rechte besitzen und Zugriff auf das Security-Menü haben sollen, werden in der Datei classes/appl/odto/Odto.properties aufgelistet. Näheres dazu steht im Installationshandbuch. Konstruktor: public SecurityMenu(ResourceBundle rb, Odto odto) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. Menüpunkte: • User zeigt alle Benutzer des Datenbanksystems an. Dann können Benutzer erstellt, gelöscht, deren Rechte eingesehen und verändert werden etc. • Groups zeigt alle Benutzergruppen des Datenbanksystems an. • Profiles zeigt alle Profiles des Datenbanksystems an. • Roles zeigt alle Rollen in dem Datenbanksystem an.
4.2 Package appl.optimize 29 4.2 Package appl.optimize 4.2.1 Allgemeine Bemerkungen Hier sind die Klassen zur Verwaltung von Statistiken und zum Berechnen von Zu- griffsplänen zusammengefasst. Die Klassen für die graphische Darstellung der Zu- griffspläne, die auch für die Darstellung von Rollenabhängigkeiten verwendet werden, befinden sich im Package util.window. 4.2.2 Die Klassen 4.2.2.1 ExplainPlan Klasse, die ein explain plan-Kommando ausführt und den Plan dann in Tabellen- form anzeigt. Das anzeigende SQLResultSetView enthält ein ShowTreeMenu, das weitere Aktionen ermöglicht. Ein Objekt dieser Klasse wird durch den Menüpunkt ExplainPlan des Optimize-Menüs erzeugt. Konstruktor: public ExplainPlan(ResourceBundle rb, Odto odto, String goal) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. • String goal das beim explain plan-Kommando verwendete Optimierungsziel. OptimizeMenu erzeugt benutzt benutzt CommitYesNoFrame ExplainPlan HelpFrame benutzt benutzt benutzt SQLPort SQLResultSetView Odto Abbildung 4.1: Klassen in Beziehung mit ExplainPlan 4.2.2.2 CommitYesNoFrame Fensterklasse, die den Dialog enthält, der den Benutzer fragt, ob er damit einver- standen ist, daß ein commit-Kommando ausgeführt wird. Das commit-Kommando muß nach dem Eintragen eines berechneten Zugriffs- plans in die Tabelle PLAN TABLE erfolgen, da diese sonst für andere Benutzer gesperrt bleibt. Konstruktor: public CommitYesNoFrame(Odto odto, String question, ExplainPlan explainplan) Parameter: • Odto odto das Hauptprogramm.
30 Implementierung • String question die im Dialogfenster anzuzeigende Frage. • ExplainPlan explainplan das ExplainPlan-Objekt, das dieses Objekt erzeugt hat. 4.2.2.3 ShowTreeMenu Menü für das durch ExplainPlan erzeugte SQLResultSetView. Konstruktor: public ShowTreeMenu(ResourceBundle rb, Odto odto, String goal) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. • String goal das beim explain plan-Kommando verwendete Optimierungsziel. Dies wird beim Abspeichern des Plans in eine Textdatei benötigt, da dort auch die Anfrage und das Optimierungsziel mit eingetragen werden. Menüpunkte: • Show Tree zeigt den Plan in einer Baumdarstellung an. • Object zeigt Informationen zu dem gewählten Objekt an. • Object Details zeigt detailierte Informationen zu dem gewählten Objekt an. • Save Plan as speichert den Plan in Textform unter einem zu wählenden Na- men ab. erzeugt ExplainPlan SQLResultSetView enthält erzeugt ShowTreeMenu OptimizerTreeNode erzeugt werden angezeigt in sendet Koordinaten erzeugt TreeFrame TreeCanvas Abbildung 4.2: Klassen in Beziehung mit ShowTreeMenu
4.2 Package appl.optimize 31 4.2.2.4 TablesStatisticsMenu Statistikmenü für das SQLResultSetView, das die Tables anzeigt. Konstruktor: public TablesStatisticsMenu(ResourceBundle rb, Odto odto) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. Menüpunkte: • Compute berechnet die Statistiken für die gewählte Tabelle. • Estimate schätzt die Statistiken für die gewählte Tabelle. • Delete löscht die Statistiken für die gewählte Tabelle. erzeugt OptimizeMenu SQLResultSetView erzeugt enthält TablesStatisticsMenu erzeugt erzeugt erzeugt CalculateStatisticsFrame EstimateStatisticsFrame DeleteStatisticsFrame Abbildung 4.3: Klassen in Beziehung mit TablesStatisticsMenu 4.2.2.5 IndexesStatisticsMenu Statistikmenü für das SQLResultSetView, das die Indexes anzeigt. Konstruktor: public IndexesStatisticsMenu(ResourceBundle rb, Odto odto) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. Menüpunkte: • Compute berechnet die Statistiken für den gewählten Indexe. • Estimate schätzt die Statistiken für den gewählten Indexe. • Delete löscht die Statistiken für den gewählten Indexe.
32 Implementierung 4.2.2.6 ClustersStatisticsMenu Statistikmenü für das SQLResultSetView, das die Clusters anzeigt. Konstruktor: public ClustersStatisticsMenu(ResourceBundle rb, Odto odto) Parameter: • ResourceBundle rb für die Beschriftungen. • Odto odto das Hauptprogramm. Menüpunkte: • Compute berechnet die Statistiken für den gewählten Cluster. • Estimate schätzt die Statistiken für den gewählten Cluster. • Delete löscht die Statistiken für den gewählten Cluster. 4.2.2.7 CalculateStatisticsFrame Fenster, das den Dialog zum Berechnen der Statistiken enthält. Es wird durch die Wahl von Calculate aus dem jeweiligen Statistics-Menü geöffnet. Diese Klasse enthält die statische Funktion replaceVariable, die in Anfragen, die in der Regel aus den Propertydateien ausgelesen werden, Variablen der Form $varia- ble durch einen entsprechenden Wert ersetzt. Diese Methode wird von den meisten Klassen des Packages benutzt. Konstruktor: public CalculateStatisticsFrame(Odto odto, SQLResultSetView rsview, String propname, String helpname) Parameter: • Odto odto das Hauptprogramm. • SQLResultSetView rsview Anfrageergebnisfenster, von dem der Aufruf ausging. • String propname Bezeichnung in der Propertydatei für die zu wählende Spalte (die, in der der Name des im SQLResultSetView gewählten Objektes steht). • String helpname Bezeichnung in der Propertydatei für den Hilfstext. 4.2.2.8 EstimateStatisticsFrame Fenster, das den Dialog zum Schätzen der Statistiken enthält. Es wird durch die Wahl von Estimate aus dem jeweiligen Statistics-Menü geöffnet. Konstruktor: public EstimateStatisticsFrame(Odto odto, SQLResultSetView rsview, String propname, String helpname) Parameter: • Odto odto das Hauptprogramm. • SQLResultSetView rsview Anfrageergebnisfenster, von dem der Aufruf ausging. • String propname Bezeichnung in der Propertydatei für die zu wählende Spalte (die, in der der Name des im SQLResultSetView gewählten Objektes steht). • String helpname Bezeichnung in der Propertydatei für den Hilfstext.
4.2 Package appl.optimize 33 4.2.2.9 DeleteStatisticsFrame Fenster, das den Dialog zum Löschen der Statistiken enthält. Es wird durch die Wahl von Delete aus dem jeweiligen Statistics-Menü geöffnet. Konstruktor: public DeleteStatisticsFrame(Odto odto, SQLResultSetView rsview, String propname, String helpname) Parameter: • Odto odto das Hauptprogramm. • SQLResultSetView rsview Anfrageergebnisfenster, von dem der Aufruf ausging. • String propname Bezeichnung in der Propertydatei für die zu wählende Spalte (die, in der der Name des im SQLResultSetView gewählten Objektes steht). • String helpname Bezeichnung in der Propertydatei für den Hilfstext. Generell existiert zu allen Menüs eine entsprechende PopupMenu-Klasse, die das gleiche Menü als Popup-Menü implementiert.
34 Implementierung 4.3 Package appl.security 4.3.1 Die Klasse ManageUsers Die Klasse ManageUsers aus dem Package appl.security ist die eine der bei- den statischen Klassen des Package und die daher nicht von Frame oder MyMe- nu abgeleitet (wie die anderen Klassen). Sie enthält die Methoden, die bei ODDIS als PL/SQL-Prozeduren im Datenbankpackage MANAGE USERS enthalten waren. Methoden von ManageUsers werden von allen Klassen benutzt, die Gruppendaten oder Benutzerdaten verändern. Es sind folgende Methoden enthalten: • boolean createGroup (Odto odto, ResourceBundle rbsql, String group, String expiredate, String remarks) – Erstellt eine neue Gruppe mit dem Namen group, dem Gültigkeitsdatum expiredate und der Bemerkung remarks. – Prüft, ob schon eine Gruppe mit dem angegebenen Namen existiert. Wenn dies der Fall ist, wird in einem Fenster eine entsprechende Fehlermeldung angezeigt. – Liefert true, falls kein Fehler auftrat. – Liefert false, wenn ein Fehler beim Erstellen auftrat oder es einen Na- menskonflikt gab. • boolean alterGroup (Odto odto, ResourceBundle rbsql, String group, int what, String value) – ändert Gültigkeitsdatum oder Bemerkung zur Gruppe group. – what kann die Werte ManageUsers.EXPIRE oder ManageUsers.REMARK annehmen. – Prüft nicht, ob die Gruppe schon existiert, da dieser Fall aufgrund des GUI ausgeschlossen werden kann. – Liefert true, falls kein Fehler auftrat, sonst false. • boolean dropGroup (Odto odto, ResourceBundle rbsql, String group) – Löscht die Gruppe mit dem Namen group. – Prüft nicht, ob die Gruppe schon existiert, da dieser Fall aufgrund des GUI ausgeschlossen werden kann. – Prüft, ob noch Benutzer existieren, die dieser Gruppe zugeordnet sind. Wenn dies der Fall ist, wird eine Fehlermeldung ausgegeben und die Grup- pe nicht gelöscht. – Liefert true, wenn die Gruppe gelöscht werden konnte. – Liefert false, wenn ein Fehler auftrat oder noch zugeordnete Benutzer existieren. • boolean addToGroup (Odto odto, ResourceBundle rbsql, String user, String group) – Ordnet den Benutzer user der Gruppe group zu.
4.3 Package appl.security 35 – Ein Benutzer kann zu einem Zeitpunkt immer nur einer Gruppe zugehörig sein. – Prüft nicht, ob Benutzer und/oder Gruppe existieren. – Liefert true bei Erfolg, sonst false. • boolean removeFromGroup (Odto odto, ResourceBundle rbsql, String user, String group) – Entfernt den Benutzer user aus der Gruppe group. – Prüft nicht, ob Benutzer und/oder Gruppe existieren. – Liefert true bei Erfolg, sonst false. • boolean alterUserInfos (Odto odto, ResourceBundle rbsql, String user, int what, String value) – Erstellt anfangs einen leeren Satz mit Benutzerinformationen, wenn zu dem Benutzer user noch keine Informationen gespeichert sein sollten. – ändert Bemerkung, Gültigkeitsdatum, Vornamen oder Nachnamen des Benutzers in den neuen Wert value. – what kann die Werte ManageUsers.EXPIRE, ManageUsers.REMARK, Manage- Users.FIRSTNAME oder ManageUsers.LASTNAME annehmen. – Prüft nicht, ob der Benutzer existiert. – Liefert true bei Erfolg, sonst false. • void performDataCheck() – Prüft, ob in SecuritySQL.properties die Variable manageusers.datacheckproc gesetzt ist. Ist der String leer, so wird nichts getan. – Sonst wird der String als parameterlose PL/SQL-Prozedur der Datenbank aufgerufen. – Die Prozedur soll die Konsistenz der Benutzer- und Gruppendaten sicher- stellen. Es dürfen z.B. dann keine nicht existenten Datenbankbenutzer einer Gruppe zugeordnet sein. – Die voreingestellte Prozedur ist die Prozedur check tableinfos aus dem ODDIS-Package MANAGE USERS, da die Speicherung der Benutzerda- ten von ODDIS übernommen wurde. Diese PL/SQL-Prozedur wurde nicht in Java implementiert, um die komplette Speicherung der zusätzlichen Benutzerdaten umstrukturieren zu können. – Wird am Anfang jeder der anderen Methoden aus ManageUsers aufge- rufen. – Wird von anderen Klassen aufgerufen, bevor sie auf alle Benutzer einer Gruppe zugreifen wollen (Anfrage-String manageusers.usersofgroup).
36 Implementierung 4.3.2 Weitere implementierte Klassen und ihre Beziehungen Nahezu alle Klassen der Packages appl.security enthalten eine graphische Benut- zerschnittstelle. Diese wurde mit Hilfe des Java-Package java.awt (Abstract Win- dow Toolkit) implementiert. Als LayoutManager kommt dabei fast ausschließlich das mächtige GridBagLayout zum Einsatz. Zum Setzen der Constraints wird die bereits von Arnim von Helmolt eingeführte Klasse ConstraintSet benutzt (Package util.misc). Die Klassen, die bestehende Einstellungen in der Datenbank ändern können, be- sitzen oft eine private Methode setAllItems() ohne Parameter. Diese Methode wird am Ende des Konstruktors aufgerufen und hat die Aufgabe, die Objekte der graphi- schen Benutzerschnittstelle so einzustellen, wie es dem aktuellen Datenbankzustand entspricht. Die Methode stellt zahlreiche Anfragen an die Datenbank, interpretiert die Ergebnisse und setzt entsprechend Checkboxen, Choiceboxen, füllt Textfelder etc. Dies funktioniert natürlich nicht bei Passwörtern, da diese nicht aus der Da- tenbank abrufbar sind. Daher ist das Passwort-Eingabefeld immer leer und es gilt die Vereinbarung: Wird nichts eingegeben, so wird das bestehende Passwort nicht geändert. 4.3.2.1 EditUserFrame SQLResultSetView Odto benutzt benutzt SQLPort benutzt erzeugt EditUserFrame UsersMenu benutzt benutzt EditUserFrame: EditUserFrame: AddRoleFrame EditQuotasFrame Abbildung 4.4: Klassen in Beziehung mit EditUserFrame
4.3 Package appl.security 37 Konstruktor: public EditUserFrame(Odto odto, SQLResultSetView rsview, boolean create) Parameter: • odto Eine Referenz auf das Hauptfenster der laufenden Applikation. über die zahlreichen get??-Methoden (besonders die von DBApplication geerbten) kann diese Klasse u.A. an Referenzen auf die String-Properties und den geöff- neten SQLPort kommen. • rsview Eine Referenz auf das übergeordnete Fenster. Von diesem werden die Methoden tupelSelected, getTitleRow und getSelectedTupel benutzt, um her- auszufinden, welchen Eintrag der Benutzer angewählt hat. • create Diese Klasse hat eine Doppelfunktion: sie kann als Fenster zum Ein- richten eines neuen Datenbankbenutzers oder zum ändern eines bestehenden Benutzers verwendet werden. Ist dieser Parameter true, dann ist das zu öff- nende Fenster Create user“ und sonst Alter user“. ” ” Das Fenster ermöglicht die Einstellung des Benutzernamens (nur bei create==true), die Art der Authentifikation, zu benutzende Tablespaces, Quotas auf diesen Tablespaces, Profile, Status des Accounts, des echten“ Namens, Grup- ” penzugehörigkeit und Rollen des Benutzers. Die Klasse hat eine private Klasse: AddRoleFrame. Dies ist ein kleines Fenster, das eng mit dem übergeordneten EditUserFrame verbunden ist. AddRoleFrame öffnet sich, nachdem der Knopf zum Hinzufügen einer Rolle gedrückt wurde und liefert eine Auswahlliste aller noch nicht vergebenen Rollen und fügt ausgewählte Rollen zu der Liste im EditUserFrame hinzu. 4.3.2.2 EditSetUsersFrame Konstruktor: public EditSetUsersFrame(Odto odto, SQLResultSetView rsview, boolean create) Parameter: Siehe EditUserFrame Das Fenster hat auch vom graphischen Aufbau große ähnlichkeit mit dem Edit- UserFrame, unterscheidet sich aber stark in der Anwendung. EditSetUsersFrame kann bei (create==true) eine Menge von Benutzern mit gleichen Benutzereinstel- lungen erzeugen und gleich einer Benutzergruppe zuweisen. Es werden automatische fortlaufende Benutzernamen vergeben, zufällige Paßwörter generiert und zugewiesen usw. Bei (create==false) können die Benutzereinstellungen für alle Benutzer einer Gruppe durchgeführt werden. Auch diese Klasse besitzt eine private Klasse AddRoleFrame. Diese unterscheidet sich in der Implementierung von der privaten Klasse von EditUserFrame, aber nicht in der Funktion.
Sie können auch lesen