Cognitive Interaction Technology Center of Excellence Einführung in Datenbanken - Anwendungen - Philipp Cimiano AG Semantische Datenbanken und Wissensverarbeitung 1 Cognitive Interaction Technology Center of Excellence Themen für diese Vorlesung • Web-Anwendungen • Authorisierung • Sicherheit • Datenbank-Architekturen 2 Cognitive Interaction Technology Center of Excellence Anwendungen • Wir haben bisher formale Sprachen kennengelernt, um eine Datenbank anzufragen, z.B. SQL. • Die meisten Anwender greifen jedoch auf eine Datenbank über sogenannte Frontends zu, d.h. über Graphische Schnittstellen (GUIs) oder über Web-Schnittstellen. 3 Cognitive Interaction Technology Center of Excellence Architekturen für Web-basierte Schnittstellen Three-tier Architecture Client (Browser) Web Server HTTP HTTP Application Server Database Communication Protocol DB 4 Database Server (z.B. MySQL Server) Cognitive Interaction Technology Center of Excellence Architekturen für Web-basierte Schnittstellen Two-tier Architecture Client (Browser) Web Server & Application Server (z.B. Apache tomcat) HTTP Database Server (z.B. MySQL Server) 5 DB Cognitive Interaction Technology Center of Excellence Vorteile von Client/Server Architekturen • Verteilung der Rollen und Verantwortlichkeiten auf verschiedene Softwaresysteme. Das führt zu einer einfacheren Wartung. Es können auf der Seite des Servers Änderungen vorgenommen werden ohne dass ein Client davon betroffen ist. • Alle Daten sind auf dem Server gespeichert. Das ist meistens sicherer als die Speicherung auf einem Client. • Die Änderung der Daten ist einfach, da sie alle zentral gespeichert werden (im Vergleich zu einer sogenannten P2P Architektur). • Man macht keine Einschränkung bezüglich des Clients, außer z.B. das der Client über das HTTP-Protokoll mit dem Server kommunizieren soll (damit sind natürlich alle Browser potentielle Clients). 6 Cognitive Interaction Technology Center of Excellence Nachteile von Client/Server Architekturen • Eine hoher Netzwerkverkehr (viele Anfragen) können den Server lahmlegen. Das ist in einem P2P Netzwerk nicht der Fall. • Client-Server Architekturen sind nicht besonders robust. Wenn der Server ausfällt, funktioniert in der Regel nichts mehr. In einer P2P Architektur können in der Regel mehrere Knoten eine Anfrage bearbeiten (z.B. ein Download-request). 7 Cognitive Interaction Technology Center of Excellence Implementierung einer Two-Tier Architektur Client (Browser) Application Server (z.B tomcat, jboss, etc.) HTTP Servlet Database Server (z.B. MySQL Server) 8 DB Cognitive Interaction Technology Center of Excellence Beispiel: Web-Interface für die Kontostandabfrage Wir werden die folgenden Schritte besprechen: 1. Erstellung eines HTML Formulars 2. Erstellung eines Java Servlets BankAbfrage.java 3. Kopieren des kompilierten Servlets (.class) in das entsprechende WEB-INF/classes Verzeichnis einer tomcat Installation 4. Konfiguration des tomcat servers 5. Starten von tomcat 6. Testen des Web Formulars zur Kontostandabfrage 9 Cognitive Interaction Technology Center of Excellence 1. Erstellung eines HTML Formulars <h1> Formular zur Abfrage des Kontostandes </h1> <form action="http://localhost:8080/examples/BankAbfrage" method="get“> <select name ="type"> <option value="account" selected> Girokonto </option> <option value="loan" selected> Kredit </option> </select> <input type=text size=5 name="number"> <input type="submit" value="submit“> </form> 10 Cognitive Interaction Technology Center of Excellence 2. Erstellung eines Java-Servlets Bankabfrage.java // Imports 11 import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; Cognitive Interaction Technology Center of Excellence 2. Erstellung eines Java-Servlets Bankabfrage.java public class BankAbfrage extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... } 12 Cognitive Interaction Technology Center of Excellence 2. Erstellung eines Java-Servlets Bankabfrage.java // load the driver System.out.println("Loading driver..."); try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch(Exception e) {} // establish the connection try{ conn = DriverManager.getConnection("jdbc:mysql://localhost/Banking? user=cimiano"); } catch (SQLException ex) {} 13 Cognitive Interaction Technology Center of Excellence 2. Erstellung eines Java-Servlets Bankabfrage.java 14 String type = request.getParameter("type"); String number = request.getParameter("number"); String ergebnis = null; if (type.equals("loan")) { try { stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * from loan WHERE loan_number = \'"+number+"\'"); rs.next(); ergebnis = rs.getString("amount"); } catch (SQLException ex){} } Cognitive Interaction Technology Center of Excellence 2. Erstellung eines Java-Servlets Bankabfrage.java if (type.equals("account")) { try { stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * from account WHERE account_number = \'"+number+"\'"); rs.next(); ergebnis = rs.getString("balance"); } catch (SQLException ex){} } 15 Cognitive Interaction Technology Center of Excellence 2. Erstellung eines Java-Servlets Bankabfrage.java response.setContentType("text/html"); PrintWriter out = response.getWriter(); if (ergebnis != null) out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>BankAbfrage (Ergebnis)</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Sie haben den Kontostand von folgendem Konto angefragt:"+number +"<br>" + "Das Ergebnis lautet: "+ ergebnis + "</H1>\n"+ "</BODY></HTML>"); 16 else // es wird kein Ergebnis zurückgeliefert. Cognitive Interaction Technology Center of Excellence 3. Kopieren des .class files • Das .class file des servlets muss in ein entsprechendes Verzeichnis der tomcat installation kopiert werden, z.B. <TOMCAT_HOME>/webapps/examples/WEB-INF/classes Die benötigten Libraries (in unserem Fall der MySQL JDBC Connector) müssen als jar-file in das entsprechende lib Verzeichnis kopiert werden, z.B. <TOMCAT_HOME>/webapps/examples/WEB-INF/lib 17 Cognitive Interaction Technology Center of Excellence 4. Konfiguration des tomcat Es müssen folgende Einträge in der web.xml Datei vorgenommen werden: <servlet> <servlet-name>BankAbfrage</servlet-name> <servlet-class>BankAbfrage</servlet-class> </servlet> <servlet-mapping> <servlet-name>BankAbfrage</servlet-name> <url-pattern>/BankAbfrage</url-pattern> </servlet-mapping> 18 Diese Datei liegt z.B. in: <TOMCAT_HOME>/webapps/examples/WEB-INF/web.xml Cognitive Interaction Technology Center of Excellence 5. Starten des tomcat servers Der tomcat server wird wie folgt gestartet (Linux / Mac OS) <TOMCAT_HOME>/bin/startup.sh Und kann wie folgt beendet werden: <TOMCAT_HOME>/bin/shutdown.sh 19 Cognitive Interaction Technology Center of Excellence 6. Testen des Dienstes Die entwickelte Web-Applikation kann z,B. durch folgenden http-request gestartet werden: http://localhost:8080/examples/BankAbfrage? type=account&number=A-101 20 Cognitive Interaction Technology Center of Excellence Beispiele für Web-Schnittstellen zu Datenbanken • Flickr: http://www.flickr.com/ • Biochemie, z.B. Protein-Datenbanken: http:// www.expasy.ch/sprot/ • Flugbuchung: http://www.billigfluege.de/ • Fernsehprogramm: http://www.tvinfo.de/ • Verwaltung von Kochrezepten: http:// www.chefkoch.de/ 21 Cognitive Interaction Technology Center of Excellence SQL Autorisierung Für viele Anwendungen ist Autorisierung ein zentrales Anliegen. Die Daten sollen nur von Personen gelesen oder geändert werden können, die dafür auch berechtigt sind. In SQL kann per Default nur der Besitzer einer Datenbank (der Erzeuger) Tabellen erzeugen, ändern oder lesen. Er kann aber auch diese Rechte an andere Nutzer weitergeben. Das geht in SQL so: grant <privlige_list> on <relation name or view> to <user/ role list> 22 Cognitive Interaction Technology Center of Excellence Beispiele für Authorisierung • Wir geben Usern U1, U2 und U3 Leserecht auf der Tabelle account: grant select on account to U1,U2,U3 • Erlaube Usern U1, U2 und U3 das Ändern des Betrages in Tabelle loan: grant update (amount) on loan to U1,U2,U3 • Auch das Erzeugen von Fremdschlüssel muss erlaubt werden! grant references (branch_name) on branch to U1 Damit kann User U1 Tabellen erzeugen, die das Attribut branch_name von branch referenzieren. 23 Cognitive Interaction Technology Center of Excellence Weitergabe von Rechten • User können Rechte auch weitergeben wenn man „with grant option“ dem grant-statement hinzufügt: grant select on branch to U1 with grant option Anwender U1 kann dann seine Rechte an andere Anwender weitergeben. 24 Cognitive Interaction Technology Center of Excellence Autorisierungsgraphen Die Weitergabe von Rechten können wir nun mit Hilfe von sogenannten Autorisierungsgraphen erfassen: Admin U1 U4 U2 U5 U3 Wenn der Administrator nun U1 die Rechte entzieht: revoke X on Y from U1 verliert User U4 seine Rechte. U5 behält aber seine Rechte über U2. 25 Cognitive Interaction Technology Center of Excellence Vergabe von Rechten allgemein Ein Anwender hat also ein bestimmtes Recht wenn es ein Vergabepfad von dem Administrator der Datenbank zu diesem Anwender gibt. 26 Cognitive Interaction Technology Center of Excellence Rechte und Sichten 27 Man kann natürlich auch Rechte auf Sichten vergeben. Betrachten wir z.B. folgende Sicht: create view cust_loan as ( select branch_name, customer_name from borrower, loan where borrower.loan_number=loan.loan_number ) Nun kann man einem Anwender U1 auch Leserechte auf diese Sicht geben: grant select on cust_loan to U1. Cognitive Interaction Technology Center of Excellence Rechte und Sichten (2) Wenn ein Anwender eine Sicht erzeugt, bekommt er nicht automatisch die entsprechenden Privilegien. • Der User kann die Sicht nur erzeugen wenn er auch Leserecht auf den entsprechenden Tabellen hat. • Der User kann die Sicht nur dann udpaten wenn er updateberechtigt auf den entsprechenden Tabellen ist. • Ein User kann die Sicht nur „lesen“ wenn er auch Leserecht auf den entsprechenden Tabellen hat. 28 Cognitive Interaction Technology Center of Excellence Rollen Manchmal ist es nützlich, Privilegien nicht nur für einzelne User sondern für bestimmte Typen von Usern zu definieren. Wir können mit SQL auch Rechte an „Rollen“ vergeben: create role Bankberater; grant select on account to Bankberater; 29 Die Rechte einer Rolle können wir an konkrete User oder an weitere Rollen vergeben: grant Bankberater to Müller; create role Manager; grant Bankberater to Manager; Cognitive Interaction Technology Center of Excellence Rücknahme von Rechtern Rechte können natürlich auch zurückgenommen werden: revoke <privilige_list> on <relation/view> from <user/ role_list> [restrict|cascade] Cascade (default): entziehe Rechte entlang des gesamten Vergabepfades Restrict: entziehe nur die Rechte den angegebeben Nutzern 30 Cognitive Interaction Technology Center of Excellence Vergabe und Rücknahme von Rechten in einer bestimmten Rolle. Szenario: John bekommt bestimmte Rechte von Mary (als Managerin). Wenn Mary irgendwann nicht mehr Manager ist und bestimmte Rechte entzogen bekommt, dann verliert auch John seine Rechte. Das ist natürlich unerwünscht. Daher können Rechte auch in einer bestimmten Rolle vergeben werden: set role manager; grant select on account to John granted by current_role; 31 Wenn nun Mary die Rechte entzogen werden, bekommt John nicht automatisch auch die Rechte entzogen. Cognitive Interaction Technology Center of Excellence Sicherheit Manchmal möchte man sicherstellen, dass die in einer Datenbank abgespeicherten Informationen nach außen nicht sichtbar sind. Daher werden Daten manchmal verschlüsselt. Verschlüsselungsverfahren basieren auf Schlüsseln, die auf den zu verschlüsselnden Text (als Funktion) angewendet werden. Wir unterscheiden zwischen: 32 • Kodierungsschlüsseln (dienen zu Verschlüsselung einer Nachricht) • Dekodierungsschlüsseln (dienen zur Entschlüsselung) Cognitive Interaction Technology Center of Excellence Verschlüsselungsverfahren • Shared-Key Kryptographie: • Idee: Kodier- und Dekodierschlüssel sind die gleichen. Daher muss der Schlüssel einmal in eine Richtung ausgetauscht werden. • Heutzutage wird hierfür der sogenannte Advanced Encryption Standard (AES) verwendet (http://www.csrc.nist.gov/publications/fips/ fips197/fips-197.pdf) • Public-Key Kryptographie: Es werden zwei Schlüssel verwendet, ein öffentlicher und ein privater. 33 Cognitive Interaction Technology Center of Excellence Einfaches Beispiel für Symmetrische Verschlüsselung: die Substitutionschiffre • Die einfachste Art und Weise, symmetrisch zu verschlüsseln, ist durch eine Substitutionschiffre, z.B. wie von Caesar angewendet. Er ersetzte alle Buchstaben durch den Buchstaben drei Stellen weiter im Alphabet. z.B: „Caesar“ wird zu „Fdhvdu“ In diesem Fall ist der verwendete Schlüssel n=3. Er bleibt beim kodieren und dekodieren gleich (nur die Richtung ändert sich). Mann kann auch komplexere Schlüssel nehmen und mehrere Buchstaben auf einmal ersetzen (polygraphic substitution): 14568945 34 Cognitive Interaction Technology Center of Excellence Public-Key-Kryptographie Public Key Private Key Urhebernachweis von Bob (z.B in einer Digitalen Signatur) Verschlüsselte Nachricht an Bob Öffentlicher Bereich 35 Privater Bereich Cognitive Interaction Technology Center of Excellence Ebenen der Verschlüsselung Daten können auf zwei Ebenen verschlüsselt werden: • Verschlüsselung auf der Platte: sobald die Daten von dem DBMS auf die Platte geschrieben werden, werden sie verschlüsselt. Damit kann niemand das DBMS umgehen und die Daten von der Platte lesen. Sie können nur von dem DBMS (mit dem richtigen Schlüssel) gelesen werden. Nachteil: ein Systemadministrator kann auf alle Daten zugreifen. • Verschlüsselung der Daten selbst: Die Daten werden verschlüsselt bevor sie in die Datenbank gelangen. Damit sind die Daten selbst verschlüsselt gespeichert und es können nur User die Daten sehen, die einen Dekodierungsschlüssel haben. 36 Cognitive Interaction Technology Center of Excellence Authentifizierung Es gibt verschiedene Möglichkeiten, einen Anwender (einer Datenbank) zu identifizieren: 1. Passwortabfrage 2. Challenge-Response: (User bekommt einen String und muss diesen mit seinem privaten Schlüssel kodieren) 3. Digitale Signaturen: User signiert einen Text (eine Nachricht etc.) durch den privaten Schlüssel. 37 Cognitive Interaction Technology Center of Excellence Digitale Zertifikate 38 • Es ist nicht nur wichtig, dass User sich ausweisen, sondern auch Webseiten, Applikationen usw. (Banken) • HTTPS (HTTP Secure) baut auf einem Netz von Zertifikaten und einer Zertifizierungshierarchie auf. • Die obersten Knoten einer Zertifizierungshierarchie nennt man „certificate authorities“, sie werden allgemein als vertrauenswürdig betrachtet und in Web-Browsern fest kodiert. • Jedes Mal wenn eine Seite besucht wird, wird die Zertifizierungskette verfolgt bis man an eine Wurzel (certificate authority) der Zertifizierungshierarchie gelangt. Cognitive Interaction Technology Center of Excellence Zertifizierungskette Verschlüsselt mit PrivA A sagt: B hat Schlüssel PubB A B Wurzel der Zertifizierungshierarchie (PubA / PrivA) (PubB / PrivB) Verschlüsselt mit PrivB B sagt: C hat Schlüssel PubC 39 C (PubC / PrivC) Bestätigt Vertrauenswürdigkeit und Publik Key Cognitive Interaction Technology Center of Excellence Datenbank-Architekturen • Zentralisierte Systeme • Client-Server Architekturen • Parallele Architekturen • Shared-Memory - Systeme • Shared Disk - Systeme • Shared Nothing - Systeme • Hierarchische Systeme • Verteilte Datenbanken 40 Cognitive Interaction Technology Center of Excellence Zentralisierte Datenbanksysteme Zentralisierte Datenbanksysteme sind solche, die auf einem einzigen Rechner laufen. Solche Systeme haben meistens: • ein oder mehrere CPUs • verschiedene Controller (Video, Audio, Platten usw.) • gemeinsam genutzten Speicher 41 Wir unterscheiden zwischen: single-user Systeme multi-user Systemen Cognitive Interaction Technology Center of Excellence Zentralisierte Datenbanksysteme Zentralisierte Datenbanksysteme unterstützen nur auf vereinfachte Weise die parallele Verarbeitung von Anfragen. Die Anfragen können auf verschiedene Prozessoren verteilt werden und sequentiell abgearbeitet werden. Eine Anfrage wird auf nur einem Prozesssor bearbeitet. Solche multiprocessor Systeme können zwar den Durchsatz erhöhen, aber die einzelene Anfrage braucht aber genauso lange wie in einem single-processor System. 42 Cognitive Interaction Technology Center of Excellence Client-Server Architekturen • Es ist eigentlich nur ein kleiner Schritt von einem zentralisierten System zu einer Client-Server Architektur. • Man unterscheidet nun zwischen einem: • frontend • backend • Das „backend“ läuft nun auf einem zentralisierten System • Das „frontend“ (mit dem die Anwender interagieren) läuft nun auf den clients, die z.B. über das HTTP-Protokoll mit einem Server kommunizieren. 43 Cognitive Interaction Technology Center of Excellence Backend-Server • Transaktions-Server: stellen eine Schnittstelle bereit, um Anfragen an die Datenbank zu stellen. Sie werten die Anfragen aus (durch Zugriff auf den Daten-Server) und liefern das Ergebnis an den Client zurück. • Daten-Server: speichern und erlauben den Zugriff auf Daten (z.B. File Server speichert und unterstützt Zugriff auf files). 44 Cognitive Interaction Technology Center of Excellence Parallele Architekturen • Die zentrale Idee von parallelen Architekturen ist es, die Performanz zu erhöhen durch parallele (nicht-sequentielle) Abarbeitung. • Dazu werden System mit mehreren Prozessoren eingesetzt, von 2 bis zu mehreren tausend Prozessoren. • Parallele Architekturen werden sinnvoll eingesetzt wenn: • viele Anwender gleichzeitig auf die Datenbank zugreifen • viele Anfragen pro Sekunde verarbeitet werden müssen • Die Datenbank extrem viele Daten enthält (z.B. Terabype an Daten!) 45 Cognitive Interaction Technology Center of Excellence Messgrößen paralleler Systeme: Speed-up • Speed-up: ist ein Maß für den Performanzgewinn bei Umstieg auf eine Architektur mit höherem Parallelitätsgrad. 46 • wobei TS die Ausführungszeit auf Maschine S (small) ist und TL die Ausführungszeit auf einer größeren Maschine L (large) ist. • Man spricht von einem linearen speed-up wenn der speed-up n beträgt bei einem Wachstum der Ressourcen (Prozessoren) um Faktor n. Sonst spricht man von sublinearem speed-up. Cognitive Interaction Technology Center of Excellence Speed-up Lineares Speed-up 47 Ressourcen Cognitive Interaction Technology Center of Excellence Messgrößen paralleler Systeme: Scale-up • Scale-up: gibt an, inwiefern beim Umstieg auf ein System mit Faktor n Ressourcen ein um Faktor n größeres Problem in der selben Zeit gelöst werden kann. • Scale-up ist nun definiert als: 48 Cognitive Interaction Technology Center of Excellence Scale-up Lineares Scale-up 49 Ressourcen Cognitive Interaction Technology Center of Excellence Probleme bei der Parallelisierung • Hohe Aufteilkosten: Das Aufteilen eines Prozesses und das Starten der Teilprozessesse auf verschiedenen Maschinen kann höhere Kosten verursachen als das direkte Lösen des Prozesses. • Behinderung: verschiedene Teil-Prozesse können sich behindern weil sie um die selben Ressourcen konkurrieren (Festplatte, Speicherplatz, Internetverbindung etc.) • Ungleichmäßige Aufteilung: Prozesse können nicht immer in gleichmäßig große Teilprozesse aufgeteilt werden. Folglich bestimmt der größte Teilprozess immer noch die Bearbeitungszeit des Gesamtprozesses. 50 Cognitive Interaction Technology Center of Excellence Parallele Datenbankarchitekturen • Shared-memory Systeme • Shared-disk Systeme • Autonome Systeme • Hierarchisches Modell 51 Cognitive Interaction Technology Center of Excellence Shared-Memory Systeme • Vorteile: 52 • effiziente und schnelle Kommunikation • Nachteile: • Skaliert nicht für große Zahlen von Prozessoren, Zugriff auf Speicher und Daten werden zum Flaschenhals. Es werden in der Regel CachingMechanismen eingesetzt, so dass jeder Prozessor Daten lokal hält. Diese müssen aber regelmäßig synchronsiert werden (Overhead) P P P P P M Cognitive Interaction Technology Center of Excellence Shared Disk Systeme • Vorteile: 53 • Zugriff auf Speicher ist kein Flaschenhals (vgl. Shared Memory) • Fehlertoleranz (Zusammebruch eines Prozessors kann durch einen anderen ausgeglichen werden!) • Nachteile: • Kommunikation zwischen Prozessoren ist langsamer • gemeinsamer Zugriff auf die Platten ist nach wie vor ein Nachteil! M P M P M P M P M P Cognitive Interaction Technology Center of Excellence Autonome Systeme • Vorteile: • schneller Zugriff auf Speicher und Platte • Skalierbarkeit im Hinblick auf die Anzahl von Prozessoren (Voraussetzung: schnelle Verbindung) • Nachteile: • höhere Kosten • teurer Zugriff auf den Speicher eines anderen Prozessors (jeder Prozessor ist ein kleiner Server!) 54 M P M P M P P M P M Cognitive Interaction Technology Center of Excellence Hierarchisches Modell P M P M P P P P P P P P P P P P P 55 M Cognitive Interaction Technology Center of Excellence Verteilte Datenbanken In verteilten Datenbankarchitekturen ist die Datenbank auf verschiedenen Maschinen verteilt. Diese Maschinen sind über ein Netzwerk (z.B. das Internet) verbunden und teilen sich keine Ressourcen. Der Unterschied zwischen einer verteilten Datenbank und einem autonomen System sind: • Verteilte Datenbanken sind komplett unabhängig voneinander. • Sie werden unabhängig voneinander administriert. • Sie sind meistens geographisch verteilt. 56 Cognitive Interaction Technology Center of Excellence Argumente für verteilte Datenbanken • Unabhängigkeit: Jede Seite kann ihre eigenen Daten unabhängig kontrollieren und verwalten. • Datenaustausch: Dennoch können Daten ausgetauscht werden (durch Anfragen). • Verfügbarkeit: Wenn eine Seite offline ist, können Anfragen dennoch bearbeitet werden. Das setzt allerdings eine gewisse Datenredundanz voraus. 57 Cognitive Interaction Technology Center of Excellence Bemerkungen zu verteilten Datenbanken Wichtig ist, ob die verteilten Datenbank ein gemeinsames Schema oder ob jede Datenbank ein eigenes Schema hat. In letzterem Fall redet man von einer Multi-Datenbank oder einem Heterogenen Verteilten System. • Problematisch sind folgende Aspekte bei verteilten Datenbanken: • Transaktionsmanagement • Concurrency Control • Erhöhte Systemkomplexität (Entwicklung, Fehlerursachen etc.) 58