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:
- Einrichtung eines Webservers (funktioniert mit Apache und lighttpd).
- Die phpMyAdmin-Konfigurationsspeicher mit dbconfig-common konfigurieren.
- Zum Absichern des Einrichtungsskriptes ziehen Sie Installationsskript für Debian, Ubuntu und deren Derivate zu Rate.
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:
- Git to download the source, or you can download the most recent source directly from Github
- Composer
- Node.js (Version 10 oder höher)
- Yarn
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.
Siehe auch
-
PMA_HOST
¶ Hostname oder IP-Adresse des zu nutzenden Datenbankservers.
Siehe auch
-
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.
Siehe auch
-
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_ABSOLUTE_URI
¶ Der vollständige Pfad (
https://pma.example.net/
) unter dem der Umkehrproxy phpMyAdmin erreichbar macht.Siehe auch
-
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.Siehe auch
Siehe auch
-
PMA_QUERYHISTORYMAX
¶ When set to an integer, controls the number of history items.
Siehe auch
-
PMA_CONTROLHOST
¶ When set, this points to an alternate database host used for storing the „phpMyAdmin-Konfigurationsspeicher“ database.
Siehe auch
-
PMA_CONTROLUSER
¶ Defines the username for phpMyAdmin to use for the „phpMyAdmin-Konfigurationsspeicher“ database.
Siehe auch
-
PMA_CONTROLPASS
¶ Defines the password for phpMyAdmin to use for the „phpMyAdmin-Konfigurationsspeicher“ database.
Siehe auch
-
PMA_CONTROLPORT
¶ When set, will override the default port (3306) for connecting to the control host.
Siehe auch
-
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
Siehe auch
-
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
undpost_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/
Siehe auch
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¶
- 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. - Versichern Sie sich, dass Sie eine unverändertes Archiv heruntergeladen haben. Siehe hierzu Prüfen der phpMyAdmin Releases.
- 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. - 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.
- 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 einerconfig.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.
- 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 zuauth_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“.. - Ö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:
- Laden sie sich den Keyring von <https://files.phpmyadmin.net/phpmyadmin.keyring>`_ herunter und importieren ihn mit:
$ 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:
- Laden Sie die neueste phpMyAdmin-Version von <https://www.phpmyadmin.net/downloads/> herunter.
- Benennen Sie den vorhandenen phpMyAdmin-Ordner um (z.B. in
phpMyAdmin-alt
). - Entpacken Sie das kürzlich heruntergeladene phpMyAdmin in das gewünschte Verzeichnis (z.B.
phpMyAdmin
). - Kopieren Sie :file:
config.inc.php
aus dem alten Verzeichnis (phpMyAdmin-alt
) in das neue (phpMyAdmin
). - Überprüfen Sie, ob alles ordnungsgemäß funktioniert.
- 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.
Siehe auch
1.32 Kann ich HTTP-Authentifizierung mit IIS verwenden?, 1.35 Kann ich HTTP-Authentifizierung mit Apache CGI verwenden?, 4.1 Ich bin ein ISP. Kann ich eine zentrale Kopie von phpMyAdmin einrichten oder muss ich diese für jeden Kunden installieren?, 4.2 Wie kann man phpMyAdmin vor bösartigem Zugriff schützen?, 4.3 Ich erhalte Fehler, wenn ich eine Datei nicht in /lang oder in /libraries einbinden kann.
HTTP-Authentifizierungs-Methode¶
Benutzt die HTTP Basic-Authentication-Methode und erlaubt Ihnen, sich als jeder gültige MySQL-Benutzer einzuloggen.
Wird von den meisten PHP Konfigurationen unterstützt. Für IIS (ISAPI)-Unterstützung unter Verwendung des CGI-PHP beachten Sie 1.32 Kann ich HTTP-Authentifizierung mit IIS verwenden?, für die Benutzung mit Apache CGI beachten Sie 1.35 Kann ich HTTP-Authentifizierung mit Apache CGI verwenden?.
Wenn PHP unter Apache’s mod_proxy_fcgi (z.B. mit PHP-FPM) läuft, werden
Authorization
-Header nicht an die darunterliegende FCGI-Anwendung weitergegeben, so dass Ihre Anmeldedaten nicht bis zu der Anwendung gelangen. In diesem Fall können Sie die folgenden Einstellungen hinzufügen:SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Siehe auch 4.4 phpMyAdmin gibt bei Verwendung der HTTP-Authentifizierung immer „Zugriff verweigert“. darüber, nicht den .htaccess-Mechanismus zusammen mit der ‚HTTP‘-Authentifizierungsmethode zu verwenden.
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.
Cookie-Authentifizierungsmethode¶
- Benutzername und Kennwort werden während der Sitzung in Cookies gespeichert und das Kennwort wird am Ende der Sitzung gelöscht.
- Mit dieser Methode kann sich der Benutzer richtig aus phpMyAdmin abmelden und mit dem gleichen Benutzernamen wieder anmelden (dies ist mit HTTP-Authentifizierungs-Methode nicht möglich).
- Wenn Sie sich an einen beliebigen Server anmelden wollen (anstatt nur in Server, die in
config.inc.php
konfiguriert sind), benutzen Sie die Richtlinie$cfg['AllowArbitraryServer']
. - Wie im Abschnitt Anforderungen beschrieben, beschleunigt die
openssl
-Erweiterung den Zugriff deutlich, ist aber nicht erforderlich.
Signon-Authentifizierungsmethode¶
- Diese Methode ist ein bequemer Weg, die Login-Daten einer anderen Anwendung zu benutzen, um sich per Single-Signon bei phpMyAdmin zu authentifizieren.
- Die andere Anwendung muss Login-Informationen in Sitzungs-Daten speichern (siehe
$cfg['Servers'][$i]['SignonSession']
und$cfg['Servers'][$i]['SignonCookieParams']
) oder Sie müssen ein Skript schreiben, das die Anmeldedaten zurückgibt (siehe$cfg['Servers'][$i]['SignonScript']
). - Falls keine Anmeldedaten verfügbar sind, wird der Benutzer an
$cfg['Servers'][$i]['SignonURL']
weitergeleitet, wo Sie den Anmeldevorgang verarbeiten sollten.
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 Ihreconfig.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.