Inhaltsverzeichnis
phpMyAdmin ArchLinux
Die Webanwendung phpMyAdmin ist eine OpenSource-Werzeugsammlung, zur Administration von MySQL-Datenbanken über eine Web-Oberfläche. phpMyAdmin unterstützt einen grossen Umfang von Funktionen der Datenbanksysteme MySQL, MariaDB und Drizzle. Die gebräuchlichsten Datenbankoperationen wie das Verwalten von Datenbanken, Tabellen, Spalten, Beziehungen, Indizes, Benutzern, Zugriffsrechten, usw. können über die Web-Oberfläche durchgeführt werden, wobei jederzeit die Möglichkeit besteht, auch direkt SQL-Anweisungen auszuführen.
Beschreibung | Externer Link |
---|---|
Homepage | https://www.phpmyadmin.net/ |
Wiki | https://www.phpmyadmin.net/docs/ |
ArchLinux Wiki | https://wiki.archlinux.org/title/phpMyAdmin |
Installation | 2.9 Seeing an upload progress bar |
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Überblick
Nachfolgende Pakete müssen neben dem Hauptpaket des phpMyAdmin zusätzlich installiert werden:
Zusätzlich muss für den Betrieb des phpMyAdmin, nachfolgendes Paket installiert werden:
php
- Eine Allzweck-Skriptsprache, die sich besonders für die Webentwicklung eignet - ist imextra
-Repository von ArchLinux enthalten.
Vorbereitung
Zur Installation von phpMyAdmin als pacman
-Paket, ist nachfolgendes Paket mindestens erforderlich (welches bei der Installation von phpmyadmin
, falls nicht bereits vorhanden, mit installiert wird):
- Abhängigkeit von PHP und müsste nicht explizit installiert werden
ACHTUNG - Für eine explizite Version z.B. php
muss diese zuvor jedoch installiert werden!
Voraussetzungen
Als Voraussetzung für die Installation von phpLDAPadmin sind folgende Komponenten erforderlich:
- Lauffähiger MariaDB-Server z.B. MariaDB
- Siehe auch den internen Link: LDAP ArchLinux
- Lauffähiger Web-Server z.B. Apache HTTP Server
- Siehe auch den internen Link: Apache HTTP Server ArchLinux
- Siehe auch den internen Link: Apache HTTP Server ArchLinux - mod_ssl - Verschlüsselung (https)
- PHP ab der Version 5 oder höher PHP Net
- Hier als PHP-FPM, siehe auch den internen Link Apache HTTP Server ArchLinux - php-fpm - Alternativer PHP-Interpreter
# pacman --noconfirm -S php
HINWEIS - Aufgrund von anderen Installationen, sind einige benötigte Pakete bereits auf diesem Server installiert!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paketen php
installiert wurden.
# pacman -Qil php
Installation
Zur Installation von phpMyAdmin wird nachfolgendes Paket benötigt:
Mit nachfolgendem Befehl, wird das Pakete phpmyadmin
installiert:
# pacman --noconfirm -S phpmyadmin
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket phpmyadmin
installiert wurden.
# pacman -Qil phpmyadmin
PHP-FPM
Aktuell ist die PHP Net Installation in der Version 8.x noch in Verwendung, welche als PHP-FPM zur Interpretation von PHP-Code verwendet wird.
- Siehe auch den internen Link Apache HTTP Server ArchLinux - php-fpm - Alternativer PHP-Interpreter
/etc/php/php.ini
Nachfolgende Konfigurationen sind in der Konfigurationsdatei
/etc/php/php.ini
ebenfalls noch durchzuführen.
(Nur relevanter Ausschnitt)
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; ; If you wish to have an extension loaded automatically, use the following ; syntax: ; ; extension=modulename ; ; For example: ; ; extension=mysqli ; ; When the extension library to load is not located in the default extension ; directory, You may specify an absolute path to the library file: ; ; extension=/path/to/extension/mysqli.so ; ; Note : The syntax used in previous PHP versions ('extension=<ext>.so' and ; 'extension='php_<ext>.dll') is supported for legacy reasons and may be ; deprecated in a future PHP major version. So, when it is possible, please ; move to the new ('extension=<ext>) syntax. ; ;extension=bcmath ; Tachtler ; default: ;extension=bz2 extension=bz2 ;extension=calendar extension=curl ;extension=dba ;extension=enchant ;extension=exif ;extension=ffi ;extension=ftp ;extension=gd ;extension=gettext ;extension=gmp ; Tachtler ; default: ;extension=iconv extension=iconv ;extension=intl ;extension=ldap ; Tachtler ; default: ;extension=mysqli extension=mysqli ;extension=odbc ;zend_extension=opcache ;extension=pdo_dblib ;extension=pdo_mysql ;extension=pdo_odbc ;extension=pdo_pgsql ;extension=pdo_sqlite ;extension=pgsql ;extension=pspell ;extension=shmop ;extension=snmp ;extension=soap ;extension=sockets ;extension=sodium ;extension=sqlite3 ;extension=sysvmsg ;extension=sysvsem ;extension=sysvshm ;extension=tidy ;extension=xsl extension=zip
Nachfolgende Anpassungen wurden zusätzlich noch durchgeführt:
Extension: bz2
; Tachtler ; default: ;extension=bz2 extension=bz2
Aktivierung der Verwendung der Erweiterung (extension) - bz2
.
Extension: iconv
Aktivierung der Verwendung der Erweiterung (extension) - iconv
.
Extension: mysqli
; Tachtler ; default: ;extension=mysqli extension=mysqli
Aktivierung der Verwendung der Erweiterung (extension) - mysqli
.
Neustart: PHP-FPM Service
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart php-fpm.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Basis-Konfiguration
/etc/webapps/phpmyadmin/config.inc.php
Die Standard Konfigurationsdatei für die Web-Anwendung phpMyAdmin befindet sich in nachfolgendem Verzeichnis und trägt nachfolgenden Namen:
/etc/webapps/phpmyadmin/config.inc.php
Die Konfiguration soll jedoch bereits unter Zuhilfenahme der Web-Anwendung phpMyAdmin durchgeführt werden. Da dann durch die Web-Anwendung phpMyAdmin eine Konfigurationsdatei erstellt wird, sollte die Standard Konfigurationsdatei mit nachfolgendem Befehl umbenannt werden und so gleichzeitig gesichert werden:
# mv /etc/webapps/phpmyadmin/config.inc.php /etc/webapps/phpmyadmin/config.inc.php.orig
HINWEIS - Nur so, kann die Konfigurationsdateierzeugung über den Aufruf von phpMyAdmin ermöglicht werden!
Apache Webserver
Nachfolgend soll ein Apache HTTPD Webserver zur Auslieferung von phpMyAdmin verwendet werden.
Dazu ist es erforderlich einen Apache HTTPD Webserver, wie unter nachfolgendem internen Link zu installieren:
/etc/httpd/conf/vhosts/phpmyadmin.conf
Zusätzlich ist die Einrichtung eines virtuellen Host mit nachfolgender Konfiguration erforderlich. Die Konfigurationsdatei sollte unter nachfolgendem Verzeichnis mit nachfolgendem Namen neu erstellt werden:
# mkdir /etc/httpd/conf/vhosts
# vim /etc/httpd/conf/vhosts/phpmyadmin.conf
Der Inhalt der so neu erstellten Konfigurationsdatei für den virtuellen Host des Apache HTTPD Webserver könnt in etwa wie folgt aussehen:
<VirtualHost *:80> ServerAdmin webmaster@tachtler.net ServerName phpmyadmin.tachtler.net ServerPath / # ---------------------------------------------------------- # Rewrite settings # Rewrite the requestet URI - PERMANENT - to HTTPS and leave # this virtual Host to the HTTPS variant of it. # ---------------------------------------------------------- <IfModule rewrite_module> RewriteEngine On RewriteCond "%{HTTPS}" "!=on" RewriteRule "^(.*)$" "https://%{HTTP_HOST}%{REQUEST_URI}" [R=301,L] </IfModule> # ---------------------------------------------------------- # Logging settings # ---------------------------------------------------------- <IfModule log_config_module> ErrorLog /var/log/httpd/phpmyadmin.tachtler.net_error.log SetEnvIF User-Agent "HAProxy" dontlog=yes SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded=yes <IfModule logio_module> CustomLog /var/log/httpd/phpmyadmin.tachtler.net_access.log combined_deflate_ssl "expr=(reqenv('forwarded') != 'yes' && reqenv('dontlog') != 'yes')" CustomLog /var/log/httpd/phpmyadmin.tachtler.net_access.log combined_deflate_proxypass_ssl "expr=(reqenv('forwarded') == 'yes' && reqenv('dontlog') != 'yes')" </IfModule> </IfModule> </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@tachtler.net ServerName phpmyadmin.tachtler.net ServerPath / # ---------------------------------------------------------- # SSL settings # ---------------------------------------------------------- <IfModule ssl_module> SSLEngine On SSLCertificateFile /etc/letsencrypt/live/tachtler.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/tachtler.net/privkey.pem <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/srv/http/cgi-bin"> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </IfModule> # ---------------------------------------------------------- # Rewrite settings # Rewrite the requestet URI - PERMANENT - to HTTPS and leave # this virtual Host to the HTTPS variant of it. # ---------------------------------------------------------- <IfModule rewrite_module> RewriteEngine On RewriteCond "%{HTTPS}" "!=on" RewriteRule "^(.*)$" "https://%{HTTP_HOST}%{REQUEST_URI}" [R=301,L] </IfModule> # ---------------------------------------------------------- # Alias settings - The "/" must be at the end! # ---------------------------------------------------------- <IfModule alias_module> Alias / "/usr/share/webapps/phpMyAdmin/" </IfModule> # ---------------------------------------------------------- # Directory access settings # URL of https://servername/ # ---------------------------------------------------------- <Directory "/usr/share/webapps/phpMyAdmin"> DirectoryIndex index.php Options +Indexes +FollowSymLinks AllowOverride None Require all granted <FilesMatch \.php$> SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost" </FilesMatch> </Directory> <Directory "/usr/share/webapps/phpMyAdmin/setup"> Options -Indexes +FollowSymLinks AllowOverride None </Directory> <Directory "/usr/share/webapps/phpMyAdmin/templates"> Require all denied </Directory> <Directory "/usr/share/webapps/phpMyAdmin/libraries"> Require all denied </Directory> <Directory "/usr/share/webapps/phpMyAdmin/setup/lib"> Require all denied </Directory> <Directory "/usr/share/webapps/phpMyAdmin/setup/frames"> Require all denied </Directory> # ---------------------------------------------------------- # Logging settings # ---------------------------------------------------------- <IfModule log_config_module> ErrorLog /var/log/httpd/phpmyadmin.tachtler.net_error.log SetEnvIF User-Agent "HAProxy" dontlog=yes SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded=yes <IfModule logio_module> CustomLog /var/log/httpd/phpmyamdin.tachtler.net_access.log combined_deflate_ssl "expr=(reqenv('forwarded') != 'yes' && reqenv('dontlog') != 'yes')" CustomLog /var/log/httpd/phpmyadmin.tachtler.net_access.log combined_deflate_proxypass_ssl "expr=(reqenv('forwarded') == 'yes' && reqenv('dontlog') != 'yes')" </IfModule> </IfModule> </VirtualHost>
/etc/httpd/conf/httpd.conf
Damit die zuvor unter
neu erstellte Konfigurationsdatei auch durch den Apache HTTPD Webserver eingelesen wird, ist nachfolgende Ergänzung in der bereits bestehnden Konfigurationsdatei
/etc/httpd/conf/httpd.conf
wie folgt am Ende der Konfigurationsdatei hinzuzufügen:
# Load *.conf files in the "conf/vhost" directory, if any.
IncludeOptional conf/vhost/*.conf
Neustart: Apache HTTPD Webserver
Bevor weitere Konfigurationsschritte erfolgen, sollte ein Neustart erfolgen, was mit nachfolgendem Befehl durchgeführt werden kann:
# systemctl restart httpd.service
HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !
Web-Anwendung-Konfiguration
Web-Anwendung-Konfiguration: - Variante 1: Setup
Durch Aufruf der nachfolgenden URL, kann mit der Konfiguration unter Zuhilfenahme der Web-Anwendung phpMyAdmin begonnen werden:
HINWEIS - Hierzu ist es erforderlich, das die Konfigurationsdatei
/etc/webapps/phpmyadmin/config.inc.php
NICHT bereits existiert!
HINWEIS - Unter dem vorhergehenden Konfigurationsschritt
wurde die Konfigurationsdatei unter dem Namen
/etc/webapps/phpmyadmin/config.inc.php.orig
gesichert!
Web-Anwendung-Konfiguration - Variante 2: /etc/webapps/phpmyadmin/config.inc.php
ACHTUNG - Die nachfolgende Konfiguration wurde NICHT über die Web-Anwendung erstellt!
Weitaus effektiver ist es, phpMyAdmin durch Ergänzungen der bestehenden und mitgelieferten Konfigurationsdatei in nachfolgendem Verzeichnis:
/etc/webapps/phpmyadmin
zu bearbeiten.
Damit dies wieder Möglich ist, soll der unter dem Konfigurationsschritt
gesicherte Datei, mit nachfolgendem Befehl wiederhergestellt werden:
# cp -a /etc/webapps/phpmyadmin/config.inc.php.orig /etc/webapps/phpmyadmin/config.inc.php
Nachfolgend ist die komplette Konfigurationsdatei zu sehen. Die relevanten Änderungen sind mit dem vorangestellten Kommentar
// Tachtler
oder
/**
* Tachtler
*/
versehen:
<?php /** * phpMyAdmin sample configuration, you can use it as base for * manual configuration. For easier setup you can use setup/ * * All directives are explained in documentation in the doc/ folder * or at <https://docs.phpmyadmin.net/>. */ declare(strict_types=1); /** * This is needed for cookie based authentication to encrypt the cookie. * Needs to be a 32-bytes long string of random bytes. See FAQ 2.10. */ // Tachtler // generate: openssl rand -base64 22 // default: $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ $cfg['blowfish_secret'] = 'B1Yha3GlS4zeDJbXgveFNkl3e2mDuAKT'; /** * Servers configuration */ $i = 0; /** * Server: db.idmz.tachtler.net [1] */ $i++; /* Authentication type */ // Tachtler - NEW - $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = ''; /* Server parameters */ // Tachtler - NEW - $cfg['Servers'][$i]['verbose'] = 'db.idmz.tachtler.net'; $cfg['Servers'][$i]['host'] = '127.0.0.1'; # TCP $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = ''; // Tachtler // default: $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['compress'] = true; $cfg['Servers'][$i]['AllowNoPassword'] = false; /** * phpMyAdmin configuration storage settings. */ /* User used to manipulate with storage */ // Tachtler // default: // $cfg['Servers'][$i]['controlhost'] = ''; $cfg['Servers'][$i]['controlhost'] = ''; // Tachtler // default: // $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controlport'] = ''; // Tachtler // default: // $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controluser'] = 'pma_user'; // Tachtler // default: // $cfg['Servers'][$i]['controlpass'] = 'pmapass'; $cfg['Servers'][$i]['controlpass'] = 'geheim'; /* Storage database and tables */ // Tachtler - ENABLED - $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; /** * End of servers configuration */ /** * Directories for saving/loading files from server */ // Tachtler // default: $cfg['UploadDir'] = ''; $cfg['UploadDir'] = '/dev/shm'; // Tachtler // default: $cfg['SaveDir'] = ''; $cfg['SaveDir'] = '/dev/shm'; /** * Whether to display icons or text or both icons and text in table row * action segment. Value can be either of 'icons', 'text' or 'both'. * default = 'both' */ //$cfg['RowActionType'] = 'icons'; /** * Defines whether a user should be displayed a "show all (records)" * button in browse mode or not. * default = false */ //$cfg['ShowAll'] = true; /** * Number of rows displayed when browsing a result set. If the result * set contains more rows, "Previous" and "Next". * Possible values: 25, 50, 100, 250, 500 * default = 25 */ //$cfg['MaxRows'] = 50; /** * Disallow editing of binary fields * valid values are: * false allow editing * 'blob' allow editing except for BLOB fields * 'noblob' disallow editing except for BLOB fields * 'all' disallow editing * default = 'blob' */ //$cfg['ProtectBinary'] = false; /** * Default language to use, if not browser-defined or user-defined * (you find all languages in the locale folder) * uncomment the desired line: * default = 'en' */ //$cfg['DefaultLang'] = 'en'; // Tachtler // default: //$cfg['DefaultLang'] = 'de'; $cfg['DefaultLang'] = 'de'; /** * How many columns should be used for table display of a database? * (a value larger than 1 results in some information being hidden) * default = 1 */ //$cfg['PropertiesNumColumns'] = 2; /** * Set to true if you want DB-based query history.If false, this utilizes * JS-routines to display query history (lost by window close) * * This requires configuration storage enabled, see above. * default = false */ //$cfg['QueryHistoryDB'] = true; /** * When using DB-based query history, how many entries should be kept? * default = 25 */ //$cfg['QueryHistoryMax'] = 100; /** * Whether or not to query the user before sending the error report to * the phpMyAdmin team when a JavaScript error occurs * * Available options * ('ask' | 'always' | 'never') * default = 'ask' */ //$cfg['SendErrorReports'] = 'always'; /** * 'URLQueryEncryption' defines whether phpMyAdmin will encrypt sensitive data from the URL query string. * 'URLQueryEncryptionSecretKey' is a 32 bytes long secret key used to encrypt/decrypt the URL query string. */ // Tachtler // default: //$cfg['URLQueryEncryption'] = true; $cfg['URLQueryEncryption'] = true; // Tachtler // generate: openssl rand -base64 22 // default: //$cfg['URLQueryEncryptionSecretKey'] = ''; $cfg['URLQueryEncryptionSecretKey'] = 'UyaCFsdNMAFe43jb0F2XUAWf7n7sfgTK'; /** * You can find more configuration options in the documentation * in the doc/ folder or at <https://docs.phpmyadmin.net/>. */ /** * Tachtler - NEW - */ $cfg['ServerDefault'] = 1; $cfg['TempDir'] = '/dev/shm'; $cfg['RecodingEngine'] = 'iconv';
Erklärungen
// Tachtler // generate: openssl rand -base64 22 // default: $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ $cfg['blowfish_secret'] = 'B1Yha3GlS4zeDJbXgveFNkl3e2mDuA==';
Setzen einer 32-bit langen Zeichenkette, welche dazu verwendet wird, bei der Authentifizierung mittels cookie
einen ge„hash“ten Wert zu erzeugen.
HINWEIS - Mit nachfolgendem Befehl, kann eine 32-bit lange Zeichenkette erzeugt werden
# openssl rand -base64 22 B1Yha3GlS4zeDJbXgveFNkl3e2mDuA==
// Tachtler - NEW - $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = '';
Setzen der Authentifizierungmethode cookie
und für die Authentifizierung mittels benötigten weiteren Angaben wie user
und password
, wobei letzteres leer sein sollte, um die Abfrage zu erzwingen.
// Tachtler - NEW - $cfg['Servers'][$i]['verbose'] = 'db.idmz.tachtler.net'; $cfg['Servers'][$i]['host'] = '127.0.0.1'; # TCP $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['socket'] = '';
Setzen der Parameter zur Kommunikation von phpMyAdmin mit der MariaDB-Datenbank.
HIWNEIS - Für die Verwendung von Standardwerten, können die Parameter leer gelassen werden!
Paramater | Stadard-Wert |
---|---|
$cfg['Servers'][$i]['port'] = ''; | 3306 |
$cfg['Servers'][$i]['socket'] = ''; | /run/mysqld/mysqld.sock |
// Tachtler // default: $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['compress'] = true;
Aktivierung der komprimierten Kommunikation.
// Tachtler // default: // $cfg['Servers'][$i]['controlhost'] = ''; $cfg['Servers'][$i]['controlhost'] = ''; // Tachtler // default: // $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controlport'] = ''; // Tachtler // default: // $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controluser'] = 'pma_user'; // Tachtler // default: // $cfg['Servers'][$i]['controlpass'] = 'pmapass'; $cfg['Servers'][$i]['controlpass'] = 'geheim';
Setzen der Parameter zur Kommunikation von phpMyAdmin mit der noch in einem späteren Konfigurationsschritt anzulegenden Datenbank in der MariaDB-Datenbank.
HINWEIS - Diese Datenbank und die darin enthaltenen Tabellen dienen der Selbstverwaltung von phpMyAdmin
HIWNEIS - Für die Verwendung von Standardwerten, können die Parameter leer gelassen werden!
Paramater | Stadard-Wert |
---|---|
$cfg['Servers'][$i]['controlhost'] = ''; | localhost |
$cfg['Servers'][$i]['controlport'] = ''; | 3306 |
// Tachtler - ENABLED - $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
Definitionen der Tabellen von phpMyAdmin mit der noch in einem späteren Konfigurationsschritt anzulegenden Datenbank in der MariaDB-Datenbank.
HINWEIS - Diese Datenbank und die darin enthaltenen Tabellen dienen der Selbstverwaltung von phpMyAdmin
// Tachtler // default: $cfg['UploadDir'] = ''; $cfg['UploadDir'] = '/dev/shm';
Verzeichnis, in dem durch phpMyAdmin-Dateien hochgeladen werden können.
// Tachtler // default: $cfg['SaveDir'] = ''; $cfg['SaveDir'] = '/dev/shm';
Verzeichnis, in dem durch phpMyAdmin-Dateien gespeichert werden können.
// Tachtler // default: //$cfg['DefaultLang'] = 'de'; $cfg['DefaultLang'] = 'de';
Einstellung welche Standardspreche angewendet werden soll, wenn diese nicht über den verwendeten Browser ermittelt werden kann.
// Tachtler // default: //$cfg['URLQueryEncryption'] = true; $cfg['URLQueryEncryption'] = true;
URLQueryEncryption
legt fest, ob phpMyAdmin sensible Daten aus dem URL-Query-String verschlüsseln soll.
// Tachtler // generate: openssl rand -base64 22 // default: //$cfg['URLQueryEncryptionSecretKey'] = ''; $cfg['URLQueryEncryptionSecretKey'] = 'UyaCFsdNMAFe43jb0F2XUAWf7n7sfg==';
URLQueryEncryptionSecretKey
ist ein 32 Byte langer geheimer Schlüssel, der zur Verschlüsselung/Entschlüsselung der URL-Abfragezeichenfolge verwendet wird.
HINWEIS - Mit nachfolgendem Befehl, kann eine 32-bit lange Zeichenkette erzeugt werden
# openssl rand -base64 22 UyaCFsdNMAFe43jb0F2XUAWf7n7sfg==
/** * Tachtler - NEW - */ $cfg['ServerDefault'] = 1;
Angabe, das standardmäßig - falls mehrere Server definiert werden sollten - die Server-Definition mit der laufenden Konfigurationsnummer 1
verwendet werden soll.
$cfg['TempDir'] = '/dev/shm';
Setzen eines temporären Verzeichnisses, das durch phpMyAdmin verwendet werden kann.
$cfg['RecodingEngine'] = 'iconv';
Dieses Modul enthält eine Schnittstelle zur iconv
-Zeichensatzkonvertierungsfunktion. Mit diesem Modul können Sie eine Zeichenkette, die durch einen lokalen Zeichensatz dargestellt wird, in eine Zeichenkette umwandeln, die durch einen anderen Zeichensatz dargestellt wird, z. B. den Unicode-Zeichensatz.
Web-Anwendung-Konfiguration: Konfigurationsspeicher-Konfiguration
Es gibt in phpMyAdmin die Möglichkeit einen Konfigurationsspeicher zu nutzen, was im Grunde eine zusätzliche Datenbank innerhalb eines MariaDB-Datenbank-Servers ist und Funktionen wie z.B.
- Lesezeichen (bookmarks)
- Kommentare (comments)
- Historie von SQL-Befehlen (SQL-history)
- Aufzeichnungs-Techniken (tracking mechanism)
- Erstellen von PDF-Dateien (PDF-generation)
- Inhalt von Spalten zu transformieren (column contents transformation)
bietet.
Um diese Möglichkeiten nutzen zu können, ist die
- Erstellung einer Zusätzlichen Datenbank im MariaDB-Datenbank-Server und die
- Erstellung eines Kontrollbenutzer mit einem dazugehörigen Passwort und die
- Konfiguration von phpMyAdmin
notwendig.
Datenbank erstellen
Um die benötigte zusätzliche Datenbank im MariaDB-Datenbank-Server erstellen zu können, kann in nachfolgendem Verzeichnis ein Skript, welches nachfolgendem Namen hat, genutzt werden:
/usr/share/webapps/phpMyAdmin/sql/create_tables.sql
WICHTIG - Es wird die Kenntnis des Passwortes für den Benutzer root
vorausgesetzt!.
Mit nachfolgendem Befehl, kann das Skript /usr/share/webapps/phpMyAdmin/sql/create_tables.sql
gegen den MariaDB-Datenbank-Server angewandt werden und erstellt so die zusätzliche Datenbank für den Konfigurationsspeicher von phpMyAdmin:
# /usr/bin/mariadb -h localhost -u root < /usr/share/webapps/phpMyAdmin/sql/create_tables.sql
Ein Überprüfung, ob die Erstellung der zusätzliche Datenbank für den Konfigurationsspeicher von phpMyAdmin erfolgreich war, kann durch nachfolgende Befehle überprüft werden.
Nachfolgender Befehl ermöglicht die Anmeldung am MariaDB-Monitor:
# /usr/bin/mariadb -h localhost -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 359 Server version: 11.1.2-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Nachfolgender Befehl listet die bestehenden Datenbanken auf:
MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | phpmyadmin | | sys | +--------------------+ 5 rows in set (0.001 sec) MariaDB [(none)]>
HINWEIS - Es sollte eine neue Datenbank mit dem Namen phpmyadmin
ersichtlich sein!
Nachfolgender Befehl beendet den MariaDB-Monitor:
MariaDB [(none)]> quit Bye
Web-Anwendung-Konfiguration: Kontrollbenutzer erstellen
Um ein Passwort im verschlüsselten Format für das Passwort-Feld der nachfolgenden SQL-Datei zu erstellen, kann nachfolgender Befehl genutzt werden.
WICHTIG - Es wird die Kenntnis des Passwortes für den Benutzer root
vorausgesetzt!.
# echo "SELECT PASSWORD('geheim');" | /usr/bin/mariadb -h localhost -u root PASSWORD('geheim') *462366917EEDD1970A48E87D8EF59EB67D2CA26F
HINWEIS - Falls sich Sonderzeichen im Passwort befinden sollten, müssen diese maskiert werden
# echo "SELECT PASSWORD('ge\$eim');" | /usr/bin/mariadb -h localhost -u root PASSWORD('ge$eim') *4CDE09EEEC30A9117A97BD5660519EA7C93A6BE2
Mit nachfolgendem Befehl soll nun eine SQL-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
SQL-Datei | Verwendungszweck |
---|---|
/tmp/create_control_users_for_database_phpmyadmin.sql | Erstellung eines Kontrollbenutzers |
# vim /tmp/create_control_users_for_database_phpmyadmin.sql
Die SQL-Datei /tmp/create_control_users_for_database_phpmyadmin.sql
soll nachfolgenden Inhalt bekommen:
-- MariaDB-SQL-Script. -- Create control users for database phpmyadmin. -- (c) Klaus Tachtler 2023. -- # /usr/bin/mariadb -h localhost -u root < <script.sql> -- $ /usr/bin/mariadb -h localhost -u root -p < <script.sql> -- Use database. USE mysql; -- Create new users. CREATE USER IF NOT EXISTS 'pma_user'@'localhost' IDENTIFIED BY PASSWORD '*462366917EEDD1970A48E87D8EF59EB67D2CA26F'; -- Grant privileges to new users. GRANT SELECT, INSERT, DELETE, UPDATE ON phpmyadmin.* TO 'pma_user'@'localhost' IDENTIFIED BY PASSWORD '*462366917EEDD1970A48E87D8EF59EB67D2CA26F'; -- Make sure that priviliges are reloaded. FLUSH PRIVILEGES;
Abschliessend wird mit nachfolgendem Befehl der Inhalt der SQL-Datei im laufendem Betrieb des MariaDB-Datenbank-Servers der Konfiguration des MariaDB-Datenbank-Servers hinzugefügt:
# /usr/bin/mariadb -h localhost -u root < /tmp/create_control_users_for_database_phpmyadmin.sql
Mit nachfolgenden Befehlen kann nun überprüft werden, ob die vorhergehenden Schritte zur Einrichtung eines Kontrollbenutzers erfolgreich waren.
Nachfolgender Befehl ermöglicht die Anmeldung am MariaDB-Monitor:
# /usr/bin/mariadb -h localhost -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 997 Server version: 11.1.2-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Nachfolgender Befehl listet den angelegten Kontrollbenutzer mit allen Details auf:
MariaDB [(none)]> SELECT * FROM mysql.user WHERE User = 'pma_user'; +-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ | Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | is_role | default_role | max_statement_time | +-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ | localhost | pma_user | *462366917EEDD1970A48E87D8EF59EB67D2CA26F | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 | 0 | mysql_native_password | *462366917EEDD1970A48E87D8EF59EB67D2CA26F | N | N | | 0.000000 | +-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ 1 row in set (0.004 sec) MariaDB [(none)]>
MariaDB [(none)]> SELECT * FROM mysql.user WHERE User = 'pma_user'\G *************************** 1. row *************************** Host: localhost User: pma_user Password: *462366917EEDD1970A48E87D8EF59EB67D2CA26F Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N Delete_history_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: *462366917EEDD1970A48E87D8EF59EB67D2CA26F password_expired: N is_role: N default_role: max_statement_time: 0.000000 1 row in set (0.003 sec) MariaDB [(none)]>
Nachfolgender Befehl listet den angelegten Kontrollbenutzer ebenfalls mit allen Details auf, jedoch geht diese Abfrage schon gegen die neue Tabelle mysql.global_priv
:
MariaDB [(none)]> SELECT * FROM mysql.global_priv WHERE User = 'pma_user'; +-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Host | User | Priv | +-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | localhost | pma_user | {"access":0,"version_id":110102,"plugin":"mysql_native_password","authentication_string":"*462366917EEDD1970A48E87D8EF59EB67D2CA26F","password_last_changed":1697286331} | +-----------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.001 sec) MariaDB [(none)]>
Nachfolgender Befehl listet den angelegten Kontrollbenutzer mit den Datenbankspezifischen Rechten auf:
MariaDB [(none)]> SHOW GRANTS FOR 'pma_user'@'localhost'; +-----------------------------------------------------------------------------------------------------------------+ | Grants for pma_user@localhost | +-----------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `pma_user`@`localhost` IDENTIFIED BY PASSWORD '*462366917EEDD1970A48E87D8EF59EB67D2CA26F' | | GRANT SELECT, INSERT, UPDATE, DELETE ON `phpmyadmin`.* TO `pma_user`@`localhost` | +-----------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.000 sec) MariaDB [(none)]>
MariaDB [(none)]> SELECT * FROM mysql.global_priv WHERE User = 'pma_user'\G *************************** 1. row *************************** Host: localhost User: pma_user Priv: {"access":0,"version_id":110102,"plugin":"mysql_native_password","authentication_string":"*462366917EEDD1970A48E87D8EF59EB67D2CA26F","password_last_changed":1697286331} 1 row in set (0.000 sec) MariaDB [(none)]>
MariaDB [(none)]> SELECT Host, User, IF(JSON_VALUE(Priv, '$.plugin') IN ('mysql_native_password', 'mysql_old_password'), IFNULL(JSON_VALUE(Priv, '$.authentication_string'), ''), '') AS Password, IF(JSON_VALUE(Priv, '$.access') & 1, 'Y', 'N') AS Select_priv, IF(JSON_VALUE(Priv, '$.access') & 2, 'Y', 'N') AS Insert_priv, IF(JSON_VALUE(Priv, '$.access') & 4, 'Y', 'N') AS Update_priv, IF(JSON_VALUE(Priv, '$.access') & 8, 'Y', 'N') AS Delete_priv, IF(JSON_VALUE(Priv, '$.access') & 16, 'Y', 'N') AS Create_priv, IF(JSON_VALUE(Priv, '$.access') & 32, 'Y', 'N') AS Drop_priv, IF(JSON_VALUE(Priv, '$.access') & 64, 'Y', 'N') AS Reload_priv, IF(JSON_VALUE(Priv, '$.access') & 128, 'Y', 'N') AS Shutdown_priv, IF(JSON_VALUE(Priv, '$.access') & 256, 'Y', 'N') AS Process_priv, IF(JSON_VALUE(Priv, '$.access') & 512, 'Y', 'N') AS File_priv, IF(JSON_VALUE(Priv, '$.access') & 1024, 'Y', 'N') AS Grant_priv, IF(JSON_VALUE(Priv, '$.access') & 2048, 'Y', 'N') AS References_priv, IF(JSON_VALUE(Priv, '$.access') & 4096, 'Y', 'N') AS Index_priv, IF(JSON_VALUE(Priv, '$.access') & 8192, 'Y', 'N') AS Alter_priv, IF(JSON_VALUE(Priv, '$.access') & 16384, 'Y', 'N') AS Show_db_priv, IF(JSON_VALUE(Priv, '$.access') & 32768, 'Y', 'N') AS Super_priv, IF(JSON_VALUE(Priv, '$.access') & 65536, 'Y', 'N') AS Create_tmp_table_priv, IF(JSON_VALUE(Priv, '$.access') & 131072, 'Y', 'N') AS Lock_tables_priv, IF(JSON_VALUE(Priv, '$.access') & 262144, 'Y', 'N') AS Execute_priv, IF(JSON_VALUE(Priv, '$.access') & 524288, 'Y', 'N') AS Repl_slave_priv, IF(JSON_VALUE(Priv, '$.access') & 1048576, 'Y', 'N') AS Repl_client_priv, IF(JSON_VALUE(Priv, '$.access') & 2097152, 'Y', 'N') AS Create_view_priv, IF(JSON_VALUE(Priv, '$.access') & 4194304, 'Y', 'N') AS Show_view_priv, IF(JSON_VALUE(Priv, '$.access') & 8388608, 'Y', 'N') AS Create_routine_priv, IF(JSON_VALUE(Priv, '$.access') & 16777216, 'Y', 'N') AS Alter_routine_priv, IF(JSON_VALUE(Priv, '$.access') & 33554432, 'Y', 'N') AS Create_user_priv, IF(JSON_VALUE(Priv, '$.access') & 67108864, 'Y', 'N') AS Event_priv, IF(JSON_VALUE(Priv, '$.access') & 134217728, 'Y', 'N') AS Trigger_priv, IF(JSON_VALUE(Priv, '$.access') & 268435456, 'Y', 'N') AS Create_tablespace_priv, IF(JSON_VALUE(Priv, '$.access') & 536870912, 'Y', 'N') AS Delete_history_priv, ELT(IFNULL(JSON_VALUE(Priv, '$.ssl_type'), 0) + 1, '', 'ANY','X509', 'SPECIFIED') AS ssl_type, IFNULL(JSON_VALUE(Priv, '$.ssl_cipher'), '') AS ssl_cipher, IFNULL(JSON_VALUE(Priv, '$.x509_issuer'), '') AS x509_issuer, IFNULL(JSON_VALUE(Priv, '$.x509_subject'), '') AS x509_subject, CAST(IFNULL(JSON_VALUE(Priv, '$.max_questions'), 0) AS UNSIGNED) AS max_questions, CAST(IFNULL(JSON_VALUE(Priv, '$.max_updates'), 0) AS UNSIGNED) AS max_updates, CAST(IFNULL(JSON_VALUE(Priv, '$.max_connections'), 0) AS UNSIGNED) AS max_connections, CAST(IFNULL(JSON_VALUE(Priv, '$.max_user_connections'), 0) AS SIGNED) AS max_user_connections, IFNULL(JSON_VALUE(Priv, '$.plugin'), '') AS plugin, IFNULL(JSON_VALUE(Priv, '$.authentication_string'), '') AS authentication_string, 'N' AS password_expired, ELT(IFNULL(JSON_VALUE(Priv, '$.is_role'), 0) + 1, 'N', 'Y') AS is_role, IFNULL(JSON_VALUE(Priv, '$.default_role'), '') AS default_role, CAST(IFNULL(JSON_VALUE(Priv, '$.max_statement_time'), 0.0) AS DECIMAL(12,6)) AS max_statement_time FROM mysql.global_priv WHERE User = 'pma_user'; +-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ | Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | is_role | default_role | max_statement_time | +-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ | localhost | pma_user | *462366917EEDD1970A48E87D8EF59EB67D2CA26F | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 | 0 | mysql_native_password | *462366917EEDD1970A48E87D8EF59EB67D2CA26F | N | N | | 0.000000 | +-----------+----------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ 1 row in set (0.002 sec) MariaDB [(none)]>
MariaDB [(none)]> SELECT Host, User, IF(JSON_VALUE(Priv, '$.plugin') IN ('mysql_native_password', 'mysql_old_password'), IFNULL(JSON_VALUE(Priv, '$.authentication_string'), ''), '') AS Password, IF(JSON_VALUE(Priv, '$.access') & 1, 'Y', 'N') AS Select_priv, IF(JSON_VALUE(Priv, '$.access') & 2, 'Y', 'N') AS Insert_priv, IF(JSON_VALUE(Priv, '$.access') & 4, 'Y', 'N') AS Update_priv, IF(JSON_VALUE(Priv, '$.access') & 8, 'Y', 'N') AS Delete_priv, IF(JSON_VALUE(Priv, '$.access') & 16, 'Y', 'N') AS Create_priv, IF(JSON_VALUE(Priv, '$.access') & 32, 'Y', 'N') AS Drop_priv, IF(JSON_VALUE(Priv, '$.access') & 64, 'Y', 'N') AS Reload_priv, IF(JSON_VALUE(Priv, '$.access') & 128, 'Y', 'N') AS Shutdown_priv, IF(JSON_VALUE(Priv, '$.access') & 256, 'Y', 'N') AS Process_priv, IF(JSON_VALUE(Priv, '$.access') & 512, 'Y', 'N') AS File_priv, IF(JSON_VALUE(Priv, '$.access') & 1024, 'Y', 'N') AS Grant_priv, IF(JSON_VALUE(Priv, '$.access') & 2048, 'Y', 'N') AS References_priv, IF(JSON_VALUE(Priv, '$.access') & 4096, 'Y', 'N') AS Index_priv, IF(JSON_VALUE(Priv, '$.access') & 8192, 'Y', 'N') AS Alter_priv, IF(JSON_VALUE(Priv, '$.access') & 16384, 'Y', 'N') AS Show_db_priv, IF(JSON_VALUE(Priv, '$.access') & 32768, 'Y', 'N') AS Super_priv, IF(JSON_VALUE(Priv, '$.access') & 65536, 'Y', 'N') AS Create_tmp_table_priv, IF(JSON_VALUE(Priv, '$.access') & 131072, 'Y', 'N') AS Lock_tables_priv, IF(JSON_VALUE(Priv, '$.access') & 262144, 'Y', 'N') AS Execute_priv, IF(JSON_VALUE(Priv, '$.access') & 524288, 'Y', 'N') AS Repl_slave_priv, IF(JSON_VALUE(Priv, '$.access') & 1048576, 'Y', 'N') AS Repl_client_priv, IF(JSON_VALUE(Priv, '$.access') & 2097152, 'Y', 'N') AS Create_view_priv, IF(JSON_VALUE(Priv, '$.access') & 4194304, 'Y', 'N') AS Show_view_priv, IF(JSON_VALUE(Priv, '$.access') & 8388608, 'Y', 'N') AS Create_routine_priv, IF(JSON_VALUE(Priv, '$.access') & 16777216, 'Y', 'N') AS Alter_routine_priv, IF(JSON_VALUE(Priv, '$.access') & 33554432, 'Y', 'N') AS Create_user_priv, IF(JSON_VALUE(Priv, '$.access') & 67108864, 'Y', 'N') AS Event_priv, IF(JSON_VALUE(Priv, '$.access') & 134217728, 'Y', 'N') AS Trigger_priv, IF(JSON_VALUE(Priv, '$.access') & 268435456, 'Y', 'N') AS Create_tablespace_priv, IF(JSON_VALUE(Priv, '$.access') & 536870912, 'Y', 'N') AS Delete_history_priv, ELT(IFNULL(JSON_VALUE(Priv, '$.ssl_type'), 0) + 1, '', 'ANY','X509', 'SPECIFIED') AS ssl_type, IFNULL(JSON_VALUE(Priv, '$.ssl_cipher'), '') AS ssl_cipher, IFNULL(JSON_VALUE(Priv, '$.x509_issuer'), '') AS x509_issuer, IFNULL(JSON_VALUE(Priv, '$.x509_subject'), '') AS x509_subject, CAST(IFNULL(JSON_VALUE(Priv, '$.max_questions'), 0) AS UNSIGNED) AS max_questions, CAST(IFNULL(JSON_VALUE(Priv, '$.max_updates'), 0) AS UNSIGNED) AS max_updates, CAST(IFNULL(JSON_VALUE(Priv, '$.max_connections'), 0) AS UNSIGNED) AS max_connections, CAST(IFNULL(JSON_VALUE(Priv, '$.max_user_connections'), 0) AS SIGNED) AS max_user_connections, IFNULL(JSON_VALUE(Priv, '$.plugin'), '') AS plugin, IFNULL(JSON_VALUE(Priv, '$.authentication_string'), '') AS authentication_string, 'N' AS password_expired, ELT(IFNULL(JSON_VALUE(Priv, '$.is_role'), 0) + 1, 'N', 'Y') AS is_role, IFNULL(JSON_VALUE(Priv, '$.default_role'), '') AS default_role, CAST(IFNULL(JSON_VALUE(Priv, '$.max_statement_time'), 0.0) AS DECIMAL(12,6)) AS max_statement_time FROM mysql.global_priv WHERE User = 'pma_user'\G *************************** 1. row *************************** Host: localhost User: pma_user Password: *462366917EEDD1970A48E87D8EF59EB67D2CA26F Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N Delete_history_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: *462366917EEDD1970A48E87D8EF59EB67D2CA26F password_expired: N is_role: N default_role: max_statement_time: 0.000000 1 row in set (0.002 sec) MariaDB [(none)]>
Nachfolgender Befehl beendet den MariaDB-Monitor:
MariaDB [(none)]> quit Bye
Erster Aufruf
Nachdem die Installation und eine gewisse Basis-Konfiguration abgeschlossen ist, kann nun der erste Aufruf mit nachfolgender URL erfolgen:
wodurch nachfolgender Bildschirm zur Anzeige kommen sollte, in dem die Anmeldedaten aus der Installation nun eingegeben werden müssen, um eine erfolgreiche Anmeldung durchzuführen:
Nachdem die Anmeldung erfolgreich durchgeführt wurde, solle nachfolgender Bildschirm erscheinen:
SSL-Client-Konfiguration
Zur Konfiguration der SSL-Client-Verschlüsselung, muss ein Client-Zertifikat, wie unter nachfolgenden internen Link beschrieben, erstellt worden sein:
Dazu kann mit nachfolgendem Befehl ein neues Verzeichnis erstellt werden:
# mkdir -pv /etc/webapps/phpmyadmin/ssl mkdir: created directory '/etc/webapps/phpmyadmin/ssl'
Nachfolgendes SSL-Client-Zertifikate und der dazugehörige Schlüssel und das dazugehörige ROOT-Zertifikat und mit dem dazugehörige Schlüssel können dann wie folgt mit nachfolgenden Befehlen kopiert werden:
# cp -a /etc/my.cnf.d/certificates/client*.pem /etc/webapps/phpmyadmin/ssl/ # cp -a /etc/my.cnf.d/certificates/ca*.pem /etc/webapps/phpmyadmin/ssl/
Anschliessend sind noch die Besitz-rechte wie folgt anzupassen, was mit nachfolgendem Befehl durchgeführt werden kann:
# chown -R http:http /etc/webapps/phpmyadmin/ssl
Damit die SSL-Client-Verschlüsselung genutzt werden kann, soll der unter dem Konfigurationsschritt
/etc/webapps/phpmyadmin/config.inc.php
Konfigurationsdatei, mit nachfolgendem Parametern erweitert werden:
Nachfolgend ist der relevante Ausschnitt der Konfigurationsdatei zu sehen. Die entsprechenden Änderungen sind mit dem vorangestellten Kommentar
// Tachtler
versehen:
//Tachtler - SSL - $cfg['Servers'][$i]['ssl'] = true; $cfg['Servers'][$i]['ssl_key'] = '/etc/webapps/phpmyadmin/ssl/client-key.pem'; $cfg['Servers'][$i]['ssl_cert'] = '/etc/webapps/phpmyadmin/ssl/client-crt.pem'; $cfg['Servers'][$i]['ssl_ca'] = '/etc/webapps/phpmyadmin/ssl/ca.pem'; $cfg['Servers'][$i]['ssl_ca_path'] = ''; $cfg['Servers'][$i]['ssl_ciphers'] = ''; $cfg['Servers'][$i]['control_ssl'] = true; $cfg['Servers'][$i]['control_ssl_key'] = '/etc/webapps/phpmyadmin/ssl/client-key.pem'; $cfg['Servers'][$i]['control_ssl_cert'] = '/etc/webapps/phpmyadmin/ssl/client-crt.pem'; $cfg['Servers'][$i]['control_ssl_ca'] = '/etc/webapps/phpmyadmin/ssl/ca.pem';
Erklärungen:
$cfg['Servers'][$i]['ssl'] = true;
Aktivierung von SSL für die Verbindung zwischen phpMyAdmin und dem MariaDB-Server aktiviert werden soll, um die Verbindung zu sichern.
$cfg['Servers'][$i]['ssl_key'] = '/etc/webapps/phpmyadmin/ssl/client-key.pem'; $cfg['Servers'][$i]['ssl_cert'] = '/etc/webapps/phpmyadmin/ssl/client-crt.pem'; $cfg['Servers'][$i]['ssl_ca'] = '/etc/webapps/phpmyadmin/ssl/ca.pem';
Angabe der Speicherorte für das ROOT-Zertifikat der ausstellenden CA und Angabe der eigentlichen Client-Zertifikats, sowie dem dazugehörigen Schlüssel des Client-Zertifikats.
$cfg['Servers'][$i]['ssl_ca_path'] = '';
Verzeichnis in dem vertrauenswürdige ROOT- Zertifikate abgelegt werden. Dieser Parameter wird hier leer gelassen, da die Angabe des ROOT-Zertifikats ausreichend ist.
$cfg['Servers'][$i]['ssl_ciphers'] = '';
Eine mögliche Liste kann mit nachfolgendem Befehl ausgegeben werden:
# /usr/bin/openssl ciphers -v
Das setzen von bestimmten Cipher-Suiten kann sinnvoll sein.
$cfg['Servers'][$i]['control_ssl'] = true;
Es können jede Verbindungseinstellung für den Control-Link (für den Zugriff auf den phpMyAdmin-Konfigurationsspeicher) eingestellt werden, indem diese Konfiguration mit dem Präfix control_
verwendet werden.
HINWEIS - Damit kann jeden Aspekt der Kontrollverbindung geändert werden, welche standardmässig dieselben Parameter wie die Benutzerverbindung verwendet!
$cfg['Servers'][$i]['control_ssl_key'] = '/etc/webapps/phpmyadmin/ssl/client-key.pem'; $cfg['Servers'][$i]['control_ssl_cert'] = '/etc/webapps/phpmyadmin/ssl/client-crt.pem'; $cfg['Servers'][$i]['control_ssl_ca'] = '/etc/webapps/phpmyadmin/ssl/ca.pem';
Angabe der Speicherorte für das ROOT-Zertifikat der ausstellenden CA und Angabe der eigentlichen Client-Zertifikats, sowie dem dazugehörigen Schlüssel des Client-Zertifikats, allerdings hier für die Verwendung für den Zugriff auf den phpMyAdmin-Konfigurationsspeicher.
Nachdem die Installation, die Basis-Konfiguration und die SSL-Client-Konfiguration abgeschlossen ist, kann nun der Aufruf mit SSL-Client-Verschlüsselung mit nachfolgender URL erfolgen:
wodurch nachfolgender Bildschirm nach der erfolgreichen Anmeldung zur Anzeige kommen sollte:
Remote-Zugriff
Falls eine Installation des MariaDB-Servers, wie unter nachfolgendem Link beschrieben durchgeführt wurde
und wie ebenfalls unter nachfolgendem Link, die Sicherheitskonfiguration durchgeführt wurde
ist eine Veränderung der Konfiguration des MariaDB-Datenbank-Servers zwingend erforderlich!
WICHTIG - Es geht um den Remote-Zugriff des Benutzer root, welcher nicht möglich ist, was zum tragen kommt, wenn der
- MariaDB-Servers
und
auf verschiedenen Servern installiert sind!
Folgende Schritte sind in diesem Fall durchzuführen:
- neuen Benutzer anlegen
- und dem neuen Benutzer alle Privilegien
- für einen Remote-Zugriff geben
Um ein Passwort im verschlüsselten Format für das Passwort-Feld der nachfolgenden SQL-Datei zu erstellen, kann nachfolgender Befehl genutzt werden.
WICHTIG - Es wird die Kenntnis des Passwortes für den Benutzer root
vorausgesetzt!.
# echo "SELECT PASSWORD('WasGeheimE\$');" | /usr/bin/mariadb -h localhost -u root PASSWORD('WasGeheimE$') *B9596CB634890F968047EA3169AD688A0E2682FD
HINWEIS - Falls sich Sonderzeichen im Passwort befinden sollten, müssen diese maskiert werden
# echo "SELECT PASSWORD('WasGeheimE\$');" | /usr/bin/mariadb -h localhost -u root PASSWORD('WasGeheimE$') *B9596CB634890F968047EA3169AD688A0E2682FD
Mit nachfolgendem Befehl soll nun eine SQL-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.
SQL-Datei | Verwendungszweck |
---|---|
/tmp/create_users_for_remote_access.sql | Erstellung eines Remote-Benutzers |
# touch /tmp/create_users_for_remote_access.sql
Die SQL-Datei /tmp/create_users_for_remote_access.sql
soll nachfolgenden Inhalt bekommen:
-- MariaDB-SQL-Script. -- Create users for remote access. -- (c) Klaus Tachtler 2023. -- # /usr/bin/mysql -u root < <script.sql> -- $ /usr/bin/mysql -u root -p < <script.sql> -- Use database. USE mysql; -- Create new users. CREATE USER 'admin'@'192.168.0.110' IDENTIFIED BY PASSWORD '*B9596CB634890F968047EA3169AD688A0E2682FD'; CREATE USER 'admin'@'server110.idmz.tachtler.net' IDENTIFIED BY PASSWORD '*B9596CB634890F968047EA3169AD688A0E2682FD'; -- Grant ALL privileges to new users. GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.0.110' IDENTIFIED BY PASSWORD '*B9596CB634890F968047EA3169AD688A0E2682FD' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'server110.idmz.tachtler.net' IDENTIFIED BY PASSWORD '*B9596CB634890F968047EA3169AD688A0E2682FD' WITH GRANT OPTION; -- Make sure that priviliges are reloaded. FLUSH PRIVILEGES;
Abschliessend wird mit nachfolgendem Befehl der Inhalt der SQL-Datei im laufendem Betrieb des MariaDB-Datenbank-Servers der Konfiguration des MariaDB-Datenbank-Servers hinzugefügt:
# /usr/bin/mariadb -u root < /tmp/create_users_for_remote_access.sql
Mit nachfolgenden Befehlen kann nun überprüft werden, ob die vorhergehenden Schritte zur Einrichtung eines Remote-Benutzers erfolgreich waren.
Nachfolgender Befehl ermöglicht die Anmeldung am MariaDB-Monitor:
# /usr/bin/mariadb -h localhost -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 11.1.2-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Nachfolgender Befehl listet den angelegten Remote-Benutzer mit allen Details auf:
MariaDB [(none)]> SELECT * FROM mysql.user WHERE User = 'admin'; +-----------------------------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ | Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | is_role | default_role | max_statement_time | +-----------------------------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ | 192.168.0.110 | admin | *B9596CB634890F968047EA3169AD688A0E2682FD | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | *B9596CB634890F968047EA3169AD688A0E2682FD | N | N | | 0.000000 | | server110.idmz.tachtler.net | admin | *B9596CB634890F968047EA3169AD688A0E2682FD | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | *B9596CB634890F968047EA3169AD688A0E2682FD | N | N | | 0.000000 | +-----------------------------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-------------------------------------------+------------------+---------+--------------+--------------------+ 2 rows in set (0.006 sec) MariaDB [(none)]>
Nachfolgender Befehl beendet den MariaDB-Monitor:
MariaDB [(none)]> quit Bye