You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1166 lines
42 KiB
1166 lines
42 KiB
.. _setup: |
|
|
|
Installation |
|
============ |
|
|
|
phpMyAdmin does not apply any special security methods to the MySQL |
|
database server. It is still the system administrator's job to grant |
|
permissions on the MySQL databases properly. phpMyAdmin's :guilabel:`Users` |
|
page can be used for this. |
|
|
|
Linux distributions |
|
+++++++++++++++++++ |
|
|
|
phpMyAdmin is included in most Linux distributions. It is recommended to use |
|
distribution packages when possible - they usually provide integration to your |
|
distribution and you will automatically get security updates from your distribution. |
|
|
|
.. _debian-package: |
|
|
|
Debian and 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: |
|
|
|
* Configuration of a web server (works for Apache and lighttpd). |
|
* Creating of :ref:`linked-tables` using dbconfig-common. |
|
* Securing setup script, see :ref:`debian-setup`. |
|
|
|
More specific details about installing Debian or Ubuntu packages are available |
|
`in our wiki <https://github.com/phpmyadmin/phpmyadmin/wiki/DebianUbuntu>`_. |
|
|
|
.. seealso:: |
|
|
|
More information can be found in `README.Debian <https://salsa.debian.org/phpmyadmin-team/phpmyadmin/blob/debian/latest/debian/README.Debian>`_ |
|
(it is installed as :file:`/usr/share/doc/phpmyadmin/README.Debian` with the package). |
|
|
|
OpenSUSE |
|
-------- |
|
|
|
OpenSUSE already comes with phpMyAdmin package, just install packages from |
|
the `openSUSE Build Service <https://software.opensuse.org/package/phpMyAdmin>`_. |
|
|
|
Gentoo |
|
------ |
|
|
|
Gentoo ships the phpMyAdmin package, both in a near-stock configuration as well |
|
as in a ``webapp-config`` configuration. Use ``emerge dev-db/phpmyadmin`` to |
|
install. |
|
|
|
Mandriva |
|
-------- |
|
|
|
Mandriva ships the phpMyAdmin package in their ``contrib`` branch and can be |
|
installed via the usual Control Center. |
|
|
|
Fedora |
|
------ |
|
|
|
Fedora ships the 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. |
|
|
|
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) <https://fedoraproject.org/wiki/EPEL>`_ |
|
is doing so, if it's |
|
`enabled <https://fedoraproject.org/wiki/EPEL/FAQ#howtouse>`_. |
|
But be aware that the configuration file is maintained in |
|
``/etc/phpMyAdmin/`` and may differ in some ways from the |
|
official phpMyAdmin documentation. |
|
|
|
Installing on Windows |
|
+++++++++++++++++++++ |
|
|
|
The easiest way to get phpMyAdmin on Windows is using third party products |
|
which include phpMyAdmin together with a database and web server such as |
|
`XAMPP <https://www.apachefriends.org/index.html>`_. |
|
|
|
You can find more of such options at `Wikipedia <https://en.wikipedia.org/wiki/List_of_AMP_packages>`_. |
|
|
|
Installing from Git |
|
+++++++++++++++++++ |
|
|
|
In order to install from Git, you'll need a few supporting applications: |
|
|
|
* `Git <https://git-scm.com/downloads>`_ to download the source, or you can download the most recent source directly from `Github <https://codeload.github.com/phpmyadmin/phpmyadmin/zip/master>`_ |
|
* `Composer <https://getcomposer.org/download/>`__ |
|
* `Node.js <https://nodejs.org/en/download/>`_ (version 10 or higher) |
|
* `Yarn <https://classic.yarnpkg.com/en/docs/install>`_ |
|
|
|
You can clone current phpMyAdmin source from |
|
``https://github.com/phpmyadmin/phpmyadmin.git``: |
|
|
|
.. code-block:: sh |
|
|
|
git clone https://github.com/phpmyadmin/phpmyadmin.git |
|
|
|
Additionally you need to install dependencies using `Composer <https://getcomposer.org>`__: |
|
|
|
.. code-block:: sh |
|
|
|
composer update |
|
|
|
If you do not intend to develop, you can skip the installation of developer tools |
|
by invoking: |
|
|
|
.. code-block:: sh |
|
|
|
composer update --no-dev |
|
|
|
Finally, you'll need to use `Yarn`_ to install some JavaScript dependencies: |
|
|
|
.. code-block:: sh |
|
|
|
yarn install --production |
|
|
|
.. _composer: |
|
|
|
Installing using Composer |
|
+++++++++++++++++++++++++ |
|
|
|
You can install phpMyAdmin using the `Composer tool`_, since 4.7.0 the releases |
|
are automatically mirrored to the default `Packagist`_ repository. |
|
|
|
.. note:: |
|
|
|
The content of the Composer repository is automatically generated |
|
separately from the releases, so the content doesn't have to be |
|
100% same as when you download the tarball. There should be no |
|
functional differences though. |
|
|
|
To install phpMyAdmin simply run: |
|
|
|
.. code-block:: sh |
|
|
|
composer create-project phpmyadmin/phpmyadmin |
|
|
|
Alternatively you can use our own composer repository, which contains |
|
the release tarballs and is available at |
|
<https://www.phpmyadmin.net/packages.json>: |
|
|
|
.. code-block:: sh |
|
|
|
composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev |
|
|
|
.. _docker: |
|
|
|
Installing using Docker |
|
+++++++++++++++++++++++ |
|
|
|
phpMyAdmin comes with a `Docker official image`_, which you can easily deploy. You can |
|
download it using: |
|
|
|
.. code-block:: sh |
|
|
|
docker pull phpmyadmin |
|
|
|
The phpMyAdmin server will listen on port 80. It supports several ways of |
|
configuring the link to the database server, either by Docker's link feature |
|
by linking your database container to ``db`` for phpMyAdmin (by specifying |
|
``--link your_db_host:db``) or by environment variables (in this case it's up |
|
to you to set up networking in Docker to allow the phpMyAdmin container to access |
|
the database container over the network). |
|
|
|
.. _docker-vars: |
|
|
|
Docker environment variables |
|
---------------------------- |
|
|
|
You can configure several phpMyAdmin features using environment variables: |
|
|
|
.. envvar:: PMA_ARBITRARY |
|
|
|
Allows you to enter a database server hostname on login form. |
|
|
|
.. seealso:: :config:option:`$cfg['AllowArbitraryServer']` |
|
|
|
.. envvar:: PMA_HOST |
|
|
|
Hostname or IP address of the database server to use. |
|
|
|
.. seealso:: :config:option:`$cfg['Servers'][$i]['host']` |
|
|
|
.. envvar:: PMA_HOSTS |
|
|
|
Comma-separated hostnames or IP addresses of the database servers to use. |
|
|
|
.. note:: Used only if :envvar:`PMA_HOST` is empty. |
|
|
|
.. envvar:: PMA_VERBOSE |
|
|
|
Verbose name of the database server. |
|
|
|
.. seealso:: :config:option:`$cfg['Servers'][$i]['verbose']` |
|
|
|
.. envvar:: PMA_VERBOSES |
|
|
|
Comma-separated verbose name of the database servers. |
|
|
|
.. note:: Used only if :envvar:`PMA_VERBOSE` is empty. |
|
|
|
.. envvar:: PMA_USER |
|
|
|
User name to use for :ref:`auth_config`. |
|
|
|
.. envvar:: PMA_PASSWORD |
|
|
|
Password to use for :ref:`auth_config`. |
|
|
|
.. envvar:: PMA_PORT |
|
|
|
Port of the database server to use. |
|
|
|
.. envvar:: PMA_PORTS |
|
|
|
Comma-separated ports of the database server to use. |
|
|
|
.. note:: Used only if :envvar:`PMA_PORT` is empty. |
|
|
|
.. envvar:: PMA_ABSOLUTE_URI |
|
|
|
The fully-qualified path (``https://pma.example.net/``) where the reverse |
|
proxy makes phpMyAdmin available. |
|
|
|
.. seealso:: :config:option:`$cfg['PmaAbsoluteUri']` |
|
|
|
.. envvar:: HIDE_PHP_VERSION |
|
|
|
If defined, this option will hide the PHP version (`expose_php = Off`). |
|
Set to any value (such as `HIDE_PHP_VERSION=true`). |
|
|
|
.. envvar:: UPLOAD_LIMIT |
|
|
|
If set, this option will override the default value for apache and php-fpm (this will change ``upload_max_filesize`` and ``post_max_size`` values). |
|
|
|
.. note:: Format as `[0-9+](K,M,G)` default value is `2048K` |
|
|
|
.. envvar:: PMA_CONFIG_BASE64 |
|
|
|
If set, this option will override the default `config.inc.php` with the base64 decoded contents of the variable. |
|
|
|
.. envvar:: PMA_USER_CONFIG_BASE64 |
|
|
|
If set, this option will override the default `config.user.inc.php` with the base64 decoded contents of the variable. |
|
|
|
|
|
By default, :ref:`cookie` is used, but if :envvar:`PMA_USER` and |
|
:envvar:`PMA_PASSWORD` are set, it is switched to :ref:`auth_config`. |
|
|
|
.. note:: |
|
|
|
The credentials you need to log in are stored in the MySQL server, in case |
|
of Docker image, there are various ways to set it (for example |
|
:samp:`MYSQL_ROOT_PASSWORD` when starting the MySQL container). Please check |
|
documentation for `MariaDB container <https://hub.docker.com/_/mariadb>`_ |
|
or `MySQL container <https://hub.docker.com/_/mysql>`_. |
|
|
|
.. _docker-custom: |
|
|
|
Customizing configuration |
|
------------------------- |
|
|
|
Additionally configuration can be tweaked by :file:`/etc/phpmyadmin/config.user.inc.php`. If |
|
this file exists, it will be loaded after configuration is generated from above |
|
environment variables, so you can override any configuration variable. This |
|
configuration can be added as a volume when invoking docker using |
|
`-v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php` parameters. |
|
|
|
Note that the supplied configuration file is applied after :ref:`docker-vars`, |
|
but you can override any of the values. |
|
|
|
For example to change the default behavior of CSV export you can use the following |
|
configuration file: |
|
|
|
.. code-block:: php |
|
|
|
<?php |
|
$cfg['Export']['csv_columns'] = true; |
|
|
|
You can also use it to define server configuration instead of using the |
|
environment variables listed in :ref:`docker-vars`: |
|
|
|
.. code-block:: php |
|
|
|
<?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', |
|
], |
|
]; |
|
|
|
.. seealso:: |
|
|
|
See :ref:`config` for detailed description of configuration options. |
|
|
|
Docker Volumes |
|
-------------- |
|
|
|
You can use the following volumes to customize image behavior: |
|
|
|
:file:`/etc/phpmyadmin/config.user.inc.php` |
|
|
|
Can be used for additional settings, see the previous chapter for more details. |
|
|
|
:file:`/sessions/` |
|
|
|
Directory where PHP sessions are stored. You might want to share this |
|
for example when using :ref:`auth_signon`. |
|
|
|
:file:`/www/themes/` |
|
|
|
Directory where phpMyAdmin looks for themes. By default only those shipped |
|
with phpMyAdmin are included, but you can include additional phpMyAdmin |
|
themes (see :ref:`themes`) by using Docker volumes. |
|
|
|
Docker Examples |
|
--------------- |
|
|
|
To connect phpMyAdmin to a given server use: |
|
|
|
.. code-block:: sh |
|
|
|
docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin |
|
|
|
To connect phpMyAdmin to more servers use: |
|
|
|
.. code-block:: sh |
|
|
|
docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin |
|
|
|
To use arbitrary server option: |
|
|
|
.. code-block:: sh |
|
|
|
docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin |
|
|
|
You can also link the database container using Docker: |
|
|
|
.. code-block:: sh |
|
|
|
docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin |
|
|
|
Running with additional configuration: |
|
|
|
.. code-block:: sh |
|
|
|
docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin/phpmyadmin |
|
|
|
Running with additional themes: |
|
|
|
.. code-block:: sh |
|
|
|
docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin |
|
|
|
Using docker-compose |
|
-------------------- |
|
|
|
Alternatively, you can also use docker-compose with the docker-compose.yml from |
|
<https://github.com/phpmyadmin/docker>. This will run phpMyAdmin with an |
|
arbitrary server - allowing you to specify MySQL/MariaDB server on the login page. |
|
|
|
.. code-block:: sh |
|
|
|
docker-compose up -d |
|
|
|
Customizing configuration file using docker-compose |
|
--------------------------------------------------- |
|
|
|
You can use an external file to customize phpMyAdmin configuration and pass it |
|
using the volumes directive: |
|
|
|
.. code-block:: yaml |
|
|
|
phpmyadmin: |
|
image: phpmyadmin/phpmyadmin |
|
container_name: phpmyadmin |
|
environment: |
|
- PMA_ARBITRARY=1 |
|
restart: always |
|
ports: |
|
- 8080:80 |
|
volumes: |
|
- /sessions |
|
- ~/docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php |
|
- /custom/phpmyadmin/theme/:/www/themes/theme/ |
|
|
|
.. seealso:: :ref:`docker-custom` |
|
|
|
Running behind haproxy in a subdirectory |
|
---------------------------------------- |
|
|
|
When you want to expose phpMyAdmin running in a Docker container in a |
|
subdirectory, you need to rewrite the request path in the server proxying the |
|
requests. |
|
|
|
For example, using haproxy it can be done as: |
|
|
|
.. code-block:: text |
|
|
|
frontend http |
|
bind *:80 |
|
option forwardfor |
|
option http-server-close |
|
|
|
### NETWORK restriction |
|
acl LOCALNET src 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 |
|
|
|
# /phpmyadmin |
|
acl phpmyadmin path_dir /phpmyadmin |
|
use_backend phpmyadmin if phpmyadmin LOCALNET |
|
|
|
backend phpmyadmin |
|
mode http |
|
|
|
reqirep ^(GET|POST|HEAD)\ /phpmyadmin/(.*) \1\ /\2 |
|
|
|
# phpMyAdmin container IP |
|
server localhost 172.30.21.21:80 |
|
|
|
When using traefik, something like following should work: |
|
|
|
.. code-block:: text |
|
|
|
defaultEntryPoints = ["http"] |
|
[entryPoints] |
|
[entryPoints.http] |
|
address = ":80" |
|
[entryPoints.http.redirect] |
|
regex = "(http:\\/\\/[^\\/]+\\/([^\\?\\.]+)[^\\/])$" |
|
replacement = "$1/" |
|
|
|
[backends] |
|
[backends.myadmin] |
|
[backends.myadmin.servers.myadmin] |
|
url="http://internal.address.to.pma" |
|
|
|
[frontends] |
|
[frontends.myadmin] |
|
backend = "myadmin" |
|
passHostHeader = true |
|
[frontends.myadmin.routes.default] |
|
rule="PathPrefixStrip:/phpmyadmin/;AddPrefix:/" |
|
|
|
You then should specify :envvar:`PMA_ABSOLUTE_URI` in the docker-compose |
|
configuration: |
|
|
|
.. code-block:: yaml |
|
|
|
version: '2' |
|
|
|
services: |
|
phpmyadmin: |
|
restart: always |
|
image: phpmyadmin/phpmyadmin |
|
container_name: phpmyadmin |
|
hostname: phpmyadmin |
|
domainname: example.com |
|
ports: |
|
- 8000:80 |
|
environment: |
|
- PMA_HOSTS=172.26.36.7,172.26.36.8,172.26.36.9,172.26.36.10 |
|
- PMA_VERBOSES=production-db1,production-db2,dev-db1,dev-db2 |
|
- PMA_USER=root |
|
- PMA_PASSWORD= |
|
- PMA_ABSOLUTE_URI=http://example.com/phpmyadmin/ |
|
|
|
IBM Cloud |
|
+++++++++ |
|
|
|
One of our users has created a helpful guide for installing phpMyAdmin on the |
|
`IBM Cloud platform <https://github.com/KissConsult/phpmyadmin_tutorial#readme>`_. |
|
|
|
.. _quick_install: |
|
|
|
Quick Install |
|
+++++++++++++ |
|
|
|
#. Choose an appropriate distribution kit from the phpmyadmin.net |
|
Downloads page. Some kits contain only the English messages, others |
|
contain all languages. We'll assume you chose a kit whose name |
|
looks like ``phpMyAdmin-x.x.x -all-languages.tar.gz``. |
|
#. Ensure you have downloaded a genuine archive, see :ref:`verify`. |
|
#. Untar or unzip the distribution (be sure to unzip the subdirectories): |
|
``tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz`` in your |
|
webserver's document root. If you don't have direct access to your |
|
document root, put the files in a directory on your local machine, |
|
and, after step 4, transfer the directory on your web server using, |
|
for example, FTP. |
|
#. Ensure that all the scripts have the appropriate owner (if PHP is |
|
running in safe mode, having some scripts with an owner different from |
|
the owner of other scripts will be a problem). See :ref:`faq4_2` and |
|
:ref:`faq1_26` for suggestions. |
|
#. Now you must configure your installation. There are two methods that |
|
can be used. Traditionally, users have hand-edited a copy of |
|
:file:`config.inc.php`, but now a wizard-style setup script is provided |
|
for those who prefer a graphical installation. Creating a |
|
:file:`config.inc.php` is still a quick way to get started and needed for |
|
some advanced features. |
|
|
|
Manually creating the file |
|
-------------------------- |
|
|
|
To manually create the file, simply use your text editor to create the |
|
file :file:`config.inc.php` (you can copy :file:`config.sample.inc.php` to get |
|
a minimal configuration file) in the main (top-level) phpMyAdmin |
|
directory (the one that contains :file:`index.php`). phpMyAdmin first |
|
loads the default configuration values and then overrides those values |
|
with anything found in :file:`config.inc.php`. If the default value is |
|
okay for a particular setting, there is no need to include it in |
|
:file:`config.inc.php`. You'll probably need only a few directives to get going; a |
|
simple configuration may look like this: |
|
|
|
.. code-block:: xml+php |
|
|
|
<?php |
|
// use here a value of your choice at least 32 chars long |
|
$cfg['blowfish_secret'] = '1{dd0`<Q),5XP_:R9UK%%8\"EEcyH#{o'; |
|
|
|
$i=0; |
|
$i++; |
|
$cfg['Servers'][$i]['auth_type'] = 'cookie'; |
|
// if you insist on "root" having no password: |
|
// $cfg['Servers'][$i]['AllowNoPassword'] = true; |
|
|
|
Or, if you prefer to not be prompted every time you log in: |
|
|
|
.. code-block:: xml+php |
|
|
|
<?php |
|
|
|
$i=0; |
|
$i++; |
|
$cfg['Servers'][$i]['user'] = 'root'; |
|
$cfg['Servers'][$i]['password'] = 'changeme'; // use here your password |
|
$cfg['Servers'][$i]['auth_type'] = 'config'; |
|
|
|
.. warning:: |
|
|
|
Storing passwords in the configuration is insecure as anybody can then |
|
manipulate your database. |
|
|
|
For a full explanation of possible configuration values, see the |
|
:ref:`config` of this document. |
|
|
|
.. index:: Setup script |
|
|
|
.. _setup_script: |
|
|
|
Using the Setup script |
|
---------------------- |
|
|
|
Instead of manually editing :file:`config.inc.php`, you can use phpMyAdmin's |
|
setup feature. The file can be generated using the setup and you can download it |
|
for upload to the server. |
|
|
|
Next, open your browser and visit the location where you installed phpMyAdmin, |
|
with the ``/setup`` suffix. The changes are not saved to the server, you need to |
|
use the :guilabel:`Download` button to save them to your computer and then upload |
|
to the server. |
|
|
|
Now the file is ready to be used. You can choose to review or edit the |
|
file with your favorite editor, if you prefer to set some advanced |
|
options that the setup script does not provide. |
|
|
|
#. If you are using the ``auth_type`` "config", it is suggested that you |
|
protect the phpMyAdmin installation directory because using config |
|
does not require a user to enter a password to access the phpMyAdmin |
|
installation. Use of an alternate authentication method is |
|
recommended, for example with HTTP–AUTH in a :term:`.htaccess` file or switch to using |
|
``auth_type`` cookie or http. See the :ref:`faqmultiuser` |
|
for additional information, especially :ref:`faq4_4`. |
|
#. Open the main phpMyAdmin directory in your browser. |
|
phpMyAdmin should now display a welcome screen and your databases, or |
|
a login dialog if using :term:`HTTP` or |
|
cookie authentication mode. |
|
|
|
.. _debian-setup: |
|
|
|
Setup script on Debian, Ubuntu and derivatives |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Debian and Ubuntu have changed the way in which the setup script is enabled and disabled, in a way |
|
that single command has to be executed for either of these. |
|
|
|
To allow editing configuration invoke: |
|
|
|
.. code-block:: sh |
|
|
|
/usr/sbin/pma-configure |
|
|
|
To block editing configuration invoke: |
|
|
|
.. code-block:: sh |
|
|
|
/usr/sbin/pma-secure |
|
|
|
Setup script on openSUSE |
|
~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Some openSUSE releases do not include setup script in the package. In case you |
|
want to generate configuration on these you can either download original |
|
package from <https://www.phpmyadmin.net/> or use setup script on our demo |
|
server: <https://demo.phpmyadmin.net/master/setup/>. |
|
|
|
.. _verify: |
|
|
|
Verifying phpMyAdmin releases |
|
+++++++++++++++++++++++++++++ |
|
|
|
Since July 2015 all phpMyAdmin releases are cryptographically signed by the |
|
releasing developer, who through January 2016 was Marc Delisle. His key id is |
|
0xFEFC65D181AF644A, his PGP fingerprint is: |
|
|
|
.. code-block:: console |
|
|
|
436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A |
|
|
|
and you can get more identification information from <https://keybase.io/lem9>. |
|
|
|
Beginning in January 2016, the release manager is Isaac Bennetch. His key id is |
|
0xCE752F178259BD92, and his PGP fingerprint is: |
|
|
|
.. code-block:: console |
|
|
|
3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 |
|
|
|
and you can get more identification information from <https://keybase.io/ibennetch>. |
|
|
|
Some additional downloads (for example themes) might be signed by Michal Čihař. His key id is |
|
0x9C27B31342B7511D, and his PGP fingerprint is: |
|
|
|
.. code-block:: console |
|
|
|
63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D |
|
|
|
and you can get more identification information from <https://keybase.io/nijel>. |
|
|
|
You should verify that the signature matches the archive you have downloaded. |
|
This way you can be sure that you are using the same code that was released. |
|
You should also verify the date of the signature to make sure that you |
|
downloaded the latest version. |
|
|
|
Each archive is accompanied by ``.asc`` files which contain the PGP signature |
|
for it. Once you have both of them in the same folder, you can verify the signature: |
|
|
|
.. code-block:: console |
|
|
|
$ 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 |
|
|
|
As you can see gpg complains that it does not know the public key. At this |
|
point, you should do one of the following steps: |
|
|
|
* Download the keyring from `our download server <https://files.phpmyadmin.net/phpmyadmin.keyring>`_, then import it with: |
|
|
|
.. code-block:: console |
|
|
|
$ gpg --import phpmyadmin.keyring |
|
|
|
* Download and import the key from one of the key servers: |
|
|
|
.. code-block:: console |
|
|
|
$ 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) |
|
|
|
This will improve the situation a bit - at this point, you can verify that the |
|
signature from the given key is correct but you still can not trust the name used |
|
in the key: |
|
|
|
.. code-block:: console |
|
|
|
$ 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. |
|
|
|
Once the key is trusted, the warning will not occur: |
|
|
|
.. code-block:: console |
|
|
|
$ 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] |
|
|
|
Should the signature be invalid (the archive has been changed), you would get a |
|
clear error regardless of the fact that the key is trusted or not: |
|
|
|
.. code-block:: console |
|
|
|
$ 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] |
|
|
|
.. _Validating other keys on your public keyring: https://www.gnupg.org/gph/en/manual.html#AEN335 |
|
|
|
.. index:: |
|
single: Configuration storage |
|
single: phpMyAdmin configuration storage |
|
single: pmadb |
|
|
|
.. _linked-tables: |
|
|
|
phpMyAdmin configuration storage |
|
++++++++++++++++++++++++++++++++ |
|
|
|
.. versionchanged:: 3.4.0 |
|
|
|
Prior to phpMyAdmin 3.4.0 this was called Linked Tables Infrastructure, but |
|
the name was changed due to the extended scope of the storage. |
|
|
|
For a whole set of additional features (:ref:`bookmarks`, comments, :term:`SQL`-history, |
|
tracking mechanism, :term:`PDF`-generation, :ref:`transformations`, :ref:`relations` |
|
etc.) you need to create a set of special tables. Those tables can be located |
|
in your own database, or in a central database for a multi-user installation |
|
(this database would then be accessed by the controluser, so no other user |
|
should have rights to it). |
|
|
|
.. _zeroconf: |
|
|
|
Zero configuration |
|
------------------ |
|
|
|
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 :config:option:`$cfg['ZeroConf']` to false. |
|
|
|
The following three scenarios are covered by the Zero Configuration mode: |
|
|
|
* When entering a database where the configuration storage tables are not |
|
present, phpMyAdmin offers to create them from the Operations tab. |
|
* When entering a database where the tables do already exist, the software |
|
automatically detects this and begins using them. This is the most common |
|
situation; after the tables are initially created automatically they are |
|
continually used without disturbing the user; this is also most useful on |
|
shared hosting where the user is not able to edit :file:`config.inc.php` and |
|
usually the user only has access to one database. |
|
* When having access to multiple databases, if the user first enters the |
|
database containing the configuration storage tables then switches to |
|
another database, |
|
phpMyAdmin continues to use the tables from the first database; the user is |
|
not prompted to create more tables in the new database. |
|
|
|
Manual configuration |
|
-------------------- |
|
|
|
Please look at your ``./sql/`` directory, where you should find a |
|
file called *create\_tables.sql*. (If you are using a Windows server, |
|
pay special attention to :ref:`faq1_23`). |
|
|
|
If you already had this infrastructure and: |
|
|
|
* upgraded to MySQL 4.1.2 or newer, please use |
|
:file:`sql/upgrade_tables_mysql_4_1_2+.sql`. |
|
* upgraded to phpMyAdmin 4.3.0 or newer from 2.5.0 or newer (<= 4.2.x), |
|
please use :file:`sql/upgrade_column_info_4_3_0+.sql`. |
|
* upgraded to phpMyAdmin 4.7.0 or newer from 4.3.0 or newer, |
|
please use :file:`sql/upgrade_tables_4_7_0+.sql`. |
|
|
|
and then create new tables by importing :file:`sql/create_tables.sql`. |
|
|
|
You can use your phpMyAdmin to create the tables for you. Please be |
|
aware that you may need special (administrator) privileges to create |
|
the database and tables, and that the script may need some tuning, |
|
depending on the database name. |
|
|
|
After having imported the :file:`sql/create_tables.sql` file, you |
|
should specify the table names in your :file:`config.inc.php` file. The |
|
directives used for that can be found in the :ref:`config`. |
|
|
|
You will also need to have a controluser |
|
(:config:option:`$cfg['Servers'][$i]['controluser']` and |
|
:config:option:`$cfg['Servers'][$i]['controlpass']` settings) |
|
with the proper rights to those tables. For example you can create it |
|
using following statement: |
|
|
|
And for any MariaDB version: |
|
|
|
.. code-block:: mysql |
|
|
|
CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass'; |
|
GRANT SELECT, INSERT, UPDATE, DELETE ON `<pma_db>`.* TO 'pma'@'localhost'; |
|
|
|
For MySQL 8.0 and newer: |
|
|
|
.. code-block:: mysql |
|
|
|
CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass'; |
|
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost'; |
|
|
|
For MySQL older than 8.0: |
|
|
|
.. code-block:: mysql |
|
|
|
CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass'; |
|
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost'; |
|
|
|
Note that MySQL installations with PHP older than 7.4 and MySQL newer than 8.0 may require |
|
using the mysql_native_password authentication as a workaround, see |
|
:ref:`faq1_45` for details. |
|
|
|
.. _upgrading: |
|
|
|
Upgrading from an older version |
|
+++++++++++++++++++++++++++++++ |
|
|
|
.. warning:: |
|
|
|
**Never** extract the new version over an existing installation of |
|
phpMyAdmin, always first remove the old files keeping just the |
|
configuration. |
|
|
|
This way, you will not leave any old or outdated files in the directory, |
|
which can have severe security implications or can cause various breakages. |
|
|
|
Simply copy :file:`config.inc.php` from your previous installation into |
|
the newly unpacked one. Configuration files from old versions may |
|
require some tweaking as some options have been changed or removed. |
|
For compatibility with PHP 5.3 and later, remove a |
|
``set_magic_quotes_runtime(0);`` statement that you might find near |
|
the end of your configuration file. |
|
|
|
The complete upgrade can be performed in a few simple steps: |
|
|
|
1. Download the latest phpMyAdmin version from <https://www.phpmyadmin.net/downloads/>. |
|
2. Rename existing phpMyAdmin folder (for example to ``phpmyadmin-old``). |
|
3. Unpack freshly downloaded phpMyAdmin to the desired location (for example ``phpmyadmin``). |
|
4. Copy :file:`config.inc.php`` from old location (``phpmyadmin-old``) to the new one (``phpmyadmin``). |
|
5. Test that everything works properly. |
|
6. Remove backup of a previous version (``phpmyadmin-old``). |
|
|
|
If you have upgraded your MySQL server from a version previous to 4.1.2 to |
|
version 5.x or newer and if you use the phpMyAdmin configuration storage, you |
|
should run the :term:`SQL` script found in |
|
:file:`sql/upgrade_tables_mysql_4_1_2+.sql`. |
|
|
|
If you have upgraded your phpMyAdmin to 4.3.0 or newer from 2.5.0 or |
|
newer (<= 4.2.x) and if you use the phpMyAdmin configuration storage, you |
|
should run the :term:`SQL` script found in |
|
:file:`sql/upgrade_column_info_4_3_0+.sql`. |
|
|
|
Do not forget to clear the browser cache and to empty the old session by |
|
logging out and logging in again. |
|
|
|
.. index:: Authentication mode |
|
|
|
.. _authentication_modes: |
|
|
|
Using authentication modes |
|
++++++++++++++++++++++++++ |
|
|
|
:term:`HTTP` and cookie authentication modes are recommended in a **multi-user |
|
environment** where you want to give users access to their own database and |
|
don't want them to play around with others. Nevertheless, be aware that MS |
|
Internet Explorer seems to be really buggy about cookies, at least till version |
|
6. Even in a **single-user environment**, you might prefer to use :term:`HTTP` |
|
or cookie mode so that your user/password pair are not in clear in the |
|
configuration file. |
|
|
|
:term:`HTTP` and cookie authentication |
|
modes are more secure: the MySQL login information does not need to be |
|
set in the phpMyAdmin configuration file (except possibly for the |
|
:config:option:`$cfg['Servers'][$i]['controluser']`). |
|
However, keep in mind that the password travels in plain text unless |
|
you are using the HTTPS protocol. In cookie mode, the password is |
|
stored, encrypted with the AES algorithm, in a temporary cookie. |
|
|
|
Then each of the *true* users should be granted a set of privileges |
|
on a set of particular databases. Normally you shouldn't give global |
|
privileges to an ordinary user unless you understand the impact of those |
|
privileges (for example, you are creating a superuser). |
|
For example, to grant the user *real_user* with all privileges on |
|
the database *user_base*: |
|
|
|
.. code-block:: mysql |
|
|
|
GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password'; |
|
|
|
What the user may now do is controlled entirely by the MySQL user management |
|
system. With HTTP or cookie authentication mode, you don't need to fill the |
|
user/password fields inside the :config:option:`$cfg['Servers']`. |
|
|
|
.. seealso:: |
|
|
|
:ref:`faq1_32`, |
|
:ref:`faq1_35`, |
|
:ref:`faq4_1`, |
|
:ref:`faq4_2`, |
|
:ref:`faq4_3` |
|
|
|
.. index:: pair: HTTP; Authentication mode |
|
|
|
.. _auth_http: |
|
|
|
HTTP authentication mode |
|
------------------------ |
|
|
|
* Uses :term:`HTTP` Basic authentication |
|
method and allows you to log in as any valid MySQL user. |
|
* Is supported with most PHP configurations. For :term:`IIS` (:term:`ISAPI`) |
|
support using :term:`CGI` PHP see :ref:`faq1_32`, for using with Apache |
|
:term:`CGI` see :ref:`faq1_35`. |
|
* When PHP is running under Apache's :term:`mod_proxy_fcgi` (e.g. with PHP-FPM), |
|
``Authorization`` headers are not passed to the underlying FCGI application, |
|
such that your credentials will not reach the application. In this case, you can |
|
add the following configuration directive: |
|
|
|
.. code-block:: apache |
|
|
|
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 |
|
|
|
* See also :ref:`faq4_4` about not using the :term:`.htaccess` mechanism along with |
|
':term:`HTTP`' authentication mode. |
|
|
|
.. note:: |
|
|
|
There is no way to do proper logout in HTTP authentication, most browsers |
|
will remember credentials until there is no different successful |
|
authentication. Because of this, this method has a limitation that you can not |
|
login with the same user after logout. |
|
|
|
.. index:: pair: Cookie; Authentication mode |
|
|
|
.. _cookie: |
|
|
|
Cookie authentication mode |
|
-------------------------- |
|
|
|
* Username and password are stored in cookies during the session and password |
|
is deleted when it ends. |
|
* With this mode, the user can truly log out of phpMyAdmin and log |
|
back in with the same username (this is not possible with :ref:`auth_http`). |
|
* If you want to allow users to enter any hostname to connect (rather than only |
|
servers that are configured in :file:`config.inc.php`), |
|
see the :config:option:`$cfg['AllowArbitraryServer']` directive. |
|
* As mentioned in the :ref:`require` section, having the ``openssl`` extension |
|
will speed up access considerably, but is not required. |
|
|
|
.. index:: pair: Signon; Authentication mode |
|
|
|
.. _auth_signon: |
|
|
|
Signon authentication mode |
|
-------------------------- |
|
|
|
* This mode is a convenient way of using credentials from another |
|
application to authenticate to phpMyAdmin to implement a single signon |
|
solution. |
|
* The other application has to store login information into session |
|
data (see :config:option:`$cfg['Servers'][$i]['SignonSession']` and |
|
:config:option:`$cfg['Servers'][$i]['SignonCookieParams']`) or you |
|
need to implement script to return the credentials (see |
|
:config:option:`$cfg['Servers'][$i]['SignonScript']`). |
|
* When no credentials are available, the user is being redirected to |
|
:config:option:`$cfg['Servers'][$i]['SignonURL']`, where you should handle |
|
the login process. |
|
|
|
The very basic example of saving credentials in a session is available as |
|
:file:`examples/signon.php`: |
|
|
|
.. literalinclude:: ../examples/signon.php |
|
:language: php |
|
|
|
Alternatively, you can also use this way to integrate with OpenID as shown |
|
in :file:`examples/openid.php`: |
|
|
|
.. literalinclude:: ../examples/openid.php |
|
:language: php |
|
|
|
If you intend to pass the credentials using some other means than, you have to |
|
implement wrapper in PHP to get that data and set it to |
|
:config:option:`$cfg['Servers'][$i]['SignonScript']`. There is a very minimal example |
|
in :file:`examples/signon-script.php`: |
|
|
|
.. literalinclude:: ../examples/signon-script.php |
|
:language: php |
|
|
|
.. seealso:: |
|
:config:option:`$cfg['Servers'][$i]['auth_type']`, |
|
:config:option:`$cfg['Servers'][$i]['SignonSession']`, |
|
:config:option:`$cfg['Servers'][$i]['SignonCookieParams']`, |
|
:config:option:`$cfg['Servers'][$i]['SignonScript']`, |
|
:config:option:`$cfg['Servers'][$i]['SignonURL']`, |
|
:ref:`example-signon` |
|
|
|
.. index:: pair: Config; Authentication mode |
|
|
|
.. _auth_config: |
|
|
|
Config authentication mode |
|
-------------------------- |
|
|
|
* This mode is sometimes the less secure one because it requires you to fill the |
|
:config:option:`$cfg['Servers'][$i]['user']` and |
|
:config:option:`$cfg['Servers'][$i]['password']` |
|
fields (and as a result, anyone who can read your :file:`config.inc.php` |
|
can discover your username and password). |
|
* In the :ref:`faqmultiuser` section, there is an entry explaining how |
|
to protect your configuration file. |
|
* For additional security in this mode, you may wish to consider the |
|
Host authentication :config:option:`$cfg['Servers'][$i]['AllowDeny']['order']` |
|
and :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` configuration directives. |
|
* Unlike cookie and http, does not require a user to log in when first |
|
loading the phpMyAdmin site. This is by design but could allow any |
|
user to access your installation. Use of some restriction method is |
|
suggested, perhaps a :term:`.htaccess` file with the HTTP-AUTH directive or disallowing |
|
incoming HTTP requests at one’s router or firewall will suffice (both |
|
of which are beyond the scope of this manual but easily searchable |
|
with Google). |
|
|
|
.. _securing: |
|
|
|
Securing your phpMyAdmin installation |
|
+++++++++++++++++++++++++++++++++++++ |
|
|
|
The phpMyAdmin team tries hard to make the application secure, however there |
|
are always ways to make your installation more secure: |
|
|
|
* Follow our `Security announcements <https://www.phpmyadmin.net/security/>`_ and upgrade |
|
phpMyAdmin whenever new vulnerability is published. |
|
* Serve phpMyAdmin on HTTPS only. Preferably, you should use HSTS as well, so that |
|
you're protected from protocol downgrade attacks. |
|
* Ensure your PHP setup follows recommendations for production sites, for example |
|
`display_errors <https://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors>`_ |
|
should be disabled. |
|
* Remove the ``test`` directory from phpMyAdmin, unless you are developing and need a test suite. |
|
* Remove the ``setup`` directory from phpMyAdmin, you will probably not |
|
use it after the initial setup. |
|
* Properly choose an authentication method - :ref:`cookie` |
|
is probably the best choice for shared hosting. |
|
* Deny access to auxiliary files in :file:`./libraries/` or |
|
:file:`./templates/` subfolders in your webserver configuration. |
|
Such configuration prevents from possible path exposure and cross side |
|
scripting vulnerabilities that might happen to be found in that code. For the |
|
Apache webserver, this is often accomplished with a :term:`.htaccess` file in |
|
those directories. |
|
* Deny access to temporary files, see :config:option:`$cfg['TempDir']` (if that |
|
is placed inside your web root, see also :ref:`web-dirs`. |
|
* It is generally a good idea to protect a public phpMyAdmin installation |
|
against access by robots as they usually can not do anything good there. You |
|
can do this using ``robots.txt`` file in the root of your webserver or limit |
|
access by web server configuration, see :ref:`faq1_42`. |
|
* In case you don't want all MySQL users to be able to access |
|
phpMyAdmin, you can use :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` to limit them |
|
or :config:option:`$cfg['Servers'][$i]['AllowRoot']` to deny root user access. |
|
* Enable :ref:`2fa` for your account. |
|
* Consider hiding phpMyAdmin behind an authentication proxy, so that |
|
users need to authenticate prior to providing MySQL credentials |
|
to phpMyAdmin. You can achieve this by configuring your web server to request |
|
HTTP authentication. For example in Apache this can be done with: |
|
|
|
.. code-block:: apache |
|
|
|
AuthType Basic |
|
AuthName "Restricted Access" |
|
AuthUserFile /usr/share/phpmyadmin/passwd |
|
Require valid-user |
|
|
|
Once you have changed the configuration, you need to create a list of users which |
|
can authenticate. This can be done using the :program:`htpasswd` utility: |
|
|
|
.. code-block:: sh |
|
|
|
htpasswd -c /usr/share/phpmyadmin/passwd username |
|
|
|
* If you are afraid of automated attacks, enabling Captcha by |
|
:config:option:`$cfg['CaptchaLoginPublicKey']` and |
|
:config:option:`$cfg['CaptchaLoginPrivateKey']` might be an option. |
|
* Failed login attempts are logged to syslog (if available, see |
|
:config:option:`$cfg['AuthLog']`). This can allow using a tool such as |
|
fail2ban to block brute-force attempts. Note that the log file used by syslog |
|
is not the same as the Apache error or access log files. |
|
* In case you're running phpMyAdmin together with other PHP applications, it is |
|
generally advised to use separate session storage for phpMyAdmin to avoid |
|
possible session-based attacks against it. You can use |
|
:config:option:`$cfg['SessionSavePath']` to achieve this. |
|
|
|
.. _ssl: |
|
|
|
Using SSL for connection to database server |
|
+++++++++++++++++++++++++++++++++++++++++++ |
|
|
|
It is recommended to use SSL when connecting to remote database server. There |
|
are several configuration options involved in the SSL setup: |
|
|
|
:config:option:`$cfg['Servers'][$i]['ssl']` |
|
Defines whether to use SSL at all. If you enable only this, the connection |
|
will be encrypted, but there is not authentication of the connection - you |
|
can not verify that you are talking to the right server. |
|
:config:option:`$cfg['Servers'][$i]['ssl_key']` and :config:option:`$cfg['Servers'][$i]['ssl_cert']` |
|
This is used for authentication of client to the server. |
|
:config:option:`$cfg['Servers'][$i]['ssl_ca']` and :config:option:`$cfg['Servers'][$i]['ssl_ca_path']` |
|
The certificate authorities you trust for server certificates. |
|
This is used to ensure that you are talking to a trusted server. |
|
:config:option:`$cfg['Servers'][$i]['ssl_verify']` |
|
This configuration disables server certificate verification. Use with |
|
caution. |
|
|
|
When the database server is using a local connection or private network and SSL can not be configured |
|
you can use :config:option:`$cfg['MysqlSslWarningSafeHosts']` to explicitly list the hostnames that are considered secure. |
|
|
|
.. seealso:: |
|
|
|
:ref:`example-google-ssl`, |
|
:ref:`example-aws-ssl`, |
|
:config:option:`$cfg['Servers'][$i]['ssl']`, |
|
:config:option:`$cfg['Servers'][$i]['ssl_key']`, |
|
:config:option:`$cfg['Servers'][$i]['ssl_cert']`, |
|
:config:option:`$cfg['Servers'][$i]['ssl_ca']`, |
|
:config:option:`$cfg['Servers'][$i]['ssl_ca_path']`, |
|
:config:option:`$cfg['Servers'][$i]['ssl_ciphers']`, |
|
:config:option:`$cfg['Servers'][$i]['ssl_verify']` |
|
|
|
Known issues |
|
++++++++++++ |
|
|
|
Users with column-specific privileges are unable to "Browse" |
|
------------------------------------------------------------ |
|
|
|
If a user has only column-specific privileges on some (but not all) columns in a table, "Browse" |
|
will fail with an error message. |
|
|
|
As a workaround, a bookmarked query with the same name as the table can be created, this will |
|
run when using the "Browse" link instead. `Issue 11922 <https://github.com/phpmyadmin/phpmyadmin/issues/11922>`_. |
|
|
|
Trouble logging back in after logging out using 'http' authentication |
|
---------------------------------------------------------------------- |
|
|
|
When using the 'http' ``auth_type``, it can be impossible to log back in (when the logout comes |
|
manually or after a period of inactivity). `Issue 11898 <https://github.com/phpmyadmin/phpmyadmin/issues/11898>`_. |
|
|
|
.. _Composer tool: https://getcomposer.org/ |
|
.. _Packagist: https://packagist.org/ |
|
.. _Docker official image: https://hub.docker.com/_/phpmyadmin
|
|
|