Installation

phpMyAdmin wendet keine speziellen Methoden zur Sicherung des MySQL Datenbankservers an. Es ist immer noch Aufgabe des Administrators, die richtigen Berechtigungen für die MySQL-Datenbanken zu setzen. Die Seite Benutzer in phpMyAdmin kann dafür benutzt werden.

Warnung

Als Mac-Nutzer beachten Sie bitte, dass bei Verwendung einer Version vor Mac OS X StuffIt im Mac-Format entpackt. Sie müssen somit ALLE phpMyAdmin-Skripte zum Beispiel mit BBEdit im Unix-Stil neu speichern, bevor Sie sie auf Ihren Server hochladen, denn PHP mag scheinbar keine Zeilenumbrüche im Mac-Stil („\r“).

Linux-Distributionen

phpMyAdmin ist in den meisten Linux-Distributionen enthalten. Verwenden Sie möglichst Distributions-Pakete – sie stellen gewöhnlich Integration in Ihre Distribution bereit, und Sie erhalten Sicherheits-Updates automatisch von Ihrer Distribution.

Debian

Die Paket-Repositorys von Debian enthalten ein phpMyAdmin-Paket, beachten Sie jedoch, dass die Konfigurations-Datei in /etc/phpmyadmin verwaltet wird und sich in mancherlei Hinsicht von der offiziellen phpMyAdmin-Dokumentation unterscheiden kann. Es tut:

Siehe auch

Weitere Informationen können in README.Debian gefunden werden (wird mit dem Paket als /usr/share/doc/phmyadmin/README.Debian installiert).

OpenSUSE

OpenSUSE kommt bereits ab Werk mit einem phpMyAdmin-Paket, installieren Sie Pakete einfach vom openSUSE Build Service.

Ubuntu

Ubuntu liefert ein phpMyAdmin-Paket, falls Sie Wert auf eine aktuelle Version legen, können Sie auch die Pakete von phpMyAdmin PPA verwenden.

Siehe auch

Die Pakete sind die selben wie in Debian Bitte schlagen Sie für weitere Einzelheiten dort in der Dokumentation nach.

Gentoo

Gentoo liefert das phpMyAdmin-Paket, sowohl in einer grundlegenden Konfiguration als auch mit einer webapp-config-Konfiguration. Verwenden Sie emerge dev-db/phpmyadmin zum Installieren.

Mandriva

Mandriva liefert das phpMyAdmin-Paket im contrib-Zweig, es kann über das normale Kontrollzentrum installiert werden.

Fedora

Fedora liefert das phpMyAdmin-Paket, beachten Sie jedoch, dass die Konfigurations-Datei in /etc/phpMyAdmin/ verwaltet wird und sich in mancherlei Hinsicht von der offiziellen phpMyAdmin-Dokumentation unterscheiden kann.

Red Hat Enterprise Linux

Red Hat Enterprise Linux und ihre Derivate wie CentOS liefern phpMyAdmin nicht, doch das Fedora-betriebene Repository Extra Packages for Enterprise Linux (EPEL) enthält phpMyAdmin, falls es aktiviert ist. Beachten Sie jedoch, dass die Konfigurations-Datei in /etc/phpMyAdmin/ verwaltet wird und sich in mancherlei Hinsicht von der offiziellen phpMyAdmin-Konfiguration unterscheiden kann.

Installation auf Windows

Der einfachste Weg, phpMyAdmin in Windows zu installieren, besteht darin, Drittanbieter-Produkte zu verwenden, die phpMyAdmin zusammen mit einer Datenbank und einem Webserver enthalten, wie etwa XAMPP.

Weitere derartige Optionen finden Sie in der Wikipedia.

Installation aus Git heraus

Sie können den aktuellen phpMyAdmin-Quelltext von https://github.com/phpmyadmin/phpmyadmin.git klonen:

git clone https://github.com/phpmyadmin/phpmyadmin.git

Additionally you need to install dependencies using the Composer tool:

composer update

If you do not intend to develop, you can skip the installation of developer tools by invoking:

composer update --no-dev

Installation mit Composer

You can install phpMyAdmin using the Composer tool, since 4.7.0 the releases are automatically mirrored to the default Packagist repository.

Bemerkung

The content of the Composer repository is automatically generated separately from the releases, so the content doesn’t have to be 100% same as when you download the tarball. There should be no functional differences though.

To install phpMyAdmin simply run:

composer create-project phpmyadmin/phpmyadmin

Alternatively you can use our own composer repository, which contains the release tarballs and is available at <https://www.phpmyadmin.net/packages.json>:

composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev

Installation mit Docker

phpMyAdmin bringt ein Docker image mit, das Sie leicht einrichten können. Sie können es wie folgt herunterladen:

docker pull phpmyadmin/phpmyadmin

The phpMyAdmin server will listen on port 80. It supports several ways of configuring the link to the database server, either by Docker’s link feature by linking your database container to db for phpMyAdmin (by specifying --link your_db_host:db) or by environment variables (in this case it’s up to you to set up networking in Docker to allow the phpMyAdmin container to access the database container over network).

Umgebungsvariablen mit Docker

Sie können verschiedene Funktionen von phpMyAdmin durch Umgebungsvariablen konfigurieren:

PMA_ARBITRARY

Allows you to enter a database server hostname on login form.

PMA_HOST

Hostname oder IP-Adresse des zu nutzenden Datenbankservers.

PMA_HOSTS

Comma-separated host names or IP addresses of the database servers to use.

Bemerkung

Wird nur benutzt, wenn PMA_HOST leer ist.

PMA_VERBOSE

Verbose name of the database server.

PMA_VERBOSES

Comma-separated verbose name of the database servers.

Bemerkung

Wird nur benutzt, wenn PMA_VERBOSE leer ist.

PMA_USER

Benutzername, der für Config-Authentifizierungsmethode verwendet werden soll.

PMA_PASSWORD

Kennwort, das für Config-Authentifizierungsmethode verwendet werden soll.

PMA_PORT

Port of the database server to use.

PMA_PORTS

Comma-separated ports of the database server to use.

Bemerkung

Used only if PMA_PORT is empty.

PMA_ABSOLUTE_URI

Der vollständige Pfad (https://pma.example.net/) unter dem der Umkehrproxy phpMyAdmin erreichbar macht.

Standardmäßig wird Cookie-Authentifizierungsmethode verwendet, sind aber PMA_USER und PMA_PASSWORD gesetzt, wird auf Config-Authentifizierungsmethode umgeschaltet.

Bemerkung

The credentials you need to log in are stored in the MySQL server, in case of Docker image there are various ways to set it (for example MYSQL_ROOT_PASSWORD when starting the MySQL container). Please check documentation for MariaDB container or MySQL container.

Customizing configuration

Additionally configuration can be tweaked by /etc/phpmyadmin/config.user.inc.php. If this file exists, it will be loaded after configuration is generated from above environment variables, so you can override any configuration variable. This configuration can be added as a volume when invoking docker using -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php parameters.

Note that the supplied configuration file is applied after Umgebungsvariablen mit Docker, but you can override any of the values.

For example to change default behaviour of CSV export you can use following configuration file:

<?php
$cfg['Export']['csv_columns'] = true;
?>

You can also use it to define server configuration instead of using the environment variables listed in Umgebungsvariablen mit Docker:

<?php
/* Override Servers array */
$cfg['Servers'] = [
    1 => [
        'auth_type' => 'cookie',
        'host' => 'mydb1',
        'port' => 3306,
        'verbose' => 'Verbose name 1',
    ],
    2 => [
        'auth_type' => 'cookie',
        'host' => 'mydb2',
        'port' => 3306,
        'verbose' => 'Verbose name 2',
    ],
];

Siehe auch

Siehe Konfiguration für eine genauere Beschreibung der Einstellungsmöglichkeiten.

Docker Volumes

You can use following volumes to customize image behavior:

/etc/phpmyadmin/config.user.inc.php

Kann für weitere Einstellungen verwendet werden, mehr Details dazu im vorherigen Kapitel.

/sessions/

Directory where PHP sessions are stored. You might want to share this for example when using Signon-Authentifizierungsmethode.

/www/themes/

Directory where phpMyAdmin looks for themes. By default only those shipped with phpMyAdmin are included, but you can include additional phpMyAdmin themes (see Custom Themes) by using Docker volumes.

Docker Examples

To connect phpMyAdmin to a given server use:

docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin

Um phpMyAdmin mit weiteren Servern zu verbinden, Folgendes verwenden:

docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin

Um einen beliebigen Server angeben zu können:

docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin

Sie können den Datenbankcontainer auch mit Docker verbinden:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin

Running with additional configuration:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin/phpmyadmin

Running with additional themes:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin

Mit docker-compose

Alternatively you can also use docker-compose with the docker-compose.yml from <https://github.com/phpmyadmin/docker>. This will run phpMyAdmin with an arbitrary server - allowing you to specify MySQL/MariaDB server on login page.

docker-compose up -d

Customizing configuration file using docker-compose

You can use an external file to customize phpMyAdmin configuration and pass it using the volumes directive:

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
     - PMA_ARBITRARY=1
    restart: always
    ports:
     - 8080:80
    volumes:
     - /sessions
     - ~/docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
     - /custom/phpmyadmin/theme/:/www/themes/theme/

Running behind haproxy in a subdirectory

When you want to expose phpMyAdmin running in a Docker container in a subdirectory, you need to rewrite the request path in the server proxying the requests.

For example using haproxy it can be done as:

frontend http
    bind *:80
    option forwardfor
    option http-server-close

    ### NETWORK restriction
    acl LOCALNET  src 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12

    # /phpmyadmin
    acl phpmyadmin  path_dir /phpmyadmin
    use_backend phpmyadmin if phpmyadmin LOCALNET

backend phpmyadmin
    mode http

    reqirep  ^(GET|POST|HEAD)\ /phpmyadmin/(.*)     \1\ /\2

    # phpMyAdmin container IP
    server localhost     172.30.21.21:80

When using traefik, something like following should work:

defaultEntryPoints = ["http"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
      regex = "(http:\\/\\/[^\\/]+\\/([^\\?\\.]+)[^\\/])$"
      replacement = "$1/"

[backends]
  [backends.myadmin]
    [backends.myadmin.servers.myadmin]
    url="http://internal.address.to.pma"

[frontends]
   [frontends.myadmin]
   backend = "myadmin"
   passHostHeader = true
     [frontends.myadmin.routes.default]
     rule="PathPrefixStrip:/phpmyadmin/;AddPrefix:/"

You then should specify PMA_ABSOLUTE_URI in the docker-compose configuration:

version: '2'

services:
  phpmyadmin:
    restart: always
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    hostname: phpmyadmin
    domainname: example.com
    ports:
      - 8000:80
    environment:
      - PMA_HOSTS=172.26.36.7,172.26.36.8,172.26.36.9,172.26.36.10
      - PMA_VERBOSES=production-db1,production-db2,dev-db1,dev-db2
      - PMA_USER=root
      - PMA_PASSWORD=
      - PMA_ABSOLUTE_URI=http://example.com/phpmyadmin/

Schnellinstallation

  1. Wählen Sie eine passende Distributions-Variante von der phpmyadmin.net Downloads-Seite. Manche Varianten enthalten nur die englische Übersetzung, andere enthalten alle Sprachen. Wir nehmen an, dass Sie eine Variante wählen, deren Name ähnlich wie phpMyAdmin-x.x.x -all-languages.tar.gz lautet.
  2. Versichern Sie sich, dass Sie eine unverändertes Archiv heruntergeladen haben. Siehe hierzu Prüfen der phpMyAdmin Releases.
  3. Entpacken Sie die Distribution (stellen Sie sicher, dass Sie auch die Unterverzeichnisse entpacken): tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz ins Wurzelverzeichnis Ihres Webservers. Wenn Sie keinen direkten Zugriff auf dieses Verzeichnis haben, entpacken Sie die Dateien in ein Verzeichnis auf Ihrer lokalen Maschine und, nach Schritt 4, verschieben Sie das Verzeichnis auf Ihren Webserver z.B. mit ftp.
  4. Stellen Sie sicher, dass alle Skripte den passenden Eigentümer gesetzt haben (wenn PHP im Safe-Mode läuft, werden Probleme auftreten, wenn manche Skripte verschiedene Eigentümer besitzen). Siehe 4.2 What’s the preferred way of making phpMyAdmin secure against evil access? und 1.26 I just installed phpMyAdmin in my document root of IIS but I get the error „No input file specified“ when trying to run phpMyAdmin. für Empfehlungen.
  5. Jetzt müssen Sie Ihre Installation konfigurieren. Es gibt zwei Methoden, die benutzt werden können. Herkömmlich bearbeiteten Benutzer eine Kopie von config.inc.php per Hand, aber inzwischen wird ein Konfigurationsassistent für jene, die eine grafische Installation bevorzugen, zur Verfügung gestellt. Das Erstellen einer config.inc.php ist dennoch ein schneller Weg um loszulegen und wird für einige erweiterte Einstellungen benötigt.

Datei manuell anlegen

Um die Datei manuell zu erstellen, benutzen Sie einfach Ihren Texteditor, um die Datei config.inc.php im Wurzelverzeichnis der phpMyAdmin Installation (das Verzeichnis, das auch index.php enthält) zu erstellen (Sie konnen die Datei config.sample.inc.php kopieren, um eine minimale Konfigurationsdatei zu erhalten). phpMyAdmin lädt zuerst libraries/config.default.php und überschreibt dann diese Werte mit den in config.inc.php gefundenen Werten. Wenn der Standardwert für eine bestimmte Einstellung in Ordnung ist, so ist es nicht notwendig, diesen in config.inc.php einzutragen. Sie brauchen einige Anweisungen, um loszulegen; eine einfache Konfiguration kann wie folgt aussehen:

<?php
// use here a value of your choice at least 32 chars long
$cfg['blowfish_secret'] = '1{dd0`<Q),5XP_:R9UK%%8\"EEcyH#{o';

$i=0;
$i++;
$cfg['Servers'][$i]['auth_type']     = 'cookie';
// if you insist on "root" having no password:
// $cfg['Servers'][$i]['AllowNoPassword'] = true; `
?>

Oder, wenn Sie bevorzugen, nicht bei jedem Einloggen gefragt zu werden:

<?php

$i=0;
$i++;
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'cbb74bc'; // use here your password
$cfg['Servers'][$i]['auth_type']     = 'config';
?>

Warnung

Storing passwords in the configuration is insecure as anybody can then manipulate your database.

Für eine vollständige Erklärung aller möglichen Konfigurationswerten sehen Sie sich den Abschnitt Konfiguration dieses Dokuments an.

Mithilfe des Setup-Skripts

Instead of manually editing config.inc.php, you can use phpMyAdmin’s setup feature. The file can be generated using the setup and you can download it for upload to the server.

Next, open your browser and visit the location where you installed phpMyAdmin, with the /setup suffix. The changes are not saved to the server, you need to use the Download button to save them to your computer and then upload to the server.

Jetzt ist die Datei betriebsklar. Sie können die Datei mit Ihrem bevorzugten Texteditor betrachten oder bearbeiten, wenn Sie bevorzugen, einige erweiterte Optionen zu setzen, die der Konfigurationsassistent nicht bereitstellt.

  1. Wenn Sie den auth_type „config“ verwenden, wird empfohlen, dass Sie das phpMyAdmin-Installationsverzeichnis schützen, weil durch die Benutzung von config ein Benutzer nicht dazu aufgefordert wird, ein Kennwort einzugeben, um die phpMyAdmin-Installation aufzurufen. Die Verwendung einer alternativen Authentifizierungsmethode wird empfohlen, zum Beispiel mit HTTP-AUTH in einer .htaccess-Datei oder mit einem Wechsel zu auth_type cookie oder http. Siehe den Abschnitt ISPs, multi-user installations für weitere Informationen, insbesondere 4.4 phpMyAdmin always gives „Access denied“ when using HTTP authentication..
  2. Öffnen Sie das phpMyAdmin-Hauptverzeichnis in Ihrem Webbrowser. phpMyAdmin sollte jetzt einen Willkommensbildschirm und Ihre Datenbanken anzeigen, oder einen Anmeldungsdialog, wenn Sie die HTTP- oder Cookie-Authentifizierungsmethode verwenden.

Installationsskript für Debian, Ubuntu und deren Derivate

Debian und Ubuntu haben die Art, wie die Installation aktiviert und deaktiviert wird, auf eine Weise geändert, das für jedes von beiden ein einzelner Befehl ausgeführt werden muss.

Um eine die Bearbeitung einer Konfiguration zu gestatten, rufen Sie Folgendes auf:

/usr/sbin/pma-configure

Um die Bearbeitung einer Konfiguration zu verbieten, rufen Sie Folgendes auf:

/usr/sbin/pma-secure

Installationsskript für openSUSE

Some openSUSE releases do not include setup script in the package. In case you want to generate configuration on these you can either download original package from <https://www.phpmyadmin.net/> or use setup script on our demo server: <https://demo.phpmyadmin.net/STABLE/setup/>.

Prüfen der phpMyAdmin Releases

Since July 2015 all phpMyAdmin releases are cryptographically signed by the releasing developer, who through January 2016 was Marc Delisle. His key id is 0xFEFC65D181AF644A, his PGP fingerprint is:

436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A

and you can get more identification information from <https://keybase.io/lem9>.

Beginning in January 2016, the release manager is Isaac Bennetch. His key id is 0xCE752F178259BD92, and his PGP fingerprint is:

3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92

and you can get more identification information from <https://keybase.io/ibennetch>.

Einige zusätzliche Downloads (zum Beispiel Themes) können durch Michal Čihař signiert sein. Seine Schlüssel-ID ist 0x9C27B31342B7511D und sein PGP-Fingerprint ist:

63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D

and you can get more identification information from <https://keybase.io/nijel>.

You should verify that the signature matches the archive you have downloaded. This way you can be sure that you are using the same code that was released. You should also verify the date of the signature to make sure that you downloaded the latest version.

Jedes Archiv wird von .asc-Dateien begleitet, die die entsprechende PGP-Signatur enthalten. Sobald beide Dateien im gleichen Ordner liegen, lässt sich die Signatur prüfen:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: Can't check signature: public key not found

Wie du sehen kannst, meldet gpg, dass der Public-Key nicht bekannt ist. Jetzt sollten Sie einen der nächsten Schritte befolgen:

$ gpg --import phpmyadmin.keyring
  • Lade dir den Schlüssel von einem der Server runter:
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 3D06A59ECE730EB71B511C17CE752F178259BD92
gpg: requesting key 8259BD92 from hkp server pgp.mit.edu
gpg: key 8259BD92: public key "Isaac Bennetch <bennetch@gmail.com>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Damit wird die Situation etwas verbessert – an diesem Punkt können Sie prüfen, dass die Signatur vom angegebenen Schlüssel stimmt. Dem Namen, der im Schlüssel verwendet wird, können Sie aber immer noch nicht vertrauen:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: Good signature from "Isaac Bennetch <bennetch@gmail.com>"
gpg:                 aka "Isaac Bennetch <isaac@bennetch.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51  1C17 CE75 2F17 8259 BD92

The problem here is that anybody could issue the key with this name. You need to ensure that the key is actually owned by the mentioned person. The GNU Privacy Handbook covers this topic in the chapter Validating other keys on your public keyring. The most reliable method is to meet the developer in person and exchange key fingerprints, however you can also rely on the web of trust. This way you can trust the key transitively though signatures of others, who have met the developer in person. For example you can see how Isaac’s key links to Linus’s key.

Sobald der Schlüssel akzeptiert wurde, wird die Warnung nicht mehr auftreten:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: Good signature from "Isaac Bennetch <bennetch@gmail.com>" [full]

Sollte die Signatur ungültig sein (das Archiv wurde verändert), werden Sie einen klaren Fehler bekommen, egal ob dem Schlüssel vertraut wird oder nicht:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: BAD signature from "Isaac Bennetch <bennetch@gmail.com>" [unknown]

phpMyAdmin-Konfigurationsspeicher

Geändert in Version 3.4.0: Vor phpMyAdmin 3.4.0 wurde dies Verknüpfte Tabellen-Infrastruktur genannt, aber der Name wurde wegen des erweiterten Geltungsbereichs des Speichers geändert.

For a whole set of additional features (Lesezeichen, comments, SQL-history, tracking mechanism, PDF-generation, Transformations, Tabellenverknüpfungen etc.) you need to create a set of special tables. Those tables can be located in your own database, or in a central database for a multi-user installation (this database would then be accessed by the controluser, so no other user should have rights to it).

Null-Konfiguration

In vielen Fällen kann diese Datenbankstruktur automatisch erzeugt und konfiguriert werden. Dies wird „Zero Configuration“-Modus genannt und kann besonders nützlich in Situationen mit Shared Hosting sein. Der „Zeroconf“-Modus ist standardmäßig aktiviert, um ihn zu deaktiveren, setzen sie $cfg['ZeroConf'] auf „false“.

Die folgenden drei Szenarien werden durch den Zero-Configuration-Modus abgedeckt:

  • Wenn eine Datenbank geöffnet wird, zu der keine Konfigurationsspeichertabellen vorhanden sind, bietet phpMyAdmin im „Operationen“-Tab an, diese zu erstellen.
  • Wenn eine Datenbank geöffnet wird, zu der die Tabellen bereits existieren, erkennt die Software dies automatisch und verwendet diese. Dies ist der häufigste Fall; Nachdem die Tabellen eingangs automatisch erzeugt werden, werden diese kontinuierlich weiterverwendet ohne den Nutzer zu stören; Dies ist auch vor allem in Shared-Hosting-Umgebungen sinnvoll, wo der Benutzer nicht die config.inc.php bearbeiten kann und er nur Zugriff auf eine Datenbank hat.
  • Wenn mehrere Datenbanken verwaltet werden und die Datenbank mit den Konfigurationsspeicher-Tabellen zuerst aufgerufen wird und wird dann zu einer anderen Datenbank gewechselt, benutzt phpMyAdmin weiterhin die Tabellen der ersten Datenbank. Der Benutzer wird nicht aufgefordert, neue Tabellen anzulegen.

Manuelle Konfiguration

Bitte schauen Sie in Ihr Verzeichnis ./sql/, wo Sie eine Datei namens create_tables.sql finden sollten. (Wenn Sie einen Windows-Server verwenden, achten Sie bitte besonders auf 1.23 I’m running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase!).

Wenn Sie diese Infrastruktur bereits hatten und:

  • auf MySQL 4.1.2 oder neuer aktualisiert haben, nutzen Sie bitte sql/upgrade_tables_mysql_4_1_2+.sql.
  • auf phpMyAdmin 4.3.0 oder neuer von 2.5.0 oder neuer aktualisiert haben (<= 4.2.x), nutzen Sie bitte sql/upgrade_column_info_4_3_0+.sql.
  • upgraded to phpMyAdmin 4.7.0 or newer from 4.3.0 or newer, please use sql/upgrade_tables_4_7_0+.sql.

und legen Sie dann neue Tabellen an, indem Sie sql/create_tables.sql importieren.

Sie können phpMyAdmin dafür verwenden, die Tabellen für Sie zu erstellen. Bitte beachten Sie, dass sie besondere (Administrator) Berechtigungen benötigen, um Datenbank und Tabellen zu erstellen, und dass das Skript etwas Bearbeitung benötigt, abhängig vom Datenbanknamen.

Nachdem Sie die Datei sql/create_tables.sql importiert haben, sollten Sie die Tabellennamen in Ihrer config.inc.php-Datei festlegen. Die Einstellungen dafür können Sie im Abschnitt Konfiguration nachlesen.

Sie brauchen außerdem einen Kontrollnutzer (Einstellungen $cfg['Servers'][$i]['controluser'] und $cfg['Servers'][$i]['controlpass']) mit den korrekten Rechten für diese Tabellen. Sie können ihn beispielsweise mit folgender Anweisung anlegen:

GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost'  IDENTIFIED BY 'pmapass';

Aktualisieren von einer älteren Version

Warnung

Never extract the new version over an existing installation of phpMyAdmin, always first remove the old files keeping just the configuration.

Auf diese Art bleibt kein alter, nicht länger funktionierender Code im Verzeichnis, der zu schweren Sicherheitslücken oder Fehlern führen kann.

Kopieren Sie einfach config.inc.php von Ihrer vorherigen Installation in die neu entpackte. Konfigurationsdateien von alten Versionen brauchen eventuell Bearbeitungen, da einige Optionen geändert oder entfernt wurden. Für Kompatibilität zu PHP 5.3 oder neuer, entfernen Sie eine set_magic_quotes_runtime(0); Anweisung, die Sie ziemlich am Ende der Konfigurationsdatei finden könnten.

Sie sollten nicht libraries/config.default.php auf config.inc.php kopieren, weil die Standardkonfiguration versionsspezifisch ist.

Die vollständige Nachrüstung kann in wenigen, einfachen Schritten durchgeführt werden:

  1. Download the latest phpMyAdmin version from <https://www.phpmyadmin.net/downloads/>.
  2. Benennen Sie den vorhandenen phpMyAdmin-Ordner um (z.B. in phpMyAdmin-alt).
  3. Entpacken Sie das kürzlich heruntergeladene phpMyAdmin in das gewünschte Verzeichnis (z.B. phpMyAdmin).
  4. Kopieren Sie :file:config.inc.php aus dem alten Verzeichnis (phpMyAdmin-alt) in das neue (phpMyAdmin).
  5. Überprüfen Sie, ob alles ordnungsgemäß funktioniert.
  6. Entfernen Sie die Sicherung der vorigen Version (phpMyAdmin-alt).

Wenn Sie Ihren MySQL-Server von einer Version früher als 4.1.2 auf Version 5.x oder neuer aktualisiert haben und Sie den phpMyAdmin-Konfigurationsspeicher nutzen, sollten Sie das SQL-Skript sql/upgrade_tables_mysql_4_1_2+.sql ausführen.

Wenn Sie Ihr phpMyAdmin auf 4.3.0 oder neuer von 2.5.0 oder neuer (<= 4.2.x) aktualisiert haben und wenn Sie den phpMyAdmin-Konfigurationsspeicher nutzen, sollten Sie das SQL-Skript sql/upgrade_column_info_4_3_0+.sql ausführen.

Vergessen Sie nicht, den Browsercache zu löschen und die letzte Sitzung zu leeren, indem Sie sich abmelden und danach wieder anmelden.

Benutzung von Authentifizierungsmethoden

HTTP- und Cookie-Authentifizierung werden in einer Mehrbenutzer-Umgebung empfohlen, wo Sie Benutzern Zugriff auf ihre eigene Datenbank geben wollen, ohne dass sie mit anderen herumspielen können. Beachten Sie jedoch, dass MS Internet Explorer scheinbar sehr fehleranfällig bei Cookies ist, zumindest bis Version 6. Selbst in einer Einbenutzer-Umgebung* bevorzugen Sie möglicherweise den HTTP- oder Cookie-Modus, sodass Ihr Benutzername und das Kennwort nicht im Klartext in der Konfigurationsdatei stehen.

Die HTTP- und Cookie-Authentifizierungsmethoden sind sicherer: Die MySQL-Logindaten müssen nicht in der phpMyAdmin-Konfigurationsdatei gesetzt werden (außer eventuell für den $cfg['Servers'][$i]['controluser']). Behalten Sie aber im Sinn, dass das Kennwort im Klartext übertragen wird, es sei denn, Sie verwenden das HTTPS-Protokoll. Im Cookie-Modus wird das Kennwort AES-verschlüsselt in einem temporären Cookie gespeichert.

Dann sollte jedem der echten Benutzer eine Menge von Berechtigungen für eine Menge von bestimmten Datenbanken vergeben werden. Normalerweise sollten Sie einem normalen Benutzer keine globalen Berechtigungen gewähren, außer Sie verstehen die Bedeutung dieser Berechtigungen (zum Beispiel wenn Sie einen Administratorbenutzer erstellen). Um zum Beispiel dem Benutzer real_user sämtliche Rechte an der Datenbank user_base zu geben:

GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password';

Was der Benutzer jetzt tun kann, wird vollständig vom MySQL-Benutzerverwaltungssystem kontrolliert. Mit der HTTP- oder Cookie-Authentifizierungsmethode brauchen Sie nicht die Benutzer/Kennwort-Felder im Feld $cfg['Servers'] eintragen.

HTTP-Authentifizierungs-Methode

Bemerkung

Es gibt keine vernünftige Möglichkeit sich in einer HTTP-Authenifizierung abzumelden. Die meisten Browser speichern die Anmeldedaten solange, wie keine andere erfolgreiche Anmeldung durchgeführt wurde. Auf Grund dieser Methode besteht die Beschränkung, dass man sich nicht mit dem selben Benutzer nach einer Abmeldung wieder anmelden kann.

Signon-Authentifizierungsmethode

Das sehr grundlegende Beispiel zum Speichern von Anmeldedaten in einer Sitzung steht als examples/signon.php bereit:

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * Single signon for phpMyAdmin
 *
 * This is just example how to use session based single signon with
 * phpMyAdmin, it is not intended to be perfect code and look, only
 * shows how you can integrate this functionality in your application.
 *
 * @package    PhpMyAdmin
 * @subpackage Example
 */

/* Use cookies for session */
ini_set('session.use_cookies', 'true');
/* Change this to true if using phpMyAdmin over https */
$secure_cookie = false;
/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secure_cookie, true);
/* Create signon session */
$session_name = 'SignonSession';
session_name($session_name);
// Uncomment and change the following line to match your $cfg['SessionSavePath']
//session_save_path('/foobar');
@session_start();

/* Was data posted? */
if (isset($_POST['user'])) {
    /* Store there credentials */
    $_SESSION['PMA_single_signon_user'] = $_POST['user'];
    $_SESSION['PMA_single_signon_password'] = $_POST['password'];
    $_SESSION['PMA_single_signon_host'] = $_POST['host'];
    $_SESSION['PMA_single_signon_port'] = $_POST['port'];
    /* Update another field of server configuration */
    $_SESSION['PMA_single_signon_cfgupdate'] = array('verbose' => 'Signon test');
    $id = session_id();
    /* Close that session */
    @session_write_close();
    /* Redirect to phpMyAdmin (should use absolute URL here!) */
    header('Location: ../index.php');
} else {
    /* Show simple form */
    header('Content-Type: text/html; charset=utf-8');
    echo '<?xml version="1.0" encoding="utf-8"?>' , "\n";
    ?>
    <!DOCTYPE HTML>
    <html lang="en" dir="ltr">
    <head>
    <link rel="icon" href="../favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />
    <meta charset="utf-8" />
    <title>phpMyAdmin single signon example</title>
    </head>
    <body>
    <?php
    if (isset($_SESSION['PMA_single_signon_error_message'])) {
        echo '<p class="error">';
        echo $_SESSION['PMA_single_signon_error_message'];
        echo '</p>';
    }
    ?>
    <form action="signon.php" method="post">
    Username: <input type="text" name="user" /><br />
    Password: <input type="password" name="password" /><br />
    Host: (will use the one from config.inc.php by default)
    <input type="text" name="host" /><br />
    Port: (will use the one from config.inc.php by default)
    <input type="text" name="port" /><br />
    <input type="submit" />
    </form>
    </body>
    </html>
    <?php
}
?>

Alternativ können Sie diese Methode auch zur Einbindung von OpenID nutzen, wie in examples/openid.php gezeigt:

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * Single signon for phpMyAdmin using OpenID
 *
 * This is just example how to use single signon with phpMyAdmin, it is
 * not intended to be perfect code and look, only shows how you can
 * integrate this functionality in your application.
 *
 * It uses OpenID pear package, see https://pear.php.net/package/OpenID
 *
 * User first authenticates using OpenID and based on content of $AUTH_MAP
 * the login information is passed to phpMyAdmin in session data.
 *
 * @package    PhpMyAdmin
 * @subpackage Example
 */

if (false === @include_once 'OpenID/RelyingParty.php') {
    exit;
}

/* Change this to true if using phpMyAdmin over https */
$secure_cookie = false;

/**
 * Map of authenticated users to MySQL user/password pairs.
 */
$AUTH_MAP = array(
    'https://launchpad.net/~username' => array(
        'user' => 'root',
        'password' => '',
        ),
    );

/**
 * Simple function to show HTML page with given content.
 *
 * @param string $contents Content to include in page
 *
 * @return void
 */
function Show_page($contents)
{
    header('Content-Type: text/html; charset=utf-8');
    echo '<?xml version="1.0" encoding="utf-8"?>' , "\n";
    ?>
    <!DOCTYPE HTML>
    <html lang="en" dir="ltr">
    <head>
    <link rel="icon" href="../favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="../favicon.ico" type="image/x-icon" />
    <meta charset="utf-8" />
    <title>phpMyAdmin OpenID signon example</title>
    </head>
    <body>
    <?php
    if (isset($_SESSION) && isset($_SESSION['PMA_single_signon_error_message'])) {
        echo '<p class="error">' , $_SESSION['PMA_single_signon_message'] , '</p>';
        unset($_SESSION['PMA_single_signon_message']);
    }
    echo $contents;
    ?>
    </body>
    </html>
    <?php
}

/**
 * Display error and exit
 *
 * @param Exception $e Exception object
 *
 * @return void
 */
function Die_error($e)
{
    $contents = "<div class='relyingparty_results'>\n";
    $contents .= "<pre>" . htmlspecialchars($e->getMessage()) . "</pre>\n";
    $contents .= "</div class='relyingparty_results'>";
    Show_page($contents);
    exit;
}


/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secure_cookie, true);
/* Create signon session */
$session_name = 'SignonSession';
session_name($session_name);
@session_start();

// Determine realm and return_to
$base = 'http';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
    $base .= 's';
}
$base .= '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];

$realm = $base . '/';
$returnTo = $base . dirname($_SERVER['PHP_SELF']);
if ($returnTo[strlen($returnTo) - 1] != '/') {
    $returnTo .= '/';
}
$returnTo .= 'openid.php';

/* Display form */
if (!count($_GET) && !count($_POST) || isset($_GET['phpMyAdmin'])) {
    /* Show simple form */
    $content = '<form action="openid.php" method="post">
OpenID: <input type="text" name="identifier" /><br />
<input type="submit" name="start" />
</form>
</body>
</html>';
    Show_page($content);
    exit;
}

/* Grab identifier */
if (isset($_POST['identifier']) && is_string($_POST['identifier'])) {
    $identifier = $_POST['identifier'];
} elseif (isset($_SESSION['identifier']) && is_string($_SESSION['identifier'])) {
    $identifier = $_SESSION['identifier'];
} else {
    $identifier = null;
}

/* Create OpenID object */
try {
    $o = new OpenID_RelyingParty($returnTo, $realm, $identifier);
} catch (Exception $e) {
    Die_error($e);
}

/* Redirect to OpenID provider */
if (isset($_POST['start'])) {
    try {
        $authRequest = $o->prepare();
    } catch (Exception $e) {
        Die_error($e);
    }

    $url = $authRequest->getAuthorizeURL();

    header("Location: $url");
    exit;
} else {
    /* Grab query string */
    if (!count($_POST)) {
        list(, $queryString) = explode('?', $_SERVER['REQUEST_URI']);
    } else {
        // I hate php sometimes
        $queryString = file_get_contents('php://input');
    }

    /* Check reply */
    try {
        $message = new OpenID_Message($queryString, OpenID_Message::FORMAT_HTTP);
    } catch (Exception $e) {
        Die_error($e);
    }

    $id = $message->get('openid.claimed_id');

    if (!empty($id) && isset($AUTH_MAP[$id])) {
        $_SESSION['PMA_single_signon_user'] = $AUTH_MAP[$id]['user'];
        $_SESSION['PMA_single_signon_password'] = $AUTH_MAP[$id]['password'];
        session_write_close();
        /* Redirect to phpMyAdmin (should use absolute URL here!) */
        header('Location: ../index.php');
    } else {
        Show_page('<p>User not allowed!</p>');
        exit;
    }
}

Wenn Sie planen, die Anmeldedaten auf eine andere Art und Weise zu übergeben, müssen Sie einen Wrapper in PHP schreiben, der diese Daten abholt, und ihn in $cfg['Servers'][$i]['SignonScript'] setzen. Ein sehr minimales Beispiel finden Sie in examples/signon-script.php:

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * Single signon for phpMyAdmin
 *
 * This is just example how to use script based single signon with
 * phpMyAdmin, it is not intended to be perfect code and look, only
 * shows how you can integrate this functionality in your application.
 *
 * @package    PhpMyAdmin
 * @subpackage Example
 */


/**
 * This function returns username and password.
 *
 * It can optionally use configured username as parameter.
 *
 * @param string $user User name
 *
 * @return array
 */
function get_login_credentials($user)
{
    /* Optionally we can use passed username */
    if (!empty($user)) {
        return array($user, 'password');
    }

    /* Here we would retrieve the credentials */
    $credentials = array('root', '');

    return $credentials;
}

Config-Authentifizierungsmethode

  • Diese Methode ist die unsicherste, weil dazu zwingend die Felder $cfg['Servers'][$i]['user'] und $cfg['Servers'][$i]['password'] Felder ausgefüllt werden müssen (und deshalb jeder, der Ihre config.inc.php lesen kann, Ihren Benutzernamen und das Kennwort sehen kann).
  • Im Abschnitt ISPs, multi-user installations befindet sich ein Eintrag, der erklärt, wie Sie Ihre Konfigurationsdatei absichern können.
  • Für mehr Sicherheit bei Benutzung dieser Methode können Sie sich überlegen, die Einstellungen der Hostauthentifizierung $cfg['Servers'][$i]['AllowDeny']['order'] und $cfg['Servers'][$i]['AllowDeny']['rules'] einzusetzen.
  • Anders als bei Cookie und HTTP wird nicht verlangt, dass sich ein Benutzer anmeldet, wenn die phpMyAdmin-Seite zum ersten Mal geladen wird. Dies ist absichtlich so, könnte aber beliebigen Benutzern Zugriff auf Ihre Installation geben. Die Verwendung irgendeiner Beschränkung wird empfohlen, eventuell reicht eine .htaccess-Datei mit der HTTP-AUTH-Direktive oder das Verbot von eingehenden HTTP-Anfragen am eigenen Router oder in der Firewall aus (beide Möglichkeiten sind außerhalb des Rahmens dieses Handbuchs, aber leicht zu finden per Google).

Absichern Ihrer phpMyAdmin-Installation

Das phpMyAdmin-Team arbeitet hart daran, die Anwendung sicher zu machen. Hier einige Wege, wie Sie Ihre Installation besser absichern können:

  • Befolge unsere Sicherheitshinweise und aktualisiere phpMyAdmin immer, wenn eine neue Sicherheitslücke bekannt wird.

  • Gestatten Sie auf phpMyAdmin nur über HTTPS Zugriff. Idealerweise sollten Sie ebenfalls HSTS verwenden, um so vor Attacken auf ältere Protokollversionen geschützt zu sein.

  • Stellen Sie sicher, dass Ihre PHP-Installation mit den Empfehlungen für Produktivseiten konform ist, zum Beispiel sollte display_errors deaktiviert sein.

  • Remove the test directory from phpMyAdmin, unless you are developing and need test suite.

  • Das setup-Verzeichnis von phpMyAdmin entfernen, Sie verwenden es wahrscheinlich nach der ersten Einrichtung nicht mehr.

  • Die richtige Authentifizierungs-Methode verwenden – Cookie-Authentifizierungsmethode ist für Shared-Hosting vermutlich die beste Wahl.

  • Deny access to auxiliary files in ./libraries/ or ./templates/ subfolders in your webserver configuration. Such configuration prevents from possible path exposure and cross side scripting vulnerabilities that might happen to be found in that code. For the Apache webserver, this is often accomplished with a .htaccess file in those directories.

  • Deny access to temporary files, see $cfg['TempDir'] (if that is placed inside your web root, see also Web server upload/save/import directories.

  • Es ist generell eine gute Idee, öffentliche phpMyAdmin-Installationen gegen Zugriff von Robots abzusichern, weil diese normalerweise nichts Gutes tun können. Sie können durch Verwendung einer robots.txt-Datei im Wurzelverzeichnis Ihres Webservers erreichen oder Zugriff durch die Webserver-Konfiguration beschränken, siehe 1.42 How can I prevent robots from accessing phpMyAdmin?.

  • In case you don’t want all MySQL users to be able to access phpMyAdmin, you can use $cfg['Servers'][$i]['AllowDeny']['rules'] to limit them or $cfg['Servers'][$i]['AllowRoot'] to deny root user access.

  • Enable Zwei-Faktor-Authentifizierung for your account.

  • Erwägen Sie, phpMyAdmin hinter einem Authentifizierungs-Proxy zu verstecken, sodass Nutzer sich authentifizieren müssen, bevor sie MySQL-Anmeldedaten für phpMyAdmin bereitstellen. Sie können dies erreichen, indem Sie Ihren Webserver so einstellen, dass eine HTTP-Authentifizierung angefordert wird. In Apache lässt sich das beispielsweise wie folgt umsetzen:

    AuthType Basic
    AuthName "Restricted Access"
    AuthUserFile /usr/share/phpmyadmin/passwd
    Require valid-user
    

    Sobald Sie die Konfiguration geändert haben, müssen Sie eine Liste der Benutzer erstellen, die sich authentifizieren dürfen. Das ist mit dem Hilfsprogramm htpasswd möglich:

    htpasswd -c /usr/share/phpmyadmin/passwd username
    
  • Wenn Sie sich Sorgen um automatisierte Angriffe machen, könnte das Einschalten eines Captchas mit $cfg['CaptchaLoginPublicKey'] und $cfg['CaptchaLoginPrivateKey'] eine Option sein.

  • Failed login attemps are logged to syslog (if available, see $cfg['AuthLog']). This can allow using a tool such as fail2ban to block brute-force attempts. Note that the log file used by syslog is not the same as the Apache error or access log files.

  • In case you’re running phpMyAdmin together with other PHP applications, it is generally advised to use separate session storage for phpMyAdmin to avoid possible session based attacks against it. You can use $cfg['SessionSavePath'] to achieve this.

Using SSL for connection to database server

It is recommended to use SSL when connecting to remote database server. There are several configuration options involved in the SSL setup:

$cfg['Servers'][$i]['ssl']
Defines whether to use SSL at all. If you enable only this, the connection will be encrypted, but there is not authentication of the connection - you can not verify that you are talking to the right server.
$cfg['Servers'][$i]['ssl_key'] and $cfg['Servers'][$i]['ssl_cert']
This is used for authentication of client to the server.
$cfg['Servers'][$i]['ssl_ca'] and $cfg['Servers'][$i]['ssl_ca_path']
The certificate authorities you trust for server certificates. This is used to ensure that you are talking to a trusted server.
$cfg['Servers'][$i]['ssl_verify']
This configuration disables server certificate verification. Use with caution.

Bekannte Probleme

Users with column-specific privileges are unable to „Browse“

If a user has only column-specific privileges on some (but not all) columns in a table, „Browse“ will fail with an error message.

As a workaround, a bookmarked query with the same name as the table can be created, this will run when using the „Browse“ link instead. Issue 11922.

Problem bei der Wiederanmeldung nach dem Abmelden mittels ‚http‘ Authentifizierung

When using the ‚http‘ auth_type, it can be impossible to log back in (when the logout comes manually or after a period of inactivity). Issue 11898.