Vorheriger Abschnitt Inhaltsverzeichnis Nächster Abschnitt

8.2 MySQL-Datenbank

Die folgenden Ausführungen beziehen sich noch auf eine ältere Version von phpMyAdmin, so dass die Screenshots vom "echten" Bild abweichen.

8.2.1 DBMS (Datenbank - Management - System) einschalten

Zuerst sollte man folgendes prüfen:

Diese Bedingung sollte man unbedingt einhalten, denn der mySQL-Server ist recht speicherhungrig, man sollte ihm also ruhig 256 MB oder mehr gönnen.

Ist die Speicherausrüstung des Servers ausreichend, kann es los gehen:

Man meldet sich als sysadm am Server an und geht unter "Verwalten" - "Dienste" auf den Punkt "MySQL - Server EINschalten". Danach muss wie immer "AKTIVIERT" werden und fertig ist man. Ein Neustart des Servers ist nicht nötig.

Der mySQL - Server wird von nun an auch bei jedem Serverstart automatisch mit gestartet.

8.2.2 Nutzerdatenbank einrichten

Auf dem c't/ODS-Schulserver ist man fein raus. Alles ist vorbereitet, man kann die Datenbank sofort nutzen. Trotzdem kann etwas Wissen zur Einrichtung nicht schaden.

Im Verzeichnis /var/mysql befinden sich alle vorbereiteten Datenbanktabellen. Sollte das Einschalten nicht so richtig klappen, dann liegt es meist an dieser Stelle. Von Hand kann man die gesamte Struktur als root mit dem Befehl:

neu anlegen.

Das Ergebnis ist die Struktur unter /var/mysql/mysql  mit folgenden Tabellen:

 

8.2.3 Administration

Neben dem Administrationstool "mysqladmin", welches direkt an einer Serverkonsole einsetzbar ist, kann man mySQL sehr komfortabel mit einem beliebigen Browser vom Client aus mittels "phpMyAdmin" verwalten.

1. Schritt: Browserbasierte Administration

Jetzt kann es losgehen: Im Browser trägt man folgende Adresse (Achtung: Gross- und Kleinschreibweise beachten!) ein:

http://arktur/phpMyAdmin

Jetzt erscheint die Passwortabfrage:

Authentifizierung des Nutzers
Abbildung 8.2-1: Anmeldung in phpMyAdmin

Hier trägt man als User "root" und als Passwort "arktur" ein und schon ist man drin:

Webseite
Abbildung 8.2-2: phpMyAdmin im Browser

8.2.4 Nuter und deren Rechte in mySQL

*MySQL* unterscheidet nicht zwischen einzelnen Benutzern sondern zwischen der Kombination aus Benutzer und Host. Diese Kombination ergibt eine eindeutige ID. Das Sicherheitssystem regelt hierbei genaustens welcher Benutzer von welchem Host welche Rechte auf welcher Datenbank besitzt. Diese Einstellungen werden in drei Tabellen abgelegt: user host db Die jeweiligen Tabellen sind wie folgt aufgebaut:

'user'-Tabelle

Beinhaltet alle Host/User Kombinationen, welche den MySQL-Server connecten dürfen. Alle Berechtigungen die ein Benutzer in dieser Tabelle enthält gelten für alle! Datenbanken, sofern keine erweiterten Berechtigungen für den jeweiligen Benutzer in der Tabelle 'db' definiert wurden. Man kann diese Berechtigungen auch als grundlegende Einstellungen ansehen und ein entsprechendes, datanbankabhängiges Feintunig in der Tabelle 'db' festlegen. 

Der Tabellenaufbau für 'user':

 

Field Type Key Default
Host  char(60) PRI ""
User char(16) PRI ""
Password char(16) - ""
Select_priv  enum('N','Y') - N
Insert_priv  enum('N','Y') - N
Update_priv  enum('N','Y') - N
Delete_priv enum('N','Y') - N
Create_priv enum('N','Y') - N
Drop_priv enum('N','Y') - N
Reload_priv enum('N','Y') - N
Shutdown_priv enum('N','Y') - N
Process_priv enum('N','Y') - N
File_priv enum('N','Y') - N

 

'db'-Tabelle

In dieser Tabelle wird definiert welche Datenbank der jeweilige Host/Benutzer mit welchen Berechtigungen verwenden darf. Sie stellt wie bereits erwähnt das Feintuning dar. 

Der Tabellenaufbau von 'db': 

Field Type Key Default
Host  char(60) PRI ""
Db char(64) PRI ""
User char(16) PRI ""
Select_priv  enum('N','Y') - N
Insert_priv  enum('N','Y') - N
Update_priv  enum('N','Y') - N
Delete_priv enum('N','Y') - N
Create_priv enum('N','Y') - N
Drop_priv enum('N','Y') - N

 

'host'-Tabelle

Die host-Tabelle ist in großen Netzwerken als 'Nachschlage'-Tabelle für leere Host-Einträge in der 'db'-Tabelle sinnvoll. Möchte man daß ein Benutzer von jedem Host in dem Netzwerk auf den DB-Server zugreifen kann, sollte man den Host-Eintrag in der 'db'-Tabelle auslassen und alle Host des Netzwerkes in der 'host'-Tabelle eintragen. 

Der Tabellenaufbau von 'host': 

Field Type Key Default
Host  char(60) PRI ""
Db char(64) PRI ""
Select_priv  enum('N','Y') - N
Insert_priv  enum('N','Y') - N
Update_priv  enum('N','Y') - N
Delete_priv enum('N','Y') - N
Create_priv enum('N','Y') - N
Drop_priv enum('N','Y') - N

 

Die HOST und DB Spalten können Strings mit Wildcards '%' und '_' beinhalten. Wird für diese Spalten kein Wert eingetragen entspricht dies dem Wert '%'. 

Ein HOST kann sein: localhost, ein Hostname, eine IP-Nummer oder ein String mit Wildcards. Ein leerer HOST-Eintrag in der 'db'-Tabelle bedeutet kein Host aus der 'host'-Tabelle. Ein leerer HOST-Eintag in der 'host'- oder 'user'-Tabelle bedeutet kein Host. 

Die Spalte DB beinhaltet den Namen einer Datenbank oder einer SQL Regexp. Ein leerer Benutzereintrag bedeutet kein Benutzer. In dieser Spalte können keine Wildcards verwendet werden. 

Die Berechtigungen der 'user'-Tabelle werden ge-OR-d mit den Berechtigungen aus der 'db'-Tabelle. Dies Bedeutet, daß ein Superuser nur in der Tabelle 'user' mit allen Berechtigungen festgelegt auf 'Y' eingetragen werden muß. 

Wenn man sich nun den Aufbau der Tabellen näher betrachtet, wird man feststellen, daß die 'user'-Tabelle zusätzlich zu den Zugriffsberechtigungen auf die jeweilige Datenbank auch administrative Berechtigungen regelt. Dadurch sollte klar sein, daß diese Tabelle die grundlegenden Berechtigungen regelt. 

Achtung:

 

8.2.5 Datenbanken verwenden

Datenbanken bestehen aus mindestens einer Tabelle.
Jeder Datensatz der Datenbank ist exakt eine Zeile in einer Tabelle.
Einzelne Datensätze können gelesen, (neue) hinzugefügt, aktualisiert oder gelöscht werden. All diese Aktionen heißen: Abfragen.

An Hand einer Klassenliste erklärt es sich am besten:

Die Datenbank nennen wir: test und die darin enthaltene Tabelle: klassen

ID Name Vorname Klasse Bemerkung
1 Meier Max 7a  
2 Meyer Mary 7a  
3 Witz Willy 8b  

Zuerst wird die Datenbank geöffnet:

        USE test;

Will man nun alle Nachnamen auslesen, so gibt man den folgenden SQL - Befehl ein:

        SELECT Name FROM klassen;
Sollen Name und Vorname der Schüler gelesen werden, so lautet der Befehl:
        SELECT Name,Vorname FROM klassen;
Wenn man die ganze Zeile auslesen will, so reicht der Befehl:
        SELECT * FROM klassen;
Die auszulesenden Datensätze können automatisch bestimmt werden. Der Befehl:
        SELECT * FROM klassen WHERE Klasse=7a;
gibt nur die Schülerdaten der Schüler aus, die in der Klasse 7a sind. 

Sortiert werden können diese Datensätze dann mit foglendem Befehl:

        SELECT * FROM klassen WHERE Klasse=7a ORDER BY Name;

Neue Datensätze werden mit folgendem Befehl hinzugefügt:

        INSERT klassen (Name,Vorname,Klasse,Bemerkung)
         VALUES ('Mittig','Mario','10c','');
Vorhandene Datensätze können mit
        UPDATE klassen SET klasse='6b',Bemerkung='nicht versetzt' WHERE ID=2;

überschrieben werden.

SQL - Befehle mittels PHP

Die oben genannten SQL - Befehle sollen nun mit PHP vom Webserver aus verwendet werden.

<script language='php'>
        $verbindung = @mysql_connect("localhost","theo","");
        if (!$verbindung) {
                echo "Keine Verbindung zum Datenbanksystem!\n";
                exit;
        }
        $abfrage = "SELECT Name,Vorname from klassen";
        $erg = mysql_db_query("test",$abfrage,$verbindung);
        while (list($Name,$Vorname) = mysql_fetch_row($erg)) {
                echo "$Vorname $Name<BR>\n";
        }
        mysql_close($verbindung);
</script>

 

 .


Vorheriger Abschnitt Inhaltsverzeichnis Nächster Abschnitt

© Reiner Klaproth, 28.12.2001
vielen Dank an Uwe Schoffer für die Beschreibung