Datenbanken Ausschnitte eines nichtkommerziellen relationalen Datenbank-Systems Zahlreiche Anwendungen erfordern heute den Einsatz von DatenbankSystemen und moderner DatenbankTechnologie. Neben bekannten, traditionellen Anwendungen aus den Bereichen Wirtschaft und Industrie finden Datenbanken immer stärker Einzug bei kleineren Applikationen. Insbesondere für Anwendungen des Internets wird auch der nicht so versierte Programmierer gezwungen, komplexe Datenbank-Technologie zum Verwalten und Verändern bestehender bzw. neuer Datenbestände einzusetzen. Ein typisches Beispiel ist der Internet-Shop. Weitere Beispiele sind Auswertungen von Log-Dateien oder die Bereitstellung von beliebigen Datensammlungen in der Welt. Im Folgenden soll der Aspekt kleinerer und mittlerer Datenbank-Anwendungen speziell beleuchtet werden. Dabei soll insbesondere auf die Punkte Handling, SQL Unterstützung, Sicherheit sowie Backup und Recovery des nichtkommerziellen Datenbank-Systems MySQL eingegangen werden. Handling Meist stehen nur begrenzte Resourcen zur Verfügung: geringe Manpower, geringes Investitionspotential für ein teures Softwarepaket und begrenzte Zeit für Einarbeitung und den geplanten Einsatz. In vielen Fällen ist die Frage, wie viel „Datenbank“ überhaupt eingesetzt werden darf oder soll, schon fast rhetorisch und an vielen Stellen verzichtet man letztendlich gänzlich auf ein solches System. Das muss nicht so sein. Wie so oft gibt Thomas Birke, Rechenzentrum Zeitschrift des Rechenzentrums es – gerade im Bereich Software – für eine bestimmte Klasse von Anwendungen eine vernünftige und zudem kostenlose Alternative zu bestehenden kommerziellen Datenbank-Systemen. MySQL ist ein solches Paket (http://www.mysql.com/). Es unterliegt der GNU Software Lizenz und kann/darf sich an sehr vielen Stellen mit kommerziellen Systemen messen. Rasch aus dem Internet geladen, lässt sich MySQL auf jedes gängige Betriebssystem installieren. Für Windows-User bedeutet dies, dass man nach nur wenigen Mausklicks schnell sein Ziel erreicht hat: Ein vollständig installiertes, lauffähiges relationales Datenbank-System mit intelligent gewählten Startparametern kann eingesetzt werden. Mit dem umfangreichen Handbuch können schnell erste administrative Schritte durchgeführt werden – allerdings nur auf der Konsole unter dem Kommando mysql. Besonders komfortabel für den interessierten Laien ist das Zusatzpaket „MySQL Front“, welches leider nur unter Windows erhältlich ist. Mit Hilfe dieses grafischen Administrations-Tools lassen sich mit nur ein paar Klicks rasch Benutzer verwalten, Datenbanken einrichten und SQL (Structured Query Language)-Statements in einem entsprechenden Editor absetzen. Investiert man noch etwas mehr Zeit, hat man nahezu genau so schnell äußerst effizient implementierte und nahezu dem Standard entsprechende DatenbankSchnittstellen installiert, wie zum Beispiel das traditionelle DBI für PERL, aber auch PHP, C/C++ bzw. JDBC für JAVA. Diese Schnittstellen können für die Entwicklung von Internet-Applikationen, insbesondere der Programmierung von CGI-Skripten (Common Gateway Interface) sowie Java Applets und Servlets eingesetzt werden. Alle hierzu notwendigen Softwarepakete lassen sich schnell und reibungslos installieren. Bei Problemen kann man auf zahlreiche im Internet befindlichen Newsgroups zurückgreifen, die einem oft mit Rat und Tat zur Seite stehen. Insgesamt bedeutet dies perfektes Datenbank-Handling und Support zum Nulltarif. Ebenfalls positiv zu vermerken ist, dass auf Grund des regen Interesses an MySQL ständige Upgrades erstellt werden (derzeit wird MySQL Version 4 vorbereitet). Darin werden bestehende Defizite gefixt, wie zum Beispiel fehlendes Transaktionsmanagement bzw. sonstige Bugs. Dies bedeutet für den User zwar, dass ständig neue Software-Updates notwendig sind, jedoch wird von Herstellerseite die Software tatsächlich gewartet. SQL Wie sieht es aber mit der DatenbankFunktionalität aus? Ein großes Manko bildet sicherlich die nicht vollständige Umsetzung des SQL-92 – oder gar des SQL-99 – Standards. Komplexe Anfragen können nur mittels ein paar komplizierten MySQL- spezifischen Kunstgriffen umgesetzt werden. Ein typisches Beispiel ist die Umsetzung von SQL-Statements, in denen Zwischenergebnisse von SQL-Anfragen verarbeitet werden (SubQueries). Beispiel: „Auswahl der Beurteilungen von Studentinnen“ In SQL übersetzt lautet die Anfrage: SELECT * FROM beurteilung WHERE beurteilung.student_id IN (SELECT student.id FROM student WHERE student.geschlecht = “weiblich“); 9 Datenbanken In MySQL muss dies wie folgt programmiert werden: SELECT student.* FROM student, beurteilung WHERE beurteilung.student_id = student.id AND student.geschlecht=“weiblich“; Noch schlimmer sieht das Ganze bei Negation aus. Beispiel: „Auswahl aller Studenten mit perfekter Anwesenheit, d.h. Studenten, die nicht abwesend waren“ In SQL übersetzt lautet die Anfrage: SELECT * FROM student WHERE student.id NOT IN (SELECT abwesend.studen_id FROM abwesend); In MySQL lautet dies: SELECT student.* FROM student LEFT JOIN abwesend ON abwesend.student_id = student.id WHERE abwesend.student_id IS NULL; Fremdschlüsselbeziehungen (FOREIGN KEY) und Sichten auf Datenbanken – sogenannte VIEWS – sollen ebenfalls erst in späteren MySQL Versionen umgesetzt werden. Weitere Informationen sind in dem Buch von Paul DuBois, MySQL, New Riders Publishing, 2000 zu finden. Transaktionen (TA), welche einen korrekten, parallelen Ablauf von Anfragen ermöglichen, finden erst ab Version 4.0 standardmäßig ihren Einsatz in MySQL. Zum jetzigen Zeitpunkt können Transaktionen nur mit Hilfe eines bei der Installation einzucompilierenden Datenbankzusatzes, z. B. den InnoDB-Tabellen, erreicht werden. Möchte man auf diese Art von Zusatzpaketen auf Grund der besseren Performance verzichten, können bisher (MySQL 3.23) Transaktionen mit Hilfe eines MySQL-eigenen lock-Mechanismus simuliert werden; d.h. der Datenbank-Administrator ist für das korrekte Transaktionsmanagement selbst verantwortlich. Beispiel: 10 LOCK TABLE a1 WRITE; SELECT * FROM TABLE a1=bedingung1 ; UNLOCK TABLE a1; tenbankschemas. Geschickter ist es an dieser Stelle vermutlich Datenbankfiles speziell von „Hand“ (z. B. auf UNIX Geräten mit cp) zu sichern. Sicherheitsaspekte Mittels READ (Lesen, aber nicht schreiben), WRITE (Blockieren von Lese- oder Schreibzugriffen) und LOW_PRIORITY LOCK (Lesezugriff auf Tabelle gestattet, falls die Anfrage auf einen Client wartet, der gerade die Tabelle liest) können durch den Programmierer verschiedene LOCK-Granularitäten festgelegt werden. Wie sieht es mit der Sicherheit aus? Wie in allen kommerziellen DatenbankSystemen besteht auch in MySQL die Möglichkeit für den Datenbank-Administrator Benutzer mittels des GRANT-Statements auf der Datenbank als User einzutragen, diese mit Passwörtern und Privilegien auf der Datenbank auszustatten. Insbesondere in der CGI-Programmierung findet die traditionelle PERL DBISchnittstelle ihre Verwendung. Auch hier muss der Programmierer bis dato auf die zwar im DBI Standard festgelegten Features zum Transaktions-Management rollback (bricht eine Transaktion ab, werden alle von der Transaktion betroffenen Tabellen in den ursprünglichen Zustand zurückgesetzt), commit (Datensätze werden komplett oder gar nicht in die Datenbank eingetragen) und abort (Transaktionen können vom User abgebrochen werden) verzichten. Ab welcher Version der Perl DBI Treiber dahingehend noch verbessert wird, steht noch nicht fest. Beispiel des dafür notwendigen Kommandos: Auf Kosten fehlender Transaktionsmechanismen fallen Performance-Messungen für SQL Anfragen daher äußerst positiv aus. Tests in der Computerzeitschrift IX (Ausgabe 1, 2002) zeigen, dass selbst große Anwendungen mit über 1.000.000 Datensätzen noch äußerst performant arbeiten. Viele kleinere Datenbank-Anwendungen – gerade im Webbereich – genügen diesem Anforderungsprofil. Backup / Recovery der Datenbank Möglichkeiten zum Backup / Recovery bestehen zwar, wirken aber im Vergleich zu kommerziellen Systemen unausgegoren. Feine Backup- und Recovery-Granularitäten, wie zum Beispiel ein inkrementelles Backup, fehlen gar gänzlich. Eigentlich besitzt der Administrator nur die Möglichkeit, mittels des Befehls mysqldump eine Kopie der Datenbank in Form von CREATE und INSERT Statements abzulegen; dies bedeutet Archivierung des kompletten Datenbankschemas. Das Recovery der Datenbank entspricht somit dem Einspoolen des kompletten Da- mysql> GRANT ALTER ON samp_db.* TO user@% IDENTIFIED BY „passwd“; Der Datenbank-Administrator hat insbesondere die Möglichkeit zur Vergabe zahlreicher Datenbank- und Tabellen-Privilegien. Tabelle 1 gibt den entsprechenden Überblick. Es gibt aber auch die Möglichkeit zur Vergabe von administrativen Privilegien. Diese können Sie in Tabelle 2 nachlesen. Alles funktioniert hervorragend und kann unter den entsprechenden Rechten ohne Probleme auf der Konsole mysql oder aber über das Administrations Tool „MySQL Front“ unter Windows ausgeführt werden. Der Punkt Sicherheit muss daher lobend erwähnt werden. Fortsetzung nächste Seite unten ALTER: ALTER TABLE Statement gestattet, CREATE: CREATE DATABASE und CREATE TABLE gestattet, DELETE: Tuppel dürfen aus der Tabelle entfernt werden, DROP: DROP DATABASE und DROP TABLE gestattet, INDEX: Anlegen und Löschen von Indexen gestattet, INSERT: INSERT von neuen Tuppeln gestattet, SELECT: SELECT-Statement gestattet, UPDATE: Modifikation von Tabellen und Tupel gestattet. Tabelle 1: Privilegien der Datenbank, welche der Datenbank-Administrator an Nutzer vergeben kann. connect 1/2002 Internet Neue Webangebote und neuer Service für die Besucher des universitären Webangebots Ein Webangebot muss, wenn es attraktiv sein will, ständig erneuert und erweitert werden. Daher freue ich mich, Ihnen auch in dieser Ausgabe von connect wieder über einige wesentliche Fortschritte berichten zu können. Während der Erstsemester-Einführung im Sommersemester 2002 an der Universität Augsburg wurde eine für mich sehr interessante Frage gestellt: Wie viele der Anwesenden haben sich im Vorfeld dieser Veranstaltung im Internet über die Universität Augsburg und deren Studienangebot informiert? Die Antwort war äußerst aufschlußreich: Alle Hände gingen nach oben. Genau für diesen „Kundenkreis“ kann die Universität Augsburg nun mit zwei neuen Angeboten aufwarten. Neu im Angebot Ganz neue Webseiten hält die Studienberatung seit letztem Semester bereit – sowohl für Schüler als auch für Studierende. Darüber hinaus wurde nun endlich ein englischsprachiges Webangebot konzipiert, dessen Zielgruppe zwar vor allem ausländische Studieninteressenten sind, welches aber aber auch englischsprachige Besucher sicher durch die Webseiten leiten soll. Zentrale Studienberatung Seit Dezember 2001 sind die neuen Webseiten der Zentralen Studienberatung online (http://www.uni-augsburg.de/zentral/zsk/). Dort finden Schüler, Studieninteressenten, Erstsemester und Studierende vielfältige Informationen. sichtliche Gliederung des Studienangebotes. Denn erst diese kompakte Darstellung ermöglichte es, ein adäquates englischsprachiges Webangebot zusammenzustellen. Gerade Informationen über Studienfächer stehen ja im Mittelpunkt Die Themen, die sich im Beratungsalltag stellen, sind „schülerfreundlich“ dargestellt: wichtige Infos über Studienangebot, Studienplanung und Verlauf eines Studiums, Prüfungsmodalitäten und Berufsperspektiven aber auch Wohnungssuche, Stipendien und Ansprechpartner bei Problemen sind leicht zu finden. Eine Seite „Uni-Welt“ bringt mehr Transparenz in die selbige und erleichtert Schülern und angehenden Studierenden die Informationssuche im Abb.: Die Startseite des englischsprachigen Webangebots. Ein Webangebot der Universität. Ausschnitt aus dem Gesamtangebot der Universität Augsburg, Hervorzuheben ist die über- welches speziell für ausländische Studierende zugeschnitten ist. Fortsetzung des Artikels „MySQL – eine „perfekte Alternative“? Zusammenfassung Dr. Annja Zahn, Rechenzentrum FILE: Erlaubnis für Lese- und Schreibrechten auf Dateien auf dem Server Host GRANT: Vergabe des GRANT Privilegs, PROCESS: Erlaubnis zum Löschen von Datenbank-Prozessen, RELOAD: Erlaubt eine Anzahl von Server-Administrativen Privilegien, SHUTDOWN: MySQL ServerShutdown gestattet. Befindet man sich also nun am Ende aller Datenbank- und Webträume? Diese Frage kann nur mit „vielleicht“ beantwortet werden. Viele kleinere und nicht-kritische Datenbank-Anwendungen rechtfertigen den Einsatz von MySQL. Insbesondere für WebApplikationen mit einfachen, lesenden SQL-Anfragen ist MySQL, auf Grund der hervorragend implementierten APIs und der hervorragenden Performance, besonders geeignet. Auch die einfache Administration des Datenbank-Systems ist für den nicht so erfahrenen Datenbank-Administrator durchführbar. Das rege Interesse – insbesondere bei den Linux-Usern – und die lobend zu erwähnende Dokumentation von MySQL forciert zusätzlich die Weiterentwicklung eines zumindest äußerst interessanten GNU- Tabelle 2: Administrative Privilegien der Datenbank. Produktes für den semi- und im speziellen Falle sogar professionellen Bereich. Zeitschrift des Rechenzentrums 11