Встановлення

PhpMyAdmin не застосовує жодних спеціальних методів безпеки для сервера баз даних MySQL. Це як і раніше робота системного адміністратора правильно надавати дозволи на бази даних MySQ. phpMyAdmin,: guilabel: „Користувачі“ сторінки можуть бути використані для цього.

Дистрибутиви Linux

phpMyAdmin входить у більшість дистрибутивів Linux. Рекомендується використовувати пакети поширення, коли це можливо - вони, як правило, забезпечують інтеграцію вашого дистрибутива і ви будете автоматично отримувати оновлення безпеки від вашого дистрибутива.

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:

More specific details about installing Debian or Ubuntu packages are available in our wiki.

Дивись також

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

OpenSUSE

OpenSUSE вже поставляється з пакетом phpMyAdmin, просто встановіть пакети з openSUSE Build Service.

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 поставляє пакет phpMyAdmin в своїх contrib гілках і може бути встановлений за допомогою звичайного Control Center.

Fedora

Fedora поставляє пакет phpMyAdmin, але майте на увазі, що конфігураційний файл зберігається в /etc/phpMyAdmin/ і може відрізнятися в деякій мірі від офіційної документації PhpMyAdmin.

Red Hat Enterprise Linux

Red Hat Enterprise Linux і похідні на кшталт CentOS не поставляється phpMyAdmin, але Fedora-driven репозиторій „ Extra Packages для Enterprise Linux (EPEL) <https://fedoraproject.org/wiki/EPEL>`_ робить це, якщо він включений <https://fedoraproject.org/wiki/EPEL/FAQ#howtouse>`_. Але майте на увазі, що конфігураційний файл зберігається в /etc/phpMyAdmin/ і може відрізнятися в деякій мірі від офіційної документації phpMyAdmin.

Установка на Windows

Найпростіший спосіб встановити phpMyAdmin на Windows це використати продукти сторонніх виробників, які включають в себе phpMyAdmin разом з базою даних і веб-сервером, таких як XAMPP.

Ви можете дізнатися більше про такі параметри в Wikipedia.

Встановлення з Git

Щоб встановити програму Git, вам знадобляться кілька підтримуючих програм:

  • Git to download the source, or you can download the most recent source directly from Github
  • Composer
  • Node.js (версії 10 або вище)
  • Yarn

Ви можете клонувати поточне джерело phpMyAdmin з https://github.com/phpmyadmin/phpmyadmin.git:

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

Крім того, вам необхідно встановити залежності за допомогою Composer:

composer update

Якщо ви не маєте наміру розробляти, ви можете пропустити установку інструментів розробника, посилаючись на:

composer update --no-dev

Нарешті, вам доведеться використовувати Yarn для встановлення деяких залежностей JavaScript:

yarn install --production

Установка за допомогою Composer

Ви можете встановити phpMyAdmin за допомогою Composer tool, починаючи з 4.7.0 версії автоматично відображаються, за замовчанням Packagist репозиторій.

Примітка

Зміст сховища Composer автоматично генерується окремо з випусків, так що зміст не має бути 100% таким же, як при завантаженні tar-архіву.

Для установки phpMyAdmin просто запустіть:

composer create-project phpmyadmin/phpmyadmin

В якості альтернативи ви можете використовувати свій власний composer репозиторій, який містить випуски tar-архівів і доступний на <https://www.phpmyadmin.net/packages.json>:

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

Установка з використанням Docker

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

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

Ви можете налаштувати декілька функцій phpMyAdmin з використанням змінних оточення:

PMA_ARBITRARY

Дозволяє вам ввести назву хоста сервера бази даних в формі авторизації.

Дивись також

$cfg['AllowArbitraryServer']

PMA_HOST

Hostname or IP address of the database server to use.

Дивись також

$cfg['Servers'][$i]['host']

PMA_HOSTS

Comma-separated hostnames or IP addresses of the database servers to use.

Примітка

Використовується тільки якщо PMA_HOST є пустий.

PMA_VERBOSE

Багатомовне ім’я сервера бази даних.

Дивись також

$cfg['Servers'][$i]['verbose']

PMA_VERBOSES

Розділені комами багатомовне ім’я серверів баз даних.

Примітка

Використовується тільки якщо PMA_VERBOSE є пустий.

PMA_USER

Ім’я користувача для Конфігурація режиму автентифікації.

PMA_PASSWORD

Паспорт користувача для Конфігурація режиму автентифікації.

PMA_PORT

Порт сервера бази даних до використання.

PMA_PORTS

Розділені комами порти сервера баз даних для використання.

Примітка

Використовується тільки якщо PMA_PORT є пустий.

PMA_ABSOLUTE_URI

Повний шлях (https://pma.example.net/) де реверсивний проксі-сервер робить phpMyAdmin доступним.

Дивись також

$cfg['PmaAbsoluteUri']

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

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

Примітка

Format as [0-9+](K,M,G) default value is 2048K

PMA_CONFIG_BASE64

If set, this option will override the default config.inc.php with the base64 decoded contents of the variable.

PMA_USER_CONFIG_BASE64

If set, this option will override the default config.user.inc.php with the base64 decoded contents of the variable.

За замовчуванням, Cookie режим автентифікації використовується, але якщо PMA_USER і PMA_PASSWORD встановлені, він переключається на Конфігурація режиму автентифікації.

Примітка

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 MYSQL_ROOT_PASSWORD when starting the MySQL container). Please check documentation for MariaDB container or MySQL container.

Настроювання конфігурації

Крім того, конфігурація може бути змінена шляхом /etc/phpmyadmin/config.user.inc.php. Якщо файл існує, він буде завантажений після того, як конфігурація з генерується з вищевказаної змінної середовища, так що ви можете перевизначити будь-які змінні конфігурації. Ця конфігурація може бути додана в якості тому при виклику docker за допомогою -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php параметрів.

Зверніть увагу, що доданий файл конфігурації застосовується після того, як Змінні оточення Docker, але ви можете перевизначити будь-яке з значень.

For example to change the default behavior of CSV export you can use the following configuration file:

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

Ви також можете використовувати його для визначення конфігурації сервера замість використання змінних середовища, перелічених у Змінні оточення Docker:

<?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',
    ],
];

Дивись також

Дивитися Конфігурація для докладного опису опцій конфігурації.

Томи Docker

You can use the following volumes to customize image behavior:

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

Can be used for additional settings, see the previous chapter for more details.

/sessions/

Каталог зберігання PHP сесій. Ви можете спільно використовувати це, наприклад, при використанні Signon режим автентифікації.

/www/themes/

Каталог, де phpMyAdmin шукає теми. За умовчанням включені лише ті, що постачаються разом із phpMyAdmin, але ви можете включити додаткові теми phpMyAdmin (дивіться Користувацькі теми) з допомогою томів Docker.

Приклади Docker

Для підключення phpMyAdmin до вказаного сервера, використовуйте:

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

Для підключення phpMyAdmin до декількох серверів використовуйте:

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

Щоб використовувати опцію довільного сервера:

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

Ви також можете пов’язати контейнер бази даних використовуючи Докер:

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

Запуск з додатковою конфігурацією:

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

Робота з додатковими темами:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin

Використання 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.

docker-compose up -d

Налаштування файлу конфігурації за допомогою docker-compose

Ви можете використовувати зовнішній файл для налаштування конфігурації PhpMyAdmin і передати його за допомогою директиви томів:

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/

Працюють у фоновому режимі haproxy в підкаталозі

Кали ви хочете запускати phpMyAdmin у Docker контейнері в підкаталозі, вам потрібно переписати шлях запиту на сервері проксінг запитів.

For example, using haproxy it can be done as:

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

При використанні traefik, щось на зразок повинно працювати:

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

Потім ви повинні вказати PMA_ABSOLUTE_URI в docker-compose конфігурації:

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.

Швидка установка

  1. Виберіть відповідний дистрибутив з сторінки завантаження phpmyadmin.net. Деякі набори містять тільки англійські повідомлення, інші містять всі мови. Припустимо, що ви вибрали комплект ім’я якого виглядає як phpMyAdmin-x.x.x -all-languages.tar.gz.
  2. Переконайтеся, що ви завантажили справжній архів, дивіться Перевірка релізів phpMyAdmin.
  3. Розмістіть розпаковані tar або zip (не забудьте розпакувати підкаталоги): tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz в кореневому каталозі документів мережевого сервера. Якщо ви не маєте прямого доступу до кореневого каталогу документів, помістіть файли в каталог на локальному комп’ютері, і, після кроку 4, перенесіть каталог на ваш веб-сервер, використовуючи, наприклад, FTP.
  4. Переконайтеся, що всі скрипти мають відповідного власника (якщо PHP працює в безпечному режимі, маючи кілька скриптів з власником, відмінними від власника інших скриптів, буде проблема). Дивіться 4.2. Який спосіб зробити phpMyAdmin захищеним від доступу зловмисників? and 1.26 Я тільки встановив phpMyAdmin в корені документа IIS, але при спробі запустити phpMyAdmin я отримую помилку «Не вказано вхідний файл». для пропозицій.
  5. Тепер ви повинні налаштувати вашу установку. Є два методи, які можуть бути використані. Традиційний, користувачі вручну редагують копію config.inc.php, але тепер майстер стилю установки призначений для тих, хто вважає за краще графічну установку. Створення config.inc.php як і раніше найшвидший спосіб, щоб почати роботу і необхідний для деяких додаткових функцій.

Cтворення файлу вручну

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

<?php
// 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;

Або, якщо ви вважаєте за краще не авторизуватися щораз при вході:

<?php

$i=0;
$i++;
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'changeme'; // use here your password
$cfg['Servers'][$i]['auth_type']     = 'config';

Попередження

Зберігати паролі в конфігурації небезпечно, оскільки будь-хто зможе маніпулювати вашою базою даних.

Для докладного пояснення можливих значень конфігурації, дивіться Конфігурація цього документа.

Using the Setup script

Замість ручного редагування config.inc.php, ви можете використати функцію установки phpMyAdmin. Файл може бути створений використовуючи установку і ви можете завантажити його для завантаження на сервер.

Потім відкрийте браузер і відвідайте розташування де ви встановили phpMyAdmin, з /setup суфікс. Зміни не зберігаються на сервері, ви повинні використовувати Download кнопку, щоб зберегти їх на свій комп’ютер і потім завантажити на сервер.

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.

  1. Якщо ви використовуєте auth_type «config», рекомендується вам захистити каталог установки PhpMyAdmin, тому що при використанні конфігурації не потрібно користувачеві вводити пароль для доступу до установки PhpMyAdmin. Використовуйте альтернативний метод перевірки автентичності, рекомендується, наприклад, використовувати HTTP–AUTH в .htaccess файлі або включити використання auth_type cookie чи http. Дивіться Інтернет провайдери, багатокористувацькі установки для отримання додаткової інформації, особливо 4.4 phpMyAdmin завжди дає «Доступ заборонено» при використанні автентифікації HTTP..
  2. Відкрийте основний каталог phpMyAdmin в вашому браузері. phpMyAdmin повинен тепер показувати на екрані привітання і ваші бази даних, або діалогове вікно авторизації при використанні HTTP або режиму cookie аутентифікації.

Сценарій установки на Debian, Ubuntu і похідних

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.

Щоб дозволити редагування конфігурації викличте:

/usr/sbin/pma-configure

Для того, щоб заблокувати редагування конфігурації викличте:

/usr/sbin/pma-secure

Сценарій установки на OpenSUSE

Деякі випуски OpenSUSE не включають сценарій установки в пакеті. У разі, якщо ви хочете створити конфігурацію на них, ви можете завантажити вихідний пакет з <https://www.phpmyadmin.net/> або використати налаштування сценарію на нашому демо-сервері: <https://demo.phpmyadmin.net/master/setup/>.

Перевірка релізів phpMyAdmin

З липня 2015 року всі релізи phpMyAdmin криптографічно підписуються рилізинг розробником, яким до січня 2016 року був Marc Delisle. Його ідентифікаційний ключ 0xFEFC65D181AF644A, його PGP відбиток:

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

і ви можете отримати більш детальну інформацію про ідентифікацію від <https://keybase.io/lem9>.

Починаючи з січня 2016 року, менеджер релізу Isaac Bennetch. Його ідентифікаційний ключ 0xCE752F178259BD92, його PGP відбиток:

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

і ви можете отримати більш детальну інформацію про ідентифікацію від <https://keybase.io/ibennetch>.

Деякі додаткові завантаження (наприклад теми) можуть бути підписані Michal Čihař. Його ідентифікаційний ключ 0x9C27B31342B7511D, його PGP відбиток:

63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D

і ви можете отримати більш детальну інформацію про ідентифікацію від <https://keybase.io/nijel>.

Ви повинні переконатися в тому, що підпис відповідає архіву який ви завантажили. Таким чином, ви можете бути впевнені, що ви використовуєте один і той же код, який був випущений. Ви повинні також перевірити дату підпису, щоб переконатися, що ви завантажили останню версію.

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:

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

$ gpg --import phpmyadmin.keyring
  • Завантажити та імпортувати ключ з одного з ключових серверів:
$ 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:

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

Після того, як ключ є довірений, попередження не буде відбуватися:

$ 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]

Якщо підпис недійсний (архів був змінений), ви отримаєте чітку помилку, незалежно від того, що ключ є довірений чи ні:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: BAD signature from "Isaac Bennetch <bennetch@gmail.com>" [unknown]

Зберігання конфігурації phpMyAdmin

Змінено в версії 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.

Для цілого набору додаткових функцій (Закладки, коментарі, SQL- історія, механізм відстеження, PDF-генерація, Перетворення, Відносини etc.) вам потрібно створити набір спеціальних таблиць. Ці таблиці можуть бути розташовані у власній базі даних, або в основній базі даних для багатокористувацької установки (ця база даних потім буде доступна для controluser, тому ніякий інший користувач не повинен мати прав на неї).

Нульова конфігурація

У багатьох випадках ця структура бази даних може бути автоматично створена і налаштована. Це називається режим «Нульова конфігурація» і може бути особливо корисно в ситуаціях загального хостингу. “Zeroconf” режим за замовчуванням, для відключення установки $cfg['ZeroConf'] до false.

Наступні три сценарії охоплюють режим нульової конфігурації:

  • При вході в базу даних, де таблиці для зберігання конфігурації немає, phpMyAdmin пропонує створити її перейшовши по вкладці Операції.
  • При вході в базу даних, де таблиці вже існують, програмне забезпечення автоматично виявляє це і починає використовувати їх. Це найбільш поширена ситуація; після того, як таблиці спочатку створюються автоматично вони постійно використовуються, не заважаючи користувачеві; це також найкорисніше на віртуальному хостингу, де користувач не може редагувати config.inc.php і, як правило, користувач має доступ тільки до однієї бази даних.
  • При наявності доступу до кількох баз даних, якщо користувач вперше входить в базу даних, що містять таблиці для зберігання конфігурації потім переходять на іншу базу даних, phpMyAdmin продовжить використовувати таблиці з першої бази даних; користувачу не буде виводитись підказка для створення кількох таблиць в новій базі даних.

Настроювання вручну

Будь ласка, подивіться ваш ./sql/ каталог, де ви повинні знайти файл з ім’ям create_tables.sql. (Якщо ви використовуєте сервер для Windows, зверніть особливу увагу на 1.23 Я запускаю MySQL на машині Win32. Кожного разу, коли я створюю нову таблицю, імена стовпців та таблиць змінюються на нижній регістр!).

Якщо ви вже мали цю інфраструктуру і:

  • оновити до MySQL 4.1.2 або новішої, будь ласка, використовуйте sql/upgrade_tables_mysql_4_1_2+.sql.
  • оновити до phpMyAdmin 4.3.0 або новішої з 2.5.0 або новішої (<= 4.2.x), будь ласка, використовуйте sql/upgrade_column_info_4_3_0+.sql.
  • оновити phpMyAdmin до 4.7.0 або новішої з 4.3.0 або новішої, будь ласка, використовуйте sql/upgrade_tables_4_7_0+.sql.

а потім створити нові таблиці з допомогою імпорту sql/create_tables.sql.

Ви можете використовувати phpMyAdmin для створення таблиць для вас. Зверніть увагу, що вам може знадобитися спеціальний (адміністратор) привілей для створення бази даних і таблиць, і що сценарію можуть знадобитися деякі налаштування, в залежності від імені бази даних.

Після того, як імпортований sql/create_tables.sql файл, ви повинні вказати імена таблиць у вашому config.inc.php файлі. Директиви, які використовуються для цього можна знайти в Конфігурація.

Ви також повинні мати controluser ($cfg['Servers'][$i]['controluser'] і $cfg['Servers'][$i]['controlpass'] настройки) з відповідними правами на ці таблиці. Наприклад, ви можете створити його, використовуючи наступний оператор:

And for any MariaDB version:

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:

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:

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 1.45 I get an error message about unknown authentication method caching_sha2_password when trying to log in for details.

Оновлення з більш старої версії

Попередження

Ніколи не розпаковуйте нову версію поверх існуючої установки phpMyAdmin, завжди спочатку видаліть старі файли зберігши тільки конфігурацію.

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.

Просто скопіюйте config.inc.php від попередньої установки в недавно розпаковану. Конфігураційні файли зі старих версій можуть знадобитися для налаштувань, так як деякі параметри були змінені або видалені.

The complete upgrade can be performed in a few simple steps:

  1. Завантажте останню версію phpMyAdmin від <https://www.phpmyadmin.net/downloads/>.
  2. Перейменуйте існуючу папку phpMyAdmin (наприклад, в phpmyadmin-old).
  3. Unpack freshly downloaded phpMyAdmin to the desired location (for example phpmyadmin).
  4. Copy config.inc.php` from old location (phpmyadmin-old) to the new one (phpmyadmin).
  5. Перевірте, що все працює належним чином.
  6. Remove backup of a previous version (phpmyadmin-old).

Якщо ви оновили свій сервер MySQL з версії, що передує 4.1.2 до версії 5.x або новішої і якщо ви використовуєте сховище конфігурації PhpMyAdmin, ви повинні запустити SQL сценарій в sql/upgrade_tables_mysql_4_1_2+.sql.

Якщо ви оновили ваш phpMyAdmin до 4.3.0 або новішої з 2.5.0 або новішої (<= 4.2.x) і якщо ви використовуєте сховище конфігурації phpMyAdmin, ви повинні запустити SQL сценарій в sql/upgrade_column_info_4_3_0+.sql.

Не забудьте очистити кеш браузера, очистити стару сесію вийшовши з системи і повторного ввійшовши.

Використання режиму перевірки автентичності

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 HTTP or cookie mode so that your user/password pair are not in clear in the configuration file.

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

GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password';

Те, що користувач тепер може зробити, це повністю контролюється системою управління користувачами MySQL. З HTTP або cookie режим автентифікації, не потрібно заповнювати поля користувач/пароль всередині $cfg['Servers'].

HTTP режим автентифікації

Примітка

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.

Signon режим автентифікації

  • This mode is a convenient way of using credentials from another application to authenticate to phpMyAdmin to implement a single signon solution.
  • Інша програма має зберігати реєстраційну інформацію в даних сеансу (бачити $cfg['Servers'][$i]['SignonSession'] і $cfg['Servers'][$i]['SignonCookieParams']) або вам потрібно реалізувати сценарій, щоб повернути повноваження (бачити $cfg['Servers'][$i]['SignonScript']).
  • Якщо облікові дані не доступні, користувач перенаправляється до $cfg['Servers'][$i]['SignonURL'], де ви повинні управляти процесом входу в систему.

Дуже простий приклад збереження облікових даних в сесії доступний як examples/signon.php:

<?php
/**
 * Single signon for phpMyAdmin
 *
 * This is just example how to use session based single signon with
 * phpMyAdmin, it is not intended to be perfect code and look, only
 * shows how you can integrate this functionality in your application.
 */

declare(strict_types=1);

/* Use cookies for session */
ini_set('session.use_cookies', 'true');
/* Change this to true if using phpMyAdmin over https */
$secure_cookie = false;
/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secure_cookie, true);
/* Create signon session */
$session_name = 'SignonSession';
session_name($session_name);
// Uncomment and change the following line to match your $cfg['SessionSavePath']
//session_save_path('/foobar');
@session_start();

/* Was data posted? */
if (isset($_POST['user'])) {
    /* Store there credentials */
    $_SESSION['PMA_single_signon_user'] = $_POST['user'];
    $_SESSION['PMA_single_signon_password'] = $_POST['password'];
    $_SESSION['PMA_single_signon_host'] = $_POST['host'];
    $_SESSION['PMA_single_signon_port'] = $_POST['port'];
    /* Update another field of server configuration */
    $_SESSION['PMA_single_signon_cfgupdate'] = ['verbose' => 'Signon test'];
    $_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
    $id = session_id();
    /* Close that session */
    @session_write_close();
    /* Redirect to phpMyAdmin (should use absolute URL here!) */
    header('Location: ../index.php');
} else {
    /* Show simple form */
    header('Content-Type: text/html; charset=utf-8');

    echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
    echo '<!DOCTYPE HTML>
<html lang="en" dir="ltr">
<head>
<link rel="icon" href="../favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
<meta charset="utf-8">
<title>phpMyAdmin single signon example</title>
</head>
<body>';

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

    echo '<form action="signon.php" method="post">
Username: <input type="text" name="user" autocomplete="username"><br>
Password: <input type="password" name="password" autocomplete="current-password"><br>
Host: (will use the one from config.inc.php by default)
<input type="text" name="host"><br>
Port: (will use the one from config.inc.php by default)
<input type="text" name="port"><br>
<input type="submit">
</form>
</body>
</html>';
}

Alternatively, you can also use this way to integrate with OpenID as shown in examples/openid.php:

<?php
/**
 * Single signon for phpMyAdmin using OpenID
 *
 * This is just example how to use single signon with phpMyAdmin, it is
 * not intended to be perfect code and look, only shows how you can
 * integrate this functionality in your application.
 *
 * It uses OpenID pear package, see https://pear.php.net/package/OpenID
 *
 * User first authenticates using OpenID and based on content of $AUTH_MAP
 * the login information is passed to phpMyAdmin in session data.
 */

declare(strict_types=1);

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

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

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

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

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

    echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
    echo '<!DOCTYPE HTML>
<html lang="en" dir="ltr">
<head>
<link rel="icon" href="../favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
<meta charset="utf-8">
<title>phpMyAdmin OpenID signon example</title>
</head>
<body>';

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

    echo $contents;
    echo '</body></html>';
}

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

// phpcs:enable

/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secure_cookie, true);
/* Create signon session */
$session_name = 'SignonSession';
session_name($session_name);
@session_start();

// Determine realm and return_to
$base = 'http';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
    $base .= 's';
}

$base .= '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];

$realm = $base . '/';
$returnTo = $base . dirname($_SERVER['PHP_SELF']);
if ($returnTo[strlen($returnTo) - 1] !== '/') {
    $returnTo .= '/';
}

$returnTo .= 'openid.php';

/* Display form */
if ((! count($_GET) && ! count($_POST)) || isset($_GET['phpMyAdmin'])) {
    /* Show simple form */
    $content = '<form action="openid.php" method="post">
OpenID: <input type="text" name="identifier"><br>
<input type="submit" name="start">
</form>';
    Show_page($content);
    exit;
}

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

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

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

    $url = $authRequest->getAuthorizeURL();

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

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

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

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

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

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

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 $cfg['Servers'][$i]['SignonScript']. There is a very minimal example in examples/signon-script.php:

<?php
/**
 * Single signon for phpMyAdmin
 *
 * This is just example how to use script based single signon with
 * phpMyAdmin, it is not intended to be perfect code and look, only
 * shows how you can integrate this functionality in your application.
 */

declare(strict_types=1);

// phpcs:disable Squiz.Functions.GlobalFunction

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

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

Конфігурація режиму автентифікації

  • Цей режим є іноді менш безпечним, оскільки вимагає від вас заповнити $cfg['Servers'][$i]['user'] і $cfg['Servers'][$i]['password'] поля (і, як наслідок, будь-хто, хто може читати ваш config.inc.php може знайти ваше ім’я користувача та пароль).
  • В Інтернет провайдери, багатокористувацькі установки розділі, є запис, що пояснює, як захистити свій файл конфігурації.
  • Для забезпечення додаткової безпеки в цьому режимі, ви можете розглянути питання аутентифікації хоста $cfg['Servers'][$i]['AllowDeny']['order'] і $cfg['Servers'][$i]['AllowDeny']['rules'] директив конфігурації.
  • На відміну від куки і HTTP, не вимагає, щоб користувач увійшов при першому завантаженні сайту phpMyAdmin. Цей дизайн може дозволити будь-якому користувачеві отримати доступ до вашої установки. Пропонується використати деякий метод обмеження, можливо буде достатньо .htaccess файл з директивою HTTP-AUTH або заборонити вхідні HTTP запити на свій маршрутизатор чи брандмауер, (обидва методи виходять за рамки даного керівництва, але це легко знайти за допомогою Google).

Забезпечення безпеки установки phpMyAdmin

Команда phpMyAdmin жорстко намагається забезпечити безпеку застосування, однак завжди є способи, щоб зробити вашу установку безпечнішою:

  • Дотримуйтесь нашої Інформація про безпеку і оновлювати phpMyAdmin щоразу, коли нова уразливість опублікована.

  • Обслуговувати phpMyAdmin тільки на HTTPS. Переважно, ви повинні використовувати HSTS також, щоб бути захищеним з протоколом зниження атак.

  • Ensure your PHP setup follows recommendations for production sites, for example display_errors should be disabled.

  • Remove the test directory from phpMyAdmin, unless you are developing and need a test suite.

  • Видалити setup каталог з phpMyAdmin, ви ймовірно не будете використовувати його після початкової установки.

  • Правильно вибрати метод аутентифікації - Cookie режим автентифікації це, ймовірно, кращий вибір для загального хостингу.

  • Заборонити доступ до допоміжних файлів в ./libraries/ або ./templates/ вкладених папках в конфігурації веб-сервера. Така конфігурація запобігає від можливих шляхів впливу і взаємовідносин з сценаріями, які можуть виникнути в цьому коді. В веб-сервері Apache це часто відбувається з файлом .htaccess у цих каталогах.

  • Заборонити доступ до тимчасових файлів, дивитися $cfg['TempDir'] (якщо це знаходиться в вашому веб кореневому каталозі, дивіться також Веб-сервер щоб завантажити/зберегти/імпортувати каталоги.

  • 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 1.42 Як я можу запобігти доступу роботів до phpMyAdmin?.

  • У разі, якщо ви не хочете, щоб всі користувачі MySQL мали можливість отримати доступ до phpMyAdmin, ви можете використати $cfg['Servers'][$i]['AllowDeny']['rules'] обмежити їх або $cfg['Servers'][$i]['AllowRoot'] відмовити у доступі супер користувачеві.

  • Увімкнути Двофакторна аутентифікація для вашого облікового запису.

  • Розглянути питання про приховування phpMyAdmin позаду проксі аутентифікації, так що користувачі повинні пройти попередню автентифікацію для забезпечення облікових даних MySQL для phpMyAdmin. Ви можете домогтися цього шляхом настройки веб-сервера для запиту аутентифікації HTTP. Наприклад, в Apache це можна зробити за допомогою:

    AuthType Basic
    AuthName "Restricted Access"
    AuthUserFile /usr/share/phpmyadmin/passwd
    Require valid-user
    

    Після того, як ви змінили конфігурацію, вам потрібно створити список користувачів, які можуть автентифікуватися. Це може бути зроблено за допомогою htpasswd utility:

    htpasswd -c /usr/share/phpmyadmin/passwd username
    
  • Якщо ви боїтеся автоматизованих атак, включіть Captcha $cfg['CaptchaLoginPublicKey'] і $cfg['CaptchaLoginPrivateKey'] може бути прийнятним варіантом.

  • Невдалі спроби входу записуються в системний журнал (якщо такі є, див. $cfg['AuthLog']). Це може дозволити за допомогою такого інструменту, як Fail2ban, блокувати спроби грубої сили. Зверніть увагу, що файл журналу використовує системний журнал і це не те ж саме, що файли журналу помилок або доступу Apache.

  • 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 $cfg['SessionSavePath'] to achieve this.

Використання SSL для підключення до сервера баз даних

Рекомендовано використовувати SSL під час підключення до віддаленого сервера баз даних. У налаштуваннях SSL присутні декілька параметрів налаштування:

$cfg['Servers'][$i]['ssl']
Визначає, чи використовувати SSL взагалі. Якщо ви ввімкнете лише це, з’єднання буде зашифроване, але там немає автентифікації зв’язку - ви не зможете перевірити, що ви взаємодієте з потрібним сервером.
$cfg['Servers'][$i]['ssl_key'] і $cfg['Servers'][$i]['ssl_cert']
Використовується для автентифікації клієнта на сервері.
$cfg['Servers'][$i]['ssl_ca'] і $cfg['Servers'][$i]['ssl_ca_path']
Органи сертифікації, яким ви довіряєте, для серверних сертифікатів. Це використовується для гарантії, щоб ви взаємодієте з надійним сервер.
$cfg['Servers'][$i]['ssl_verify']
Ця конфігурація вимикає перевірку сертифіката сервера. Використовуйте з обережністю.

When the database server is using a local connection or private network and SSL can not be configured you can use $cfg['MysqlSslWarningSafeHosts'] to explicitly list the hostnames that are considered secure.

Відомі проблеми

Користувачі привілеїв конкретних стовпців не в змозі використовувати «Огляд»

Якщо користувач має привілеї тільки на деякі конкретні стовпці ,але не на всі стовпці в таблиці, «Огляд» зазнає невдачі з повідомленням про помилку.

В якості тимчасового рішення, закладка запит з тим же ім’ям, що і таблиця може бути створена, це буде запускатися під час використання » Перегляд» замість посилання. Issue 11922.

Проблема входу назад після виходу з системи з використанням „http“ аутентифікації

При використанні „http“ auth_type, може бути неможливо знову увійти в систему (коли вихід з системи приходить вручну або після певного періоду бездіяльності). Issue 11898.