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

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

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

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

Debian та 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:

Додаткові відомості про встановлення пакетів Debian або Ubuntu доступні на нашій вікі.

Дивись також

Докладніші відомості можна знайти в README.Debian (встановлено як /usr/share/doc/phpmyadmin/README.Debian з пакета).

OpenSUSE

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

Gentoo

Gentoo надає phpMyAdmin пакет з базової конфігурації, а також webapp-config конфігурації. Використовуйте emerge dev-db/phpmyadmin для встановлення.

Mandriva

Mandriva поставляє пакет phpMyAdmin в своїх contrib гілках і може бути встановлений за допомогою звичайного Control Center.

Fedora

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

Red Hat Enterprise Linux

Red Hat Enterprise Linux itself and thus derivatives like CentOS don’t ship phpMyAdmin, but the Fedora-driven repository Extra Packages for Enterprise Linux (EPEL) is doing so, if it’s enabled. But be aware that the configuration file is maintained in /etc/phpMyAdmin/ and may differ in some ways from the official phpMyAdmin documentation.

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

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

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

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

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

  • Git щоб завантажити джерело, або ви можете завантажити останнє джерело безпосередньо з Github
  • Composer
  • Node.js (version 14 or higher)
  • 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

phpMyAdmin використовує порт 80. Він підтримує кілька способів конфігурації зв’язку з сервером бази даних, функцією зв’язку Docker, пов’язуючи ваш контейнер бази даних з db для phpMyAdmin (вказавши --link your_db_host:db) або змінними оточення (в даному випадку це до вашого налаштування мережі в Docker щоб дозволити phpMyAdmin контейнеру доступ до бази даних контейнера по мережі).

Змінні оточення Docker

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

PMA_ARBITRARY

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

Дивись також

$cfg['AllowArbitraryServer']

PMA_HOST

Ім’я хоста або IP-адрес сервера бази даних для використання.

Дивись також

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

PMA_HOSTS

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

Примітка

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

PMA_VERBOSE

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

Дивись також

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

PMA_VERBOSES

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

Примітка

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

PMA_USER

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

PMA_PASSWORD

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

PMA_PORT

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

PMA_PORTS

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

Примітка

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

PMA_SOCKET

Socket file for the database connection.

PMA_SOCKETS

Comma-separated list of socket files for the database connections.

Примітка

Used only if PMA_SOCKET is empty.

PMA_ABSOLUTE_URI

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

Дивись також

$cfg['PmaAbsoluteUri']

PMA_QUERYHISTORYDB

When set to true, enables storing SQL history to $cfg['Servers'][$i]['pmadb']. When false, history is stored in the browser and is cleared when logging out.

Дивись також

$cfg['Servers'][$i]['history']

Дивись також

$cfg['QueryHistoryDB']

PMA_QUERYHISTORYMAX

When set to an integer, controls the number of history items.

Дивись також

$cfg['QueryHistoryMax']

PMA_CONTROLHOST

When set, this points to an alternate database host used for storing the «Зберігання конфігурації phpMyAdmin» database.

Дивись також

$cfg['Servers'][$i]['controlhost']

PMA_CONTROLUSER

Defines the username for phpMyAdmin to use for the «Зберігання конфігурації phpMyAdmin» database.

Дивись також

$cfg['Servers'][$i]['controluser']

PMA_CONTROLPASS

Defines the password for phpMyAdmin to use for the «Зберігання конфігурації phpMyAdmin» database.

Дивись також

$cfg['Servers'][$i]['controlpass']

PMA_CONTROLPORT

When set, will override the default port (3306) for connecting to the control host.

Дивись також

$cfg['Servers'][$i]['controlport']

PMA_PMADB

When set, define the name of the database to be used for the «Зберігання конфігурації phpMyAdmin» 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 Нульова конфігурація feature.

Примітка

Рекомендовані значення: phpmyadmin або pmadb

Дивись також

$cfg['Servers'][$i]['pmadb']

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

MEMORY_LIMIT

If set, this option will override the phpMyAdmin memory limit $cfg['MemoryLimit'] and PHP’s memory_limit.

Примітка

Format as [0-9+](K,M,G) where K is for Kilobytes, M for Megabytes, G for Gigabytes and 1K = 1024 bytes. Default value is 512M.

MAX_EXECUTION_TIME

If set, this option will override the maximum execution time in seconds for phpMyAdmin $cfg['ExecTimeLimit'] and PHP’s max_execution_time.

Примітка

Format as [0-9+]. Default value is 600.

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.

PMA_UPLOADDIR

If set, this option will set the path where files can be saved to be available to import ($cfg['UploadDir'])

PMA_SAVEDIR

If set, this option will set the path where exported files can be saved ($cfg['SaveDir'])

APACHE_PORT

If set, this option will change the default Apache port from 80 in case you want it to run on a different port like an unprivileged port. Set to any port value (such as APACHE_PORT=8090).

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

Примітка

Ваші облікові дані необхідні для авторизації зберігаються на сервері MySQL, у випадку з Docker image, існують різні способи, щоб встановити їх (наприклад MYSQL_ROOT_PASSWORD при запуску MySQL контейнер). Будь ласка, перегляньте документацію MariaDB container або MySQL container.

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

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

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

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

<?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

Ви можете використовувати наступні томи для налаштування характеристик зображення:

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

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

/sessions/

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

/www/themes/

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

Приклади Docker

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

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

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

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

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

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

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

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

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

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

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

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

Використання docker-compose

В якості альтернативи, ви можете також використовувати docker-compose з docker-compose.yml з <https://github.com/phpmyadmin/docker>. Це буде запускати phpMyAdmin з довільним сервером - дозволяючи вам вказати MySQL/MariaDB сервер на сторінці авторизації.

docker compose up -d

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

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

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/

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

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

Наприклад, використовуючи haproxy це може бути зроблено, як:

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

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

  1. 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.
  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
// 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;

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

<?php

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

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

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

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

Використання сценарію установки

Замість ручного редагування 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 і Ubuntu змінили спосіб увімкнення та вимкнення сценарію налаштування таким чином, що одна команда повинна бути виконана для будь-якого з них.

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

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

Це трохи покращить ситуацію - в цей момент ви можете перевірити, що підпис від даного ключа є правильним, але ви все ще не можете довіряти імені, яке використовується в ключі:

$ 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: До PhpMyAdmin 3.4.0 це називалося Linked Tables Infrastructure, але назву було змінено через тривалий обсяг зберігання.

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

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

In many cases, this database structure can be automatically created and configured. This is called “Zero Configuration” mode and can be particularly useful in shared hosting situations. “ZeroConf” mode is on by default, to disable set $cfg['ZeroConf'] to false.

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

  • При вході в базу даних, де таблиці для зберігання конфігурації немає, 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'] настройки) з відповідними правами на ці таблиці. Наприклад, ви можете створити його, використовуючи наступний оператор:

І для будь-якої версії MariaDB:

CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON `<pma_db>`.* TO 'pma'@'localhost';

Для MySQL 8.0 і новіших версій:

CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';

Для MySQL старше 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 Під час спроби входу я отримую повідомлення про невідомий метод автентифікації caching_sha2_password 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 і cookie автентифікації режим є безпечнішим: інформація про вхід в MySQL не повинні бути встановлені у файлі конфігурації phpMyAdmin (крім, можливо, $cfg['Servers'][$i]['controluser']). Однак, майте на увазі, що пароль переміщається у вигляді звичайного тексту, якщо ви не використовуєте протокол HTTPS. У режимі cookie, пароль зберігаються, шифрується за допомогою алгоритму AES, в тимчасовому 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 */
$secureCookie = false;
/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secureCookie, true);
/* Create signon session */
$sessionName = 'SignonSession';
session_name($sessionName);
// Uncomment and change the following line to match your $cfg['SessionSavePath']
//session_save_path('/foobar');
@session_start();

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

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

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

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

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 */
$secureCookie = false;

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

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

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

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

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

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

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

// phpcs:enable

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

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

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

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

$returnTo .= 'openid.php';

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

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

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

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

    $url = $authRequest->getAuthorizeURL();

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

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

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

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

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

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

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<int,string>
 */
function get_login_credentials(string $user): array
{
    /* Optionally we can use passed username */
    if (! empty($user)) {
        return [$user, 'password'];
    }

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

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

  • Цей режим є іноді менш безпечним, оскільки вимагає від вас заповнити $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.