Administratorfunktionen für eine Homepage, die mit php und MySQL aufgebaut ist.


Dies ist eine Beschreibung, bei der mehrere Administratoren "ihre" Datenbank pflegen können. Dieses System lief einige Jahre als Homepage, ist aber inzwischen von einer anderen Homepage abgelöst worden.
Diese Demonstrationsversion steht auf meiner Homepage (Heinz-Wember.de), deshalb sind hier auch nur einige wenige Datenbanken für dieses System erstellt worden, damit man demonstrieren kann, wie es in Production laufen könnte. In Production lief dieses Sytem mit 10 Datenbanken geben, die jeweils von einer (bzw. zwei) Personen einer Abteilung gepflegt werden z.B. Bergsteigerabteilung, Skiabteilung, Seniorenabteilung, Ausbildung, Geschäftsstelle etc. Diese Demonstrationsdatenbank hat nur die Datenbanken hpentw , TEST, ski, buecherei und huetten.

Nun zur technischen Verwirklichung:
Die Pflege einer DB geht über das System phpMyAdmin, das man vom Internet runterladen kann: http://www.phpmyadmin.net/  
Zur Zeit ist hier eine alte Version installiert, die es schon 2004 gegeben hat. Diese Version ist natürlich voll funktionsfähig, aber sie ist nur für die Pflege einer DB designed. Deshalb gibt es auf meiner Homepage (das dieses Demonstrationsmodell auch enthält) für jede der jetzt vorhanden DBs ein eigenes Administrator-Verzeichnis (phpMyAdmin-hp, phpMyAdmin-ski, phpMyAdmin-test). Jedes Verzeichnis ist bis auf die config-Datei gleich.
Die config-Datei steht als Muster hier config-demo-Datei . Die Zeilen, auf die es ankommt und die auch geändert werden müssen, sind hier aufgeführt:

$cfg['Servers'][$i]['host']             = 'db1910.1und1.de'; // MySQL hostname or IP address
$cfg['Servers'][$i]['user']            = 'dbo285897188';      // MySQL user
$cfg['Servers'][$i]['password']  = 'falsch';          // MySQL password (only needed
$cfg['Servers'][$i]['only_db']      = 'db285897188';          // If set to a db-name, only

Die config-Datei für die anderen DBs hat die entsprechenden Werte, so wie man es bei der Webspace-Administratorfunktion (bei mir 1und1.de Untermenü MySQL-Datenbank) für die einzelnen DBs sehen kann.
Die Größe des Verzeichnisses phpMyAdmin-test ist etwa 11 MB.

Unabhängig von dieser phpMyAdmin-Funktion, die jeweils nur eine DB pflegen kann, hat der Webspace-Administrator natürlich die Möglichkeit als Administator einzuloggen. Dann hat es natürlich Zugriff auf alle DBs, die für diesen Webspace angelegt sind.



PHPMyAdmin 3.1.5. Administration mit mehreren Datenbanken

Die Absicht, die hinter diesem Konzept steht, ist, dass es mehrere Administratoren für die Pflege der Datenbanken gibt. Alle Tabellen, die ein bestimmter Teil-Administrator pflegen soll, stehen in einer separaten DB. Diese Teil-Administratoren sollen "ihre" Daten pflegen können, nicht jedoch das Domain-Admin-Passwort haben. Auch brauchen sie nicht die Rechte für einen ftp. Das Schreiben der Skripte, in denen die Tabellen mit select gelesen und entsprechend die Daten aufbereitet ausgegeben werden, macht der Haupt-Administrator.

Diese Version ist nun voll funktionsfähig, der Aufruf heißt Admin Version 3.1.5. Hier kann man alle zur Zeit vorhandenen DBs pflegen. Die DBs haben natürlich alle verschiedene Passwörter.

Das Verzeichnis phpMyAdmin hat aus Sicherheitsgründen ein Passwort.
Das Passwort wurde mit der Admin-Routine von 1und1 <geschützte Verzeichnisse> erstellt. Nach einigen Minuten ist die entsprechende Datei .htaccess erstellt. Diese wird nun auf den PC mittels ftp runtergeladen.
Damit das Programm phpMyAdmin Version 3.1.5 laufen kann (es benötigt php 5.2), muss die Datei .htaccess  modifiziert werden um diese beiden Parameter:

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

Achtung: Wenn durch Benützung der Routine <geschütze Verzeichnisse> Änderungen bei der Datei .htaccess gemacht werden (neue Benutzer etc), verschwinden die beiden Parameter Add... aus der Datei .htaccess. Es muss also wieder manuell modifziert werden.

Damit werden alle Skripte, die als Endung php haben, als php5 interpretiert. Damit man sich die Benutzercodes der einzelnen DBs leichter merken kann, habe ich noch eine Funktion geschrieben, die alle Daten (außer den Passwörtern) zeigt, die man pflegen kann.
Diese Funktion lautet so:
<table style="width: 88%; text-align: left; margin-left: left; margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
  <tbody>
<?php include "zugriff-dbmysql.inc.php"
 ?>
<?php mysql_select_db(MYSQL_DATENBANK) or die(mysql_error());
$abfrage = "SELECT
  `Host` , `Db` ,  `User` , description FROM  `db` order by `description`";
 
$ergebnis = mysql_query($abfrage);
 ?>
<?php while($row = mysql_fetch_object($ergebnis))
  {
     echo  "<tr><td style=width: 20%; >$row->Host  </td>";
     echo  " <td style=width: 20%; > $row->Db </td>";
     echo  " <td style=width: 20%; > $row->User </td>";
     echo  " <td style=width: 20%; > $row->description </td></tr>";
  }

 ?>
  </tbody>
</table>

Die config-Datei wird folgendermaßen eingestellt:
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost:/tmp/mysql5.sock';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysqli if your server has it */
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['only_db'] = array('dbo289108550', 'db288897792 ', 'db288936898', 'db288969739', 'db288916665');

/* rajk - for blobstreaming */
$cfg['Servers'][$i]['bs_garbage_threshold'] = 50;
$cfg['Servers'][$i]['bs_repository_threshold'] = '32M';
$cfg['Servers'][$i]['bs_temp_blob_timeout'] = 600;
$cfg['Servers'][$i]['bs_temp_log_threshold'] = '32M';

/* User for advanced features */
// $cfg['Servers'][$i]['controluser'] = 'dbo289108550';
// $cfg['Servers'][$i]['controlpass'] = 'pw';

Alle anderen Parameter bleiben unverändert.

Die DB mit dem Benutzercode dbo289108550 enthält nur eine Tabelle und zwar die Tabelle db:

localhost:/tmp/mysql5.sock db288897792 dbo288897792 Buecherei
localhost:/tmp/mysql5.sock db288913217 dbo288913217 TEST
localhost:/tmp/mysql5.sock db288936898 dbo288936898 hpentw
localhost:/tmp/mysql5.sock db288969739 dbo288969739 huetten
localhost:/tmp/mysql5.sock db289108550 dbo289108550 mysql
localhost:/tmp/mysql5.sock db288916665 dbo288916665 ski

In dieser DB mysql sind auch bei der Tabelle db die Rechte zu vergeben, was man tun darf: select, insert, update, delete, siehe Bild:

DB privileges


Die Rechte, neue Tabellen erstellen, ändern oder löschen habe ich bewusst nicht gegeben, damit die Administratoren für die Pflege einer Datenbank diese Änderungen nicht machen können. (Wenn man neue Felder aufnimmt, ändert sich natürlich auch das Programm, in dem der Select für diese Tabelle vorkommt. Diese Programme soll nur der Hauptadministrator ändern und mit ftp freigeben können.
Nach dem Einloggen in die DB mysql kommen alle Benutzercodes für die  im Parameter only_db genannten Datenbanken.
Nach dem Auswählen der betreffenden DB kommt der Login-Screen, wo man den Benutzercode der gewünschten DB eingeben muss, also wenn man die DB huetten haben will, muss man als Benutzercode dbo288969739 und das dazugehörige Passwort eingeben. Damit man sich die Benutzercodes leichter merken kann, habe ich die Funktion <Verfügbare Datenbanken> geschrieben, wo neben den benötigten Parametern auch die Beschreibung  (z.B. huetten) dabeisteht.

Bei der DB, die man ausgewählt hat, stehen in Klammern die Anzahl der Tabellen dabei, die man pflegen kann. In diesem Beispiel war es de DB ski, die zur Zeit 10 Tabellen hat.

Beispiel PHPMyAdmin

Nachdem man auf die DB db288916665 (10) geklickt hat, hat man Zugriff auf die DB ski, siehe Bild:

DB ski



Dokumentation: Beispiel-Homepage mit PHP und MySQL  

Heinz Wember
Änderungsstand: 17-Aug-2014