Humboldt-Universität zu Berlin - Computer- und Medienservice

FAQ - Häufig gestellte Fragen

Überblick

  1. Welches der beiden angebotenen Datenbankmanagementsysteme sollte ich verwenden?
  2. Mit welcher (universellen) Datenbanksoftware kann ich auf meine Datenbank zugreifen?
  3. Wie groß darf meine Datenbank werden?
  4. Wird das Speichern "großer binärer Objekte" in Datenbanken (BLOBs) unterstützt?
  5. Darf ich personenbezogene Daten in meiner Datenbank speichern?
  6. Wann und wie oft werden Backups erstellt und wie lange werden diese aufgehoben?
  7. Wie kann ich mein Datenbank-Passwort ändern?
  8. Wie kann ich einen Datenbank-Dump erzeugen?
  9. Wie kann ich einen Datenbank-Dump einspielen?
  10. Wie kann ich mittels PHP auf meine PostgreSQL- oder MySQL-Datenbank zugreifen?
  11. Wie funktioniert die Verbindung mittels stunnel?
  12. Wie bekomme ich eine Software auf JDBC-Basis dazu, sich SSL-verschlüsselt mit dem Datenbankserver zu verbinden?
  13. Wie gefährlich ist eine SQL-Injection und wie kann ich einer solchen vorbeugen?
  14. Wie sollte ich die Tabellen, Spalten usw. in einem selbst erstellten Datenbankschema benennen? Gibt es Standards oder hilfreiche Konventionen?
  15. Gibt es Literaturempfehlungen seitens des Datenbankservices?
1. Welches der beiden angebotenen Datenbankmanagementsysteme sollte ich verwenden?
  • wenn keine anderweitigen Gründe (insbesondere die von Ihnen eingesetzte Software) dagegensprechen, empfehlen wir uneingeschränkt PostgreSQL
  • MySQL-Datenbanken erstellen wir nur auf ausdrücklichen Wunsch und wenn sich die Anwender der damit verbundenen Probleme bewusst sind
2. Mit welcher (universellen) Datenbanksoftware kann ich auf meine Datenbank zugreifen?

PostgreSQL + MySQL:

  • uneingeschränkt können wir den universellen Datenbankclient DBeaver empfehlen, der nicht nur mit PostgreSQL und MySQL (und zahlreichen weiteren DBMS) zusammenarbeit, sondern darüber hinaus auf allen üblichen Betriebssystemen (Linux, Windows, MacOS) funktioniert

PostgreSQL:

  • der wohl bekannteste PostgreSQL-Client heißt pgAdmin und läuft unter Linux, Windows und MacOS
  • erfahrene Anwender werden das Kommandozeilenwerkzeug psql zu schätzen wissen
  • ganz ohne Installationsaufwand können Sie unser Webfrontend Adminer verwenden

MySQL:

  • der wohl bekannteste MySQL-Client heißt MySQL Workbench und läuft unter Linux, Windows und MacOS
  • erfahrene Anwender werden das Kommandozeilenwerkzeug mysql zu schätzen wissen
  • ganz ohne Installationsaufwand können Sie unser Webfrontend phpMyAdmin verwenden
3. Wie groß darf meine Datenbank werden?
  • prinzipiell erlauben wir Datenbankgrößen bis 100MB
  • nach einer guten Begründung (basierend auf der Art und Weise der zu speichernden Inhalte - eine Grobbeschreibung erfolgt von Ihnen) erlauben wir auch Datenbanken bis 512MB
  • noch größere Datenbanken sind zwar in sehr gut begründeten Ausnahmefällen möglich, werden aber nur nach vorheriger Konsultation von uns genehmigt
  • das Speichern von großen binären Objekten (BLOBs) stellt keine Begründung für ein (gewünschtes/geplantes) Überschreiten der oben genannten, maximalen Datenbankgrößen dar
4. Wird das Speichern "großer binärer Objekte" in Datenbanken (BLOBs) unterstützt?
  • auch wenn wir BLOBs nicht gutheißen und explizit von deren Verwendung abraten, tolerieren wir deren Verwendung, solange sich die konkreten Datenbanken innerhalb der akzeptierten Datenbankgrößen (siehe anderen Punkt in der FAQ) bewegen
  • eine grobe Einführung in die Problematik ist in diesem informalen Blogeintrag zu finden
5. Darf ich personenbezogene Daten in meiner Datenbank speichern?
  • eine Speicherung personenbezogener Daten ist prinzipiell möglich, setzt aber eine Überprüfung und Genehmigung durch den Datenschutzbeauftragten der Humboldt-Universität zu Berlin voraus
  • diese Genehmigung ist vor der Beantragung der Datenbank einzuholen und uns dann bei der Beantragung vorzulegen
  • bitte beachten Sie auch unbedingt die Hinweise, die wir auf dieser Seite für Sie zusammengefasst haben
6. Wann und wie oft werden Backups erstellt und wie lange werden diese aufgehoben?

PostgreSQL:

  • alle Datenbanken werden zweimal täglich (01:00 Uhr und 13:00 Uhr) abgezogen
  • die mittäglichen Backups werden 7 Tage lang aufbewahrt
  • die nächtlichen Backups werden 60 Tage lang aufbewahrt
  • da alle Backups zusätzlich beim zentralen Backup-Service des CMS auf Band gespeichert werden, erhöhen sich alle genannten Aufbewahrungszeiten nochmal um 60 Tage

MySQL:

  • alle Datenbanken werden einmal täglich (01:00 Uhr) abgezogen
  • alle Backups werden 60 Tage lang aufbewahrt
  • da alle Backups zusätzlich beim zentralen Backup-Service des CMS auf Band gespeichert werden, erhöhen sich alle genannten Aufbewahrungszeiten nochmal um 60 Tage
7. Wie kann ich mein Datenbank-Passwort ändern?

PostgreSQL:

  • Verbinden Sie sich (z.B. via psql oder Adminer) mit der Datenbank und setzen Sie folgende SQL-Anweisung ab:
    ALTER USER nutzername PASSWORD 'neues_passwort';
  • Hinweis: ihr neues Passwort muss eine Mindestlänge von 16 Zeichen aufweisen

MySQL:

  • Variante 1 (MariaDB und MySQL<8): Verbinden Sie sich (z.B. via phpMyAdmin) mit der Datenbank und setzen Sie folgende SQL-Anweisung ab:
    SET PASSWORD = PASSWORD('neues_passwort')
  • Variante 2 (MySQL>=8): Verbinden Sie sich (z.B. via phpMyAdmin) mit der Datenbank und setzen Sie folgende SQL-Anweisung ab:
    SET PASSWORD = 'neues_passwort'
  • Variante 3 (MySQL>=8): Verbinden Sie sich (z.B. via phpMyAdmin) mit der Datenbank und setzen Sie folgende SQL-Anweisung ab:
    alter user dbaccountname@'%.cms.hu-berlin.de' identified by 'neues passwort'
8. Wie kann ich einen Datenbank-Dump erzeugen?

PostgreSQL:

  • pg_dump -h moodledb.cms.hu-berlin.de -p [port]-U [dbaccount] [dbname] -c --if-exists > dumpdatei.sql

MySQL:

  • mit mysqldump:
    mysqldump -h mydb.cms.hu-berlin.de -P [port] -u [dbaccount] --quick --skip-lock-tables --skip-add-locks -p [dbname] > dumpdatei.sql
  • mit phpMyAdmin:
    Melden Sie sich via phpMyAdmin an, wählen Sie links ihre Datenbank aus (wichtiger Schritt!) und klicken Sie dann oben auf "Export". Auf der dann folgenden Seite wählen/ändern Sie (nur) die Optionen "Custom" und "Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT statement". Bei einem anschließenden Klick auf "Go" werden Sie nach dem Speicherort für den Dump gefragt und derselbige wird angelegt.
9. Wie kann ich einen Datenbank-Dump einspielen?

PostgreSQL:

  • psql -h moodledb.cms.hu-berlin.de -p [port] -U [dbaccount] -f dumpdatei.sql [dbname]

MySQL:

  • mysql -h mydb.cms.hu-berlin.de -P [port] -u [dbaccount] -p [dbname] < dumpdatei.sql
10. Wie kann ich mittels PHP auf meine PostgreSQL- oder MySQL-Datenbank zugreifen?
11. Wie funktioniert die Verbindung mittels stunnel?

MySQL:

  • zunächst müssen Sie bei sich lokal die Software stunnel installieren (im Folgenden wird der Weg der Inbetriebnahme unter Ubuntu-Linux gezeigt; die Anleitung lässt sich aber auf andere Betriebssysteme übertragen)
    • die Grundinstallation erfolgt einfach mittels apt-get install stunnel
    • die Konfiguration erfolgt über die neu anzulegende Datei /etc/stunnel/stunnel.conf, deren Inhalt Sie von hier übernehmen können
    • zusätzlich muss in der Datei /etc/default/stunnel4 der Wert ENABLED auf 1 gesetzt werden
    • gestartet wird der stunnel mittels /etc/init.d/stunnel4 start
  • nun können Sie mit jedweder Datenbanksoftware mittels stunnel verschlüsselt auf den MySQL-Server zugreifen und zwar unter der Adresse localhost und dem Ihnen bekannten Datenbankport
    • ein Aufruf des Kommandozeilenclients mysql sähe also beispielsweise so aus:
      mysql -h localhost -P 3306 --protocol=tcp -u dbaccount -p
12. Wie bekomme ich eine Software auf JDBC-Basis dazu, sich SSL-verschlüsselt mit dem Datenbankserver zu verbinden?

PostgreSQL:

  • im Idealfall hält Ihre Software bereits in den Datenbankeinstellungen ein Häkchen o.ä. für die SSL-Verschlüsselung bereit
  • sollte dies nicht der Fall sein, es aber eine Einstellung für eine "connection URL", "jdbc URL" o.ä. geben, lohnt sich zumindest der Versuch, eine der beiden folgenden Varianten auszuprobieren
    • für eine verschlüsselte Verbindung ohne Prüfung des Serverzertifikats:
      jdbc:postgresql://pgdb.cms.hu-berlin.de:5432/datenbankname/?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
      
    • für eine verschlüsselte Verbindung mit Prüfung des Serverzertifikats:
      jdbc:postgresql://pgdb.cms.hu-berlin.de:5432/datenbankname/?ssl=require&sslrootcert=/pfad/zur/chain.txt
      
    • die im zweitgenannten Fall benötigte Zertifikatskette (die in der URL referenzierte Datei chain.txt) erhalten Sie auf den Seiten der PKI-Services des CMS (Direktlink zur Zertifikatskette: chain.txt)
13. Wie gefährlich ist eine SQL-Injection und wie kann ich einer solchen vorbeugen?
  • als SQL-Injection wird ein Angriff bezeichnet, bei dem existierende SQL-Anfragen durch kreative Variablenbelegungen modifiziert und in der Regel auch erweitert werden
  • bei einem erfolgreichen Angriff erhält der Angreifer einen vollständigen Zugriff auf die Datenbank mit den Rechten des Datenbanknutzers der die ursprüngliche SQL-Anfrage ausgelöst hätte
  • eine gute Einführung in das Problem gibt der entsprechende Wikipedia-Artikel (Achtung! Die dort genannte PHP-Schutzlösung auf Basis von mysql_*-Funktionen ist veraltet!)
  • die beste Vorbeugung gegen SQL-Injections besteht zur Zeit in der ausschließlichen Verwendung von Prepared Statements
  • eine exzellente Einführung in die Verwendung von Prepared Statements ist hier zu finden (der Text bezieht sich zwar explizit auf PHP und MySQL, der Inhalt lässt sich aber auf andere Programmiersprachen und Datenbankmanagementsysteme übertragen)
14. Wie sollte ich die Tabellen, Spalten usw. in einem selbst erstellten Datenbankschema benennen? Gibt es Standards oder hilfreiche Konventionen?

Leider gibt es keinen allgemeinen Standard für die Benennung von Datenbankelementen. Dennoch haben sich einige Konventionen durchgesetzt (während andere nach wie vor heftig diskutiert werden).

Als Empfehlung können wir Ihnen aber die von uns selbst erstellten und verwendeten Konventionen für die eigenen Datenbanken des Datenbankservices nennen:

  • grundsätzlich kein Abweichen von der ersten Normalform - d.h. nur atomare und keine strukturierten Daten in einzelnen Datenbankfeldern
  • so normalisiert wie möglich (insbesondere keine redundanten Daten) - nur da denormalisiert, wo sinnvoll (z.B. Anrede "Herr/Frau" nicht in separate Tabelle auslagern)
  • grundsätzlich alle Bezeichner ausschließlich in Kleinbuchstaben, Unterstriche sind erlaubt ("person" statt "Person"), keine Umlaute oder Sonderzeichen
  • Bezeichner nie gendern o.ä. erweitern
  • Tabellennamen im Singular ("person" statt "personen")
  • Attributnamen (außer Fremdschlüssel) mit Präfix, der Kurzform des Tabellennamens wiederspiegelt ("pers_name" statt "name")
  • Primärschlüssel ist immer Präfix + "_id" ("pers_id") und vom Typ Serial/BigSerial (PostgreSQL) bzw. Integer Auto Increment (MySQL)
  • Fremschlüsselnamen werden inklusive Präfix von der referenzierten Tabelle übernommen ("pers_id" bleibt in jeder referenzierenden Tabelle "pers_id")
  • keine Abkürzungen ("pers_geburtsjahr" statt "pers_geb")
  • keine "Anreicherung" von Attributnamen, insbesondere nicht durch Erweiterung um den Datentypen ("pers_geburtsjahr" statt "pers_geburtsjahr_int")
  • grundsätzlich soviele Constraints wie möglich (aber natürlich keine, deren Kriterien bereits durch andere abgedeckt sind)
15. Gibt es Literaturempfehlungen seitens des Datenbankservices?

Für Datenbankeinsteiger ist unserer Meinung nach das folgende Buch am Besten geeignet:

  • Mana Takahashi: "The Manga Guide to Databases" (original) - ISBN-13: 978-1593271909
  • Mana Takahashi: "Informatik-Manga: Datenbanken" (dt. Übersetzung) - ISBN-13: 978-3834809834

Bezüglich Fragen zu einem konkreten Datenbanksystems ist nach unserer Einschätzung das zugehörige Manual die beste Anlaufstelle: