| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338 |
- .. _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://docs.fedoraproject.org/en-US/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/QA_5_2>`_
- * `Composer <https://getcomposer.org/download/>`__
- * `Node.js <https://nodejs.org/en/download/>`_ (version 12 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_SOCKET
- Socket file for the database connection.
- .. envvar:: PMA_SOCKETS
- Comma-separated list of socket files for the database connections.
- .. note:: Used only if :envvar:`PMA_SOCKET` 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:: PMA_QUERYHISTORYDB
- When set to `true`, enables storing SQL history to :config:option:`$cfg['Servers'][$i]['pmadb']`.
- When `false`, history is stored in the browser and is cleared when logging out.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['history']`
- .. seealso:: :config:option:`$cfg['QueryHistoryDB']`
- .. envvar:: PMA_QUERYHISTORYMAX
- When set to an integer, controls the number of history items.
- .. seealso:: :config:option:`$cfg['QueryHistoryMax']`
- .. envvar:: PMA_CONTROLHOST
- When set, this points to an alternate database host used for storing the ":ref:`linked-tables`" database.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['controlhost']`
- .. envvar:: PMA_CONTROLUSER
- Defines the username for phpMyAdmin to use for the ":ref:`linked-tables`" database.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['controluser']`
- .. envvar:: PMA_CONTROLPASS
- Defines the password for phpMyAdmin to use for the ":ref:`linked-tables`" database.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['controlpass']`
- .. envvar:: PMA_CONTROLPORT
- When set, will override the default port (`3306`) for connecting to the control host.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['controlport']`
- .. envvar:: PMA_PMADB
- When set, define the name of the database to be used for the ":ref:`linked-tables`" database.
- When not set, the advanced features are not enabled by default: they can still potentially be enabled by the user when logging in with the :ref:`zeroconf` feature.
- .. note:: Suggested values: `phpmyadmin` or `pmadb`
- .. seealso:: :config:option:`$cfg['Servers'][$i]['pmadb']`
- .. 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:: MEMORY_LIMIT
- If set, this option will override the phpMyAdmin memory limit :config:option:`$cfg['MemoryLimit']` and PHP's `memory_limit`.
- .. note:: Format as `[0-9+](K,M,G)` where `K` is for Kilobytes, `M` for Megabytes, `G` for Gigabytes and `1K` = 1024 bytes. Default value is `512M`.
- .. envvar:: MAX_EXECUTION_TIME
- If set, this option will override the maximum execution time in seconds for phpMyAdmin :config:option:`$cfg['ExecTimeLimit']` and PHP's `max_execution_time`.
- .. note:: Format as `[0-9+]`. Default value is `600`.
- .. 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.
- .. envvar:: PMA_UPLOADDIR
- If set, this option will set the path where files can be saved to be available to import (:config:option:`$cfg['UploadDir']`)
- .. envvar:: PMA_SAVEDIR
- If set, this option will set the path where exported files can be saved (:config:option:`$cfg['SaveDir']`)
- .. envvar:: APACHE_PORT
- If set, this option will change the default Apache port from `80` in case you want it to run on a different port like an unprivileged port. Set to any port value (such as `APACHE_PORT=8090`).
- .. envvar:: PMA_SSL_DIR
- Define the path used for SSL files generated from environment variables, default value is `/etc/phpmyadmin/ssl`.
- .. envvar:: PMA_SSL
- When set to `1`, defines SSL usage for the MySQL connection.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl']`
- .. envvar:: PMA_SSLS
- Comma-separated list of `0` and `1` defining SSL usage for the corresponding MySQL connections.
- .. envvar:: PMA_SSL_VERIFY
- When set to `1`, enables SSL certificate verification for the MySQL connection.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_verify']`
- .. envvar:: PMA_SSL_VERIFIES
- Comma-separated list of `0` and `1` to enable or disable SSL certificate verification for multiple MySQL connections.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_verify']`
- .. envvar:: PMA_SSL_CA
- In the context of mutual TLS security, allows setting your CA file as a string inside the default `config.inc.php`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_ca']`
- .. envvar:: PMA_SSL_CAS
- In the context of mutual TLS security, allows setting multiple CA files as a comma-separated list of strings inside the default `config.inc.php`.
- .. envvar:: PMA_SSL_CA_BASE64
- In the context of mutual TLS security, allows setting your CA file as a base64 string inside the default `config.inc.php`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_ca']`
- .. envvar:: PMA_SSL_CAS_BASE64
- In the context of mutual TLS security, allows setting multiple CA files as a comma-separated list of base64 strings inside the default `config.inc.php`.
- .. envvar:: PMA_SSL_CERT
- In the context of mutual TLS security, allows setting your CERT file as a string inside the default `config.inc.php`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_cert']`
- .. envvar:: PMA_SSL_CERTS
- In the context of mutual TLS security, allows setting multiple CERT files as a comma-separated list of strings inside the default `config.inc.php`.
- .. envvar:: PMA_SSL_CERT_BASE64
- In the context of mutual TLS security, allows setting your CERT file as a base64 string inside the default `config.inc.php`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_cert']`
- .. envvar:: PMA_SSL_CERTS_BASE64
- In the context of mutual TLS security, allows setting multiple CERT files as a comma-separated list of base64 strings inside the default `config.inc.php`.
- .. envvar:: PMA_SSL_KEY
- In the context of mutual TLS security, allows setting your KEY file as a string inside the default `config.inc.php`.
- .. envvar:: PMA_SSL_KEYS
- In the context of mutual TLS security, allows setting multiple KEY files as a comma-separated list of strings inside the default `config.inc.php`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_key']`
- .. envvar:: PMA_SSL_KEY_BASE64
- In the context of mutual TLS security, allows setting your KEY file as a base64 string inside the default `config.inc.php`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['ssl_key']`
- .. envvar:: PMA_SSL_KEYS_BASE64
- In the context of mutual TLS security, allows setting multiple KEY files as a comma-separated list of base64 strings inside the default `config.inc.php`.
- .. envvar:: TZ
- If defined, this option will change the default PHP `date.timezone` from `UTC`.
- .. seealso:: :config:option:`$cfg['Servers'][$i]['SessionTimeZone']`
- 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 phpmyadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin:latest
- To connect phpMyAdmin to more servers use:
- .. code-block:: sh
- docker run --name phpmyadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin:latest
- To use arbitrary server option:
- .. code-block:: sh
- docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin:latest
- 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:latest
- 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:latest
- Running with additional themes:
- .. code-block:: sh
- docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/custom/phpmyadmin/themeName/:/var/www/html/themes/themeName/ phpmyadmin:latest
- 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:latest
- container_name: phpmyadmin
- environment:
- - PMA_ARBITRARY=1
- restart: always
- ports:
- - 8080:80
- volumes:
- - /sessions
- - ~/docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
- - /custom/phpmyadmin/theme/:/www/themes/theme/
- .. 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:latest
- container_name: phpmyadmin
- hostname: phpmyadmin
- domainname: example.com
- ports:
- - 8000:80
- environment:
- - PMA_HOSTS=172.26.36.7,172.26.36.8,172.26.36.9,172.26.36.10
- - PMA_VERBOSES=production-db1,production-db2,dev-db1,dev-db2
- - PMA_USER=root
- - PMA_PASSWORD=
- - PMA_ABSOLUTE_URI=http://example.com/phpmyadmin/
- IBM Cloud
- +++++++++
- 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
- // The string is a hexadecimal representation of a 32-bytes long string of random bytes.
- $cfg['blowfish_secret'] = sodium_hex2bin('f16ce59f45714194371b48fe362072dc3b019da7861558cd4ad29e4d6fb13851');
- $i=0;
- $i++;
- $cfg['Servers'][$i]['auth_type'] = 'cookie';
- // if you insist on "root" having no password:
- // $cfg['Servers'][$i]['AllowNoPassword'] = true;
- 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
|