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.

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 und Ubuntu

Most Debian and Ubuntu versions include a phpMyAdmin package, but be aware that the configuration file is maintained in /etc/phpmyadmin and may differ in some ways from the official phpMyAdmin documentation. Specifically, it does:

Weitere Einzelheiten zum Installieren von Debian- oder Ubuntu-Paketen sind in unserem Wiki verfügbar.

Siehe auch

More information can be found in README.Debian (it is installed as /usr/share/doc/phpmyadmin/README.Debian with the package).

OpenSUSE

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

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 itself and thus derivatives like CentOS don’t ship phpMyAdmin, but the Fedora-driven repository Extra Packages for Enterprise Linux (EPEL) is doing so, if it’s enabled. But be aware that the configuration file is maintained in /etc/phpMyAdmin/ and may differ in some ways from the official phpMyAdmin documentation.

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

Um aus Git zu installieren, werden folgende Programme benötigt:

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

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

Zusätzlich müssen Sie Abhängigkeiten mit Composer installieren:

composer update

Falls Sie nicht beabsichtigen Quelltext beizutragen, können Sie die Installation der Entwicklerwerkzeuge durch folgenden Aufruf überspringen:

composer update --no-dev

Am Ende muss Yarn verwendet werden um JavaScript Abhängigkeiten zu installieren:

yarn install --production

Installation mit Composer

Sie können phpMyAdmin mit Composer installieren, seit 4.7.0 werden die Releases automatisch auf das Standard-Repository Packagist gespiegelt.

Bemerkung

Der Inhalt des Composer-Repositorys wird automatisch getrennt von den Releases erzeugt, so dass der Inhalt nicht 100%-ig gleich sein muss wie beim Download des Tarballs. Es sollte jedoch keine funktionalen Unterschiede geben.

Um phpMyAdmin zu installieren, starten Sie einfach:

composer create-project phpmyadmin/phpmyadmin

Alternativ können Sie auch unser eigenes Composer-Repository verwenden, das die Release Tarballs enthält und unter <https://www.phpmyadmin.net/packages.json> verfügbar ist:

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

Installation mit Docker

phpMyAdmin comes with a Docker official image, which you can easily deploy. You can download it using:

docker pull phpmyadmin

Der phpMyAdmin-Server lauscht auf Port 80. Er unterstützt mehrere Möglichkeiten, die Verbindung zum Datenbankserver zu konfigurieren, entweder über die Link-Funktion von Docker, indem Sie Ihren Datenbank-Container mit db für phpMyAdmin verbinden (indem Sie --link ihr_db_host:db angeben) oder über Umgebungsvariablen (in diesem Fall liegt es an Ihnen, das Netzwerk in Docker einzurichten, damit der phpMyAdmin-Container über das Netzwerk auf den Datenbank-Container zugreifen kann).

Umgebungsvariablen mit Docker

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

PMA_ARBITRARY

Damit können Sie den Hostnamen des Datenbankservers im Anmeldeformular eingeben.

PMA_HOST

Hostname oder IP-Adresse des zu nutzenden Datenbankservers.

PMA_HOSTS

Kommagetrennte Hostnamen oder IP-Adressen der zu nutzenden Datenbankserver.

Bemerkung

Wird nur benutzt, wenn PMA_HOST leer ist.

PMA_VERBOSE

Ausführlicher Name des Datenbankservers.

PMA_VERBOSES

Kommagetrennte, ausführliche Namen der Datenbankserver.

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 des Datenbankservers, der verwendet werden soll.

PMA_PORTS

Kommagetrennte Hostnamen oder IP-Adressen der zu nutzenden Datenbankserver.

Bemerkung

Wird nur benutzt wenn PMA_HOST leer ist.

PMA_SOCKET

Socket file for the database connection.

PMA_SOCKETS

Comma-separated list of socket files for the database connections.

Bemerkung

Used only if PMA_SOCKET is empty.

PMA_ABSOLUTE_URI

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

PMA_QUERYHISTORYDB

When set to true, enables storing SQL history to $cfg['Servers'][$i]['pmadb']. When false, history is stored in the browser and is cleared when logging out.

PMA_QUERYHISTORYMAX

When set to an integer, controls the number of history items.

PMA_CONTROLHOST

When set, this points to an alternate database host used for storing the „phpMyAdmin-Konfigurationsspeicher“ database.

PMA_CONTROLUSER

Defines the username for phpMyAdmin to use for the „phpMyAdmin-Konfigurationsspeicher“ database.

PMA_CONTROLPASS

Defines the password for phpMyAdmin to use for the „phpMyAdmin-Konfigurationsspeicher“ database.

PMA_CONTROLPORT

When set, will override the default port (3306) for connecting to the control host.

PMA_PMADB

When set, define the name of the database to be used for the „phpMyAdmin-Konfigurationsspeicher“ database. When not set, the advanced features are not enabled by default: they can still potentially be enabled by the user when logging in with the Null-Konfiguration feature.

Bemerkung

Suggested values: phpmyadmin or pmadb

HIDE_PHP_VERSION

Wenn angegeben, versteckt diese Option die PHP-Version (expose_php = Off). Auf einen beliebigen Wert setzen (z.B. HIDE_PHP_VERSION=true).

UPLOAD_LIMIT

Wenn gesetzt, überschreibt diese Option den Standardwert für apache und php-fpm (die ändert die upload_max_filesize und post_max_size Werte).

Bemerkung

Format: [0-9+](K,M,G) der Standardwert ist 2048K

MEMORY_LIMIT

If set, this option will override the phpMyAdmin memory limit $cfg['MemoryLimit'] and PHP’s memory_limit.

Bemerkung

Format as [0-9+](K,M,G) where K is for Kilobytes, M for Megabytes, G for Gigabytes and 1K = 1024 bytes. Default value is 512M.

MAX_EXECUTION_TIME

If set, this option will override the maximum execution time in seconds for phpMyAdmin $cfg['ExecTimeLimit'] and PHP’s max_execution_time.

Bemerkung

Format as [0-9+]. Default value is 600.

PMA_CONFIG_BASE64

Wenn gesetzt, überschreibt diese Option den Vorgabewert config.inc.php mit den base64-dekodierten Inhalten der Variable.

PMA_USER_CONFIG_BASE64

Wenn gesetzt, überschreibt diese Option den Vorgabewert config.user.inc.php mit den base64-dekodierten Inhalten der Variable.

PMA_UPLOADDIR

If set, this option will set the path where files can be saved to be available to import ($cfg['UploadDir'])

PMA_SAVEDIR

If set, this option will set the path where exported files can be saved ($cfg['SaveDir'])

APACHE_PORT

If set, this option will change the default Apache port from 80 in case you want it to run on a different port like an unprivileged port. Set to any port value (such as APACHE_PORT=8090).

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

Bemerkung

Die Zugangsdaten, die Sie für die Anmeldung brauchen, sind auf dem MySQL Server gespeichert, bei Docker-Abbildern gibt es verschiedene Möglichkeiten, diese festzulegen (zum Beispiel MYSQL_ROOT_PASSWORT beim Starten des MySQL Containers). Bitte lesen Sie die Dokumentation für MariaDB container oder MySQL container.

Konfiguration anpassen

Zusätzlich kann die Konfiguration über /etc/phpmyadmin/config.user.inc.php angepasst werden. Wenn diese Datei existiert, wird sie geladen, nachdem die Konfiguration aus obigen Umgebungsvariablen erzeugt wurde, so dass Sie sich über jede Konfigurationsvariable hinwegsetzen können. Diese Konfiguration kann als Volume hinzugefügt werden, wenn Docker mit den Parametern -v /ein/lokales/verzeichnis/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php aufgerufen wird.

Beachten Sie, dass die mitgelieferte Konfigurationsdatei nach Umgebungsvariablen mit Docker angewendet wird, aber Sie können jeden der Werte überschreiben.

Um z.B. das Standardverhalten des CSV-Exports zu ändern, können Sie folgende Konfigurationsdatei verwenden:

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

Sie können damit auch die Serverkonfiguration definieren, anstatt die in Umgebungsvariablen mit Docker aufgeführten Umgebungsvariablen zu verwenden:

<?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

Sie können die folgenden Volumes verwenden, um das Verhalten des Images anzupassen:

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

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

/sessions/

Verzeichnis, in dem PHP-Sitzungen gespeichert sind. Sie können dies zum Beispiel mit Signon-Authentifizierungsmethode teilen.

/www/themes/

Verzeichnis, in dem phpMyAdmin nach Designs sucht. Standardmäßig sind nur diejenigen enthalten, die mit phpMyAdmin ausgeliefert werden, aber Sie können zusätzliche phpMyAdmin-Designs (siehe Benutzerdefinierte Designs) über Docker-Volumes einbinden.

Docker Beispiele

Um phpMyAdmin mit einem bestimmten Server zu verbinden, Folgendes verwenden:

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

Um phpMyAdmin mit weiteren Servern zu verbinden, Folgendes verwenden:

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

Um einen beliebigen Server angeben zu können:

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

Sie können den Datenbankcontainer auch mit Docker verbinden:

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

Ausführung mit zusätzlichen Einstellungen:

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:latest

Ausführung mit zusätzlichen Designs:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/custom/phpmyadmin/themeName/:/var/www/html/themes/themeName/ phpmyadmin:latest

Mit docker-compose

Alternativ können Sie docker-compose auch mit der docker-compose.yml von <https://github.com/phpmyadmin/docker> verwenden. Dadurch wird phpMyAdmin mit einem beliebigen Server ausgeführt - so können Sie den MySQL/MariaDB-Server auf der Anmeldeseite angeben.

docker compose up -d

Anpassen der Konfigurationsdatei mit Docker-Compose

Sie können eine externe Datei verwenden, um die phpMyAdmin-Konfiguration anzupassen und sie mit der Volume-Richtlinie zu übergeben:

phpmyadmin:
    image: phpmyadmin:latest
    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/

Hinter haproxy in einem Unterverzeichnis laufen lassen

Wenn Sie phpMyAdmin, das in einem Docker-Container in einem Unterverzeichnis läuft, verfügbar machen wollen, müssen Sie den Request-Pfad im Server-Proxy der Requests neu schreiben.

Zum Beispiel mit haproxy kann es folgendermaßen erreicht werden:

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

Bei der Verwendung von traefik sollte so etwas wie das Folgende funktionieren:

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:/"

Sie sollten dann PMA_ABSOLUTE_URI in der Docker-Compose-Konfiguration angeben:

version: '2'

services:
  phpmyadmin:
    restart: always
    image: phpmyadmin:latest
    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/

IBM-Cloud

Einer unserer Nutzer hat eine hilfreiche Anleitung für Installation von phpMyAdmin auf der IBM-Cloud-Plattform erstellt.

Schnellinstallation

  1. Choose an appropriate distribution kit from the phpmyadmin.net Downloads page. Some kits contain only the English messages, others contain all languages. We’ll assume you chose a kit whose name looks like phpMyAdmin-x.x.x-all-languages.tar.gz.
  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 Wie kann man phpMyAdmin vor bösartigem Zugriff schützen? und 1.26 Ich habe gerade phpMyAdmin in mein Dokumentenstamm von IIS installiert, aber ich erhalte die Fehlermeldung „Keine Eingabedatei angegeben“, wenn ich versuche, phpMyAdmin auszuführen. 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

To manually create the file, simply use your text editor to create the file config.inc.php (you can copy config.sample.inc.php to get a minimal configuration file) in the main (top-level) phpMyAdmin directory (the one that contains index.php). phpMyAdmin first loads the default configuration values and then overrides those values with anything found in config.inc.php. If the default value is okay for a particular setting, there is no need to include it in config.inc.php. You’ll probably need only a few directives to get going; a simple configuration may look like this:

<?php
// The string is a hexadecimal representation of a 32-bytes long string of random bytes.
$cfg['blowfish_secret'] = sodium_hex2bin('f16ce59f45714194371b48fe362072dc3b019da7861558cd4ad29e4d6fb13851');

$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']      = 'changeme'; // use here your password
$cfg['Servers'][$i]['auth_type']     = 'config';

Warnung

Das Speichern von Passwörtern in der Konfiguration ist unsicher, da dann jeder Ihre Datenbank verändern kann.

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

Mithilfe des Setup-Skripts

Anstelle config.inc.php manuell zu bearbeiten, können Sie die phpMyAdmin-Setup-Funktion verwenden. Die Datei kann mit dem setup generiert werden und Sie können es zum Hochladen auf dem Server herunterladen.

Öffnen Sie nun Ihren Browser und besuchen Sie den Ort, an dem Sie phpMyAdmin installiert haben, mit dem Suffix /setup. Die Änderungen werden nicht auf dem Server gespeichert, Sie müssen den Knopf Download benutzen, um sie auf Ihrem Computer zu speichern und dann auf den Server hochzuladen.

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, Mehrbenutzer-Installationen für weitere Informationen, insbesondere 4.4 phpMyAdmin gibt bei Verwendung der HTTP-Authentifizierung immer „Zugriff verweigert“..
  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 das Installationsskript 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

Einige openSUSE-Veröffentlichungen beinhalten im Paket kein Installationsskript. Falls Sie dafür eine Konfiguration generieren wollen, können Sie entweder das Originalpaket von <https://www.phpmyadmin.net/> herunterladen, oder das Installationsskript unseres Demo-Servers <https://demo.phpmyadmin.net/master/setup/> nutzen.

Prüfen der phpMyAdmin Releases

Seit Juli 2015 sind alle phpMyAdmin-Versionen vom veröffentlichen Entwickler, bis Januar 2016 war das Marc Deslisle, kryptographisch signiert. Seine Schlüssel-ID ist 0xFEFC65D181AF644A, sein PGP-Fingerprint ist:

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

und Sie können mehr Identifikationsinformationen von <https://keybase.io/lem9> erhalten.

Seit Januar 2016 ist der Veröffentlichungsleiter Isaac Bennetch. Seine Schlüssel-ID ist 0xCE752F178259BD92 und sein PGP-Fingerabdruck ist:

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

und Sie können mehr Identifikationsinformationen von <https://keybase.io/ibennetch> erhalten.

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

und Sie können mehr Identifikationsinformationen von <https://keybase.io/nijel> erhalten.

Sie sollte verifizieren, dass die Signatur zum Archiv passt, welches Sie heruntergladen haben. Auf diesem Weg können Sie sicherstellen, dass sie den Quellcode nutzen, welcher veröffentlich wurde. Sie sollte auch das Datum der Signatur prüfen, um sicher zu gehen, dass Sie die neuste Version heruntergladen haben.

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 Sie sehen können, 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.

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.

Für eine ganze Menge an neuen Funktionen (Lesezeichen, Kommentare, SQL-Verlauf, Tracking-Mechanismus, PDF-Generierung, Transformationen, Tabellenverknüpfungen) müssen Sie einige spezielle Tabellen erzeugen. Diese Tabellen können in einer eigenen Datenbank liegen oder in einer zentralen Datenbank für eine Mehrbenutzerinstallation (auf diese Datenbank würde dann der Kontroll-Benutzer zugreifen, also sollte kein anderer Benutzer Rechte dafür besitzen).

Null-Konfiguration

In many cases, this database structure can be automatically created and configured. This is called “Zero Configuration” mode and can be particularly useful in shared hosting situations. “ZeroConf” mode is on by default, to disable set $cfg['ZeroConf'] to 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 Ich verwende MySQL auf einer Win32-Maschine. Jedes Mal, wenn ich eine neue Tabelle erstelle, werden die Tabellen- und Spaltennamen in Kleinbuchstaben geändert!).

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.
  • auf phpMyAdmin 4.7.0 oder neuer von 4.3.0 oder neuer aktualisiert haben, verwenden Sie bitte 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:

Und für jede MariaDB-Version:

CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON `<pma_db>`.* TO 'pma'@'localhost';

Für MySQL 8.0 oder neuer:

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

Für MySQL älter als 8.0:

CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';

Beachten Sie, dass MySQL-Installationen mit PHP älter als 7.1 und MySQL neuer als 8.0 möglicherweise die Authentifizierung mysql_native_password zur Problemumgehung benötigen. Siehe 1.45 Ich erhalte eine Fehlermeldung über eine unbekannte Authentifizierungsmethode caching_sha2_password wenn ich versuche mich anzumelden für Einzelheiten.

Aktualisieren von einer älteren Version

Warnung

Extrahieren sie niemals die neue Version über eine bestehende Installation von phpMyAdmin, entfernen Sie immer zuerst die alten Dateien und behalten Sie dabei nur die Konfiguration bei.

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.

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

  1. Laden Sie die neueste phpMyAdmin-Version von <https://www.phpmyadmin.net/downloads/> herunter.
  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
/**
 * 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.
 */

declare(strict_types=1);

/* Use cookies for session */
ini_set('session.use_cookies', 'true');
/* Change this to true if using phpMyAdmin over https */
$secureCookie = false;
/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secureCookie, true);
/* Create signon session */
$sessionName = 'SignonSession';
session_name($sessionName);
// 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'] = ['verbose' => 'Signon test'];
    $_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
    $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";
    echo '<!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>';

    if (isset($_SESSION['PMA_single_signon_error_message'])) {
        echo '<p class="error">';
        echo $_SESSION['PMA_single_signon_error_message'];
        echo '</p>';
    }

    echo '<form action="signon.php" method="post">
Username: <input type="text" name="user" autocomplete="username" spellcheck="false"><br>
Password: <input type="password" name="password" autocomplete="current-password" spellcheck="false"><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>';
}

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

<?php
/**
 * 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.
 */

declare(strict_types=1);

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

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

/**
 * Map of authenticated users to MySQL user/password pairs.
 */
$authMap = ['https://launchpad.net/~username' => ['user' => 'root', 'password' => '']];

// phpcs:disable PSR1.Files.SideEffects,Squiz.Functions.GlobalFunction

/**
 * Simple function to show HTML page with given content.
 *
 * @param string $contents Content to include in page
 */
function Show_page(string $contents): void
{
    header('Content-Type: text/html; charset=utf-8');

    echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
    echo '<!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>';

    if (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;
    echo '</body></html>';
}

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

// phpcs:enable

/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secureCookie, true);
/* Create signon session */
$sessionName = 'SignonSession';
session_name($sessionName);
@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>';
    Show_page($content);
    exit;
}

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

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

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

    $url = $authRequest->getAuthorizeURL();

    header('Location: ' . $url);
    exit;
}

/* Grab query string */
if (! count($_POST)) {
    [, $queryString] = explode('?', $_SERVER['REQUEST_URI']);
} else {
    // Fetch the raw query body
    $queryString = file_get_contents('php://input');
}

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

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

if (empty($id) || ! isset($authMap[$id])) {
    Show_page('<p>User not allowed!</p>');
    exit;
}

$_SESSION['PMA_single_signon_user'] = $authMap[$id]['user'];
$_SESSION['PMA_single_signon_password'] = $authMap[$id]['password'];
$_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
session_write_close();
/* Redirect to phpMyAdmin (should use absolute URL here!) */
header('Location: ../index.php');

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
/**
 * 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.
 */

declare(strict_types=1);

// phpcs:disable Squiz.Functions.GlobalFunction

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

    /* Here we would retrieve the credentials */
    return ['root', ''];
}

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, Mehrbenutzer-Installationen 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-Richtlinie 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 per Google zu finden).

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.

  • Das test-Verzeichnis von phpMyAdmin entfernen, es sei denn, Sie entwickeln und benötigen eine Testsuite.

  • 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.

  • Verweigern Sie den Zugriff auf Hilfsdateien in ./libraries/ oder ./templates/ Unterordnern in Ihrer Webserver-Konfiguration. Solch eine Konfiguration verhindert mögliche Verzeichnisauflistungs- und Cross-Site-Scripting-Schwachstellen, die in diesem Code gefunden werden könnten. Für den Apache-Webserver wird das oft über eine .htaccess-Datei in diesen Verzeichnissen erledigt.

  • Verweigern Sie den Zugriff auf temporäre Dateien, siehe $cfg['TempDir'] (wenn das innerhalb Ihres Web-Root liegt, siehe auch Webserver-Verzeichnisse hochladen/speichern/importieren).

  • 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 Wie kann ich verhindern, dass robots auf phpMyAdmin zugreifen?.

  • Falls Sie nicht wollen, dass alle MySQL-Benutzer auf phpMyAdmin zugreifen können, verwenden Sie $cfg['Servers'][$i]['AllowDeny']['rules'] zur Begrenzung oder der $cfg['Servers'][$i]['AllowRoot'] um root-Benutzern den Zugriff zu verweigern.

  • Aktivieren Sie Zwei-Faktor-Authentifizierung für Ihr Benutzerkonto.

  • 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.

  • Fehlgeschlagene Anmeldeversuche werden im Syslog protokolliert (falls vorhanden, siehe $cfg['AuthLog']). Dies ermöglicht die Verwendung eines Tools wie fail2ban, um Brute-Force-Versuche zu blockieren. Beachten Sie, dass die von syslog verwendete Protokolldatei nicht die gleiche ist wie die Apache-Fehler- oder Zugriffsprotokolldateien.

  • Falls Sie phpMyAdmin zusammen mit anderen PHP-Anwendungen betreiben, ist es generell ratsam, einen separaten Sitzungsspeicher für phpMyAdmin zu verwenden, um mögliche Sitzungsbasierte Angriffe darauf zu vermeiden. Sie können $cfg['SessionSavePath'] verwenden, um dies zu erreichen.

SSL für die Verbindung zum Datenbankserver verwenden

Es wird empfohlen, bei der Verbindung zum entfernten Datenbankserver SSL zu verwenden. Es gibt verschiedene Konfigurationsoptionen für die SSL-Einrichtung:

$cfg['Servers'][$i]['ssl']
Legt fest, ob überhaupt SSL verwendet werden soll. Wenn Sie nur dies aktivieren, wird die Verbindung verschlüsselt, aber es gibt keine Authentifizierung der Verbindung - Sie können nicht überprüfen, ob Sie mit dem richtigen Server sprechen.
$cfg['Servers'][$i]['ssl_key'] und $cfg['Servers'][$i]['ssl_cert']
Diese wird für die Authentifizierung des Clients gegenüber dem Server verwendet.
$cfg['Servers'][$i]['ssl_ca'] und $cfg['Servers'][$i]['ssl_ca_path']
Die Zertifizierungsstellen, denen Sie für Serverzertifikate vertrauen. Dies wird verwendet, um sicherzustellen, dass Sie mit einem vertrauenswürdigen Server sprechen.
$cfg['Servers'][$i]['ssl_verify']
Diese Konfiguration deaktiviert die Überprüfung des Serverzertifikats. Mit Vorsicht zu verwenden.

Wenn der Datenbank-Server eine lokale Verbindung oder ein Privates Netzwerk nutzt und SSL nicht konfiguriert werden kann, können Sie $cfg['MysqlSslWarningSafeHosts'] verwenden, um die als sicher betrachteten Hostnamen einzutragen.

Bekannte Probleme

Benutzer mit spaltenspezifischen Rechten können nicht „Durchsuchen“

Hat ein Benutzer nur spaltenspezifische Privilegien für einige (aber nicht alle) Spalten einer Tabelle, schlägt „Anzeigen“ mit einer Fehlermeldung fehl.

Als Prolemumgehung kann eine Lesezeichenabfrage mit dem gleichen Namen wie die Tabelle erstellt werden, die stattdessen über den Link „Durchsuchen“ ausgeführt wird. Ausgabe 11922.

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

Bei Verwendung des ‚http‘ auth_type kann es unmöglich sein, sich wieder anzumelden (wenn die Abmeldung manuell oder nach einer Zeit der Inaktivität erfolgt). Ausgabe 11898.