mySQL

Eine Datenbank braucht man für fast jede Webanwendung. Ich verwende hier die sehr verbreitete mySQL-Datenbank, auch wenn es vielleicht nicht das performanteste System ist.

mySQL installieren wir auch aus den Ports. Gleichzeitig versuchen wir den Datenbankserver mit einigen kleinen Tricks etwas sicherer zu machen.

  1. Zunächst kompilieren und installieren wir den mySQL-Server. Wir nutzen hier kein SSL, da wir auf die Datenbank nur lokal zugreifen werden und den Sinn einer Verschlüsselung des internen Datenverkehrs sehe ich noch nicht.

    # cd /usr/ports/databases/mysql50-server

    # make BUILD_OPTIMIZED=yes BUILD_STATIC=yes

    # make install clean

  2. Wir sichern in einem nächsten Schritt den mySQL-Server ab und installieren eine Testdatenbank:

    # strip /usr/local/libexec/mysqld

    # /usr/local/bin/mysql_install_db

  3. Jetzt können wir wählen, welche Konfiguration wir verwenden. Dies hängt von der erwarteten Größe der Datenbank ab. Hierfür werden 3 verschiedene Konfigurationsempfehlungen mitgeliefert: small, medium, large, huge

    # cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

  4. Wir haben unseren SQL-Server ja in einer Jail laufen und da ich den Webserver, der in einer anderen Jail läuft, auf die Datenbank zugreifen lassen will, kann ich an dieser Stelle den externen Zugriff nicht verbieten. Aber wir sollten den Zugriff auf lokale Dateien unterbinden, indem wir folgende Zeile im Abschnitt [mysqld] einfügen:

    set-variable=local-infile=0

  5. Zusätzlich fügen wir noch folgende Zeilen ein:

    default-character-set = utf8
    default-collation = utf8_general_ci

  6. Jetzt müssen wir noch den mySQL-Server in der '/etc/rc.conf' aktivieren, sodass beim nächsten Systemstart der Server automatisch startet:

    mysql_enable="YES"

  7. Bevor wir den Server nun starten können, müssen wir den Speicherort der Datenbanken erstellen und in die Hände unseres Benutzers "mysql" legen:

    # chown -R mysql:mysql /var/db/mysql

  8. Jetzt können wir den mySQL-Server starten:

    # /usr/local/etc/rc.d/mysql-server start

  9. Jetzt ändern wir das Passwort des Datenbankbenutzers "root" und ändern anschließend seinen Namen. Das sichert den Server nochmals ab, da "root" der Standardname bei Datenbanken ist und somit nur das Passwort erraten werden müsste:

    # mysql -u root

    mysql> SET PASSWORD FOR root@localhost=PASSWORD('neuesPasswort');

    Jetzt löschen wir noch die Test-Datenbank:

    mysql> drop database test;
    mysql> use mysql;
    mysql> delete from db;
    mysql> update user set user="mydbadmin" where user="root";
    mysql> flush privileges;
    mysql> exit;

  10. Jetzt löschen wir noch die Befehls-History:

    # rm -P ~/.mysql_history
Einen Kommentar hinzufügen

Einen Kommentar hinzufügen

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)
Code im diesem Bild:
Ihr Name(*):
Kommentar(*):
 
  • May 12, 2011, 4:37 pm - Benedikt

    Die Installation bezieht sich auf MySQL 5.0. Es kann sein, dass sich mit der Zeit Dinge ändern, wodurch manch beschriebenes Tutorial nicht mehr 100% funktioniert. Ich nutze nur noch MySQL 5.5.

    Abgesehen von den BUILD-Optionen kannst du auch einfach "make install clean" ausführen um MySQL 5.0 zu installieren. Belasse testweise die my.cnf auf einer Default-Einstellung.

    Wenn MySQL gestartet ist, wird das Socket-File erstellt. Nun ist der MySQL-Server auch unter der IP deiner MySQL-Jail erreichbar und lauscht auf dem Port 3306.

    Wenn du nun in der Webserver-Jail eine MySQL-Verbindung aufbauen willst, verwendest du als Host die IP deines MySQL-Servers, den Benutzernamen und das Passwort.

    Damit sollte es funktionieren. Falls nicht darfst du mir auch eine Email schreiben.

    Grüsse,
    Benedikt

  • May 12, 2011, 4:26 pm - Paul

    > Ist doch kein Problem, oder?

    für mich leider schon. Bin ein blutiger Anfänger und weiss nicht wie ich jetzt genau die Verbindung zwischen MySQL und WebJail einrichten soll :(

    System: FreeBSD 8.2 mit ZFS auf Hetzners EQ4

    Übrigens, mit "make BUILD_OPTIMIZED=yes BUILD_STATIC=yes" startet MySQL nach der Installation gar nicht, auch nicht mit
    set-variable=local-infile=0
    default-character-set = utf8
    default-collation = utf8_general_ci

    /tmp/mysql.sock fehlt und wird nach jedem Neustart von MySQL entfernt.
    Muss man für MySQL speziell eine separate Jail erstellen und dort MySQL installieren?

    Gruss, Paul.

  • January 29, 2010, 10:32 pm - Benedikt

    Hallo Chris,

    Danke für das Lob. Freut mich sehr!!

    Zu deiner Anmerkung: Punkt 4 erwähnt ja bereits, dass wir nicht per Socket auf den mySQL-Server zugreifen können. Daher denke ich sollte es kein Problem sein. In Skripten muss lediglich die IP-Adresse der mySQL-Jail angegeben und der Datenbankbenutzer für den Zugriff von der anderen Jail freigeschalten sein.

    Ist doch kein Problem, oder?

    Grüsse,
    Benedikt

  • January 29, 2010, 10:28 pm - Chris

    Hallo,
    erstmal ein riesen Kompliment für diese gelungene Seite(n).
    Gerade für Neulinge wäre es aber schön wenn Du gerade bei Datenbanken das Problem mit den Sockets näher erleutern würdest.
    Es ist nämlich nicht ganz einfach von einem Jail auf eine Datenbank zuzugreifen die in einem anderen Jail werkelt.