Как настроить mariadb в винде. Установка MariaDB в Windows. Переход с MySQL на MariaDB в Windows. Удаленные соединения пользователей
Я собираюсь установить MariaDB SSL (Secure Sockets Layer) а также безопасные соединения от клиента MySQL и приложения PHP. Как включить SSL для сервера и клиента MariaDB, работающего в Linux или Unix-подобной системе?
MariaDB – сервер базы данных, который предлагает функциональные возможности вклинивания для сервера MySQL.
MariaDB был создан некоторыми из оригинальных авторов MySQL, с помощью более широкого штата разработчиков Free и другого программного обеспечения с открытым исходным кодом. В дополнение к основным функциям MySQL, MariaDB предлагает богатый набор улучшений функций, включая альтернативные механизмы хранения, оптимизацию серверов и другие исправления. В этом руководстве я собираюсь рассказать о том, как настроить сервер MariaDB с помощью SSL и как установить безопасные соединения с помощью консоли и PHP-скриптов.
При создании сертификатов SSL важно использовать 192.168.1.100 в качестве стандартного имени.
Шаг 1 – Установка MariaDB
Введите команду в соответствии с вашим вариантом Linux или Unix.
Установка MariaDB сервера/клиента на Ubuntu/Debian Linux
Введите одну из следующих команд: apt-get command или apt command:
$ sudo apt-get install mariadb-server mariadb-client
Установка MariaDB сервера/клиента на CentOS/RHEL/Fedora Linux
Введите следующую команду yum :
$ sudo yum install mariadb-server mariadb
Для пользователей Fedora Linux необходимо ввести команду dnf :
$ sudo dnf install mariadb-server mariadb
Установка MariaDB сервера/клиента на Arch Linux
Введите следующую команду pacman:
$ sudo pacman -S mariadb
Установка MariaDB сервера/клиента на FreeBSD unix
Для установки порта запустите:
# cd /usr/ports/databases/mariadb100-server/ && make install clean # cd /usr/ports/databases/mariadb100-client/ && make install clean
Чтобы добавить бинарный пакет, введите:
# pkg install mariadb100-server mariadb100-client
Шаг 2 – Обеспечение безопасной установки MariaDB
Введите следующую команду:
$ mysql_secure_installation
Рисунок.01: Обезопасьте установку MariaDBШаг 3 – Создайте CA сертификат
Создайте директорию под названием ssl в /etc/mysql/ directory :
$ cd /etc/mysql $ sudo mkdir ssl $ cd ssl
Значение : Стандартное значение имени (Common Name), используемое для сертификатов / ключей сервера и клиента, должно отличаться от стандартного значения имени (Common Name), используемого для сертификата CA. Чтобы избежать каких-либо проблем, я устанавливаю их следующим образом:
Стандартное имя CA: MariaDB admin
Стандартное имя сервера: MariaDB server
Стандартное имя клиента: MariaDB client
Введите следующую команду для создания нового CA ключа:
$ sudo openssl genrsa 2048 > ca-key.pem
Примеры возможных выводов данных:
Рисунок.02: Создание CA ключа
Введите следующую команду для создания сертификата с помощью этого ключа:
$ sudo openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
Рисунок.03: Используя ключ CA, сгенерируйте сертификат CA для MariaDB
Примеры возможных выводов данных:
Теперь у вас должно быть два следующих файла::
- /etc/mysql/ssl/ca-cert.pem – Файл сертификата для Центра сертификации (Certificate Authority (CA)).
- /etc/mysql/ssl/ca-key.pem – Файл ключа для Центра сертификации (Certificate Authority (CA)).
Я собираюсь использовать оба файла для создания сертификатов сервера и клиента.
Шаг 4 – Создание сертификата сервера
Для создания ключа сервера, запустите:
$ sudo openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
Примеры возможных выводов данных:
Рисунок 04: Создание ключа сервера для сервера MariaDB
Затем обработайте ключ RSA сервера, для этого введите:
$ sudo openssl rsa -in server-key.pem -out server-key.pem
Примеры возможных выводов данных:
Writing RSA key
Наконец, подпишите сертификат сервера, для этого запустите:
$ sudo openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Примеры возможных выводов данных:
Signature ok subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=MariaDB server Getting CA Private Key
Теперь у вас должны появиться дополнительные файлы:
- /etc/mysql/ssl/server-cert.pem – MariaDB файл сертификата сервера.
- /etc/mysql/ssl/server-key.pem – MariaDB файл ключа сервера.
Вы должны использовать не менее двух файлов на сервере MariaDB и любых других узлах, которые вы собираетесь использовать для трафика кластера/репликации. Эти два файла будут защищать связь на стороне сервера.
Шаг 5 – Создание сертификата клиента
Клиент mysql, и приложение PHP/Python/Perl/Ruby будет использовать сертификат клиента для защиты соединяемости клиента. Вы должны установить следующие файлы на всех ваших клиентах, включая веб-сервер. Чтобы создать клиентский ключ, запустите:
$ sudo openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem
Примеры возможных выводов данных:
Рисунок.05: Создание ключа клиента для сервера MariaDB
Затем обработайте ключ клиента RSA, для этого введите
$ sudo openssl rsa -in client-key.pem -out client-key.pem writing RSA key
Наконец, подпишите сертификат клиента, для этого запустите:
$ sudo openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Примеры возможных выводов данных:
Signature ok subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=MariaDB client Getting CA Private Key
Шаг 6 – Как проверить сертификаты?
Введите следующую команду, чтобы проверить сертификаты, чтобы убедиться, что все было создано правильно:
$ openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
Примеры возможных выводов данных:
Server-cert.pem: OK client-cert.pem: OK
Не должно быть никаких ошибок, и вы должны получить ответ OK для сертификатов сервера и клиента.
Шаг 7 – Настройте сервер MariaDB для использования SSL
Отредактируйте файл vi /etc/mysql/mariadb.conf.d/50-server.cnf или /etc/mysql/mariadb.cnf следующим образом:
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
Добавьте следующим образом:
### MySQL Server ### ## Securing the Database with ssl option and certificates ## ## There is no control over the protocol level used. ## ## mariadb will use TLSv1.0 or better. ## ssl ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
Сохраните и закройте файл. Вы можете перезапустить mariadb следующим образом:
$ sudo /etc/init.d/mysql restart
$ sudo systemctl restart mysql
Шаг 8 – Настройте клиент MariaDB для использования SSL
Настройте MariaDB клиент как 192.168.1.200 для использования SSL (добавьте в /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf ):
$ sudo vi /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
Добавьте в раздел:
## MySQL Client Configuration ## ssl-ca=/etc/mysql/ssl/ca-cert.pem ssl-cert=/etc/mysql/ssl/client-cert.pem ssl-key=/etc/mysql/ssl/client-key.pem ### This option is disabled by default ### ### ssl-verify-server-cert ###
Сохраните и закройте файл. Вы должны скопировать файлы /etc/mysql/ssl/ca-cert.pem , /etc/mysql/ssl/client-cert.pem и /etc/mysql/ssl/client-key.pem для всех ваших клиентов. Например:
{vivek@server}: rsync /etc/mysql/ssl/ca-cert.pem /etc/mysql/ssl/client-cert.pem /etc/mysql/ssl/client-key.pem \ user@client:/etc/mysql/ssl
Шаг 9 – Проверка
Введите следующую команду:
$ mysql -u {User-Name-Here} -h {Server-IP-here} -p {DB-Name-Here} $ mysql -u root -h 192.168.1.100 -p mysql $ mysql -u root -h 127.0.0.1 -p mysql
Введите следующую SHOW VARIABLES LIKE ‘%ssl%’; команду в MariaDB [(none)]> строке:
MariaDB [(none)]> SHOW VARIABLES LIKE "%ssl%";
ИЛИ выполните команду status:
MariaDB [(none)]> status;
Примеры возможных выводов данных:
Рисунок 06: Установление безопасного соединения с консолью и ее проверкаПроверьте соединения SSL и TLS. Следующая команда должна завершиться неудачей, так как ssl 3 не поддерживается и, соответственно, она не настроена для использования:
$ openssl s_client -connect 192.168.1.100:3306 -ssl3 140510572795544:error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed:ssl_lib.c:1878:
Проверьте TLS v 1/1.1/1.2:
$ openssl s_client -connect 192.168.1.100:3306 -tls1 $ openssl s_client -connect 192.168.1.100:3306 -tls1_1 $ openssl s_client -connect 192.168.1.100:3306 -tls1_2
Примеры возможных выводов данных:
CONNECTED(00000003) --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 5 bytes and written 7 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol: TLSv1 Cipher: 0000 Session-ID: Session-ID-ctx: Master-Key: Key-Arg: None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1485335036 Timeout: 7200 (sec) Verify return code: 0 (ok) ---
Как читать файл захвата пакета tcpdump для проверки защищенной связи
Наконец, вы можете использовать анализатор пакетов команд tcpdump, который запускается под командной строкой, чтобы посмотреть порт 3306:
$ sudo tcpdump -i eth0 -s 65535 port 3306 -w /tmp/mysql.pcap
Теперь подключитесь к вашему приложению PHP/Python/Perl/Ruby mysql или консольному приложению mysql:
$ mysql -u bar -h 192.168.1.100 -p foo
Используйте tcpdump для проверки того, что никакая текстовая информация, включая пароли, не обменивается между сервером и клиентом. Это делается следующим образом:
$ tcpdump -r /tmp/mysql.pcap | less
Шаг 10 – Добавлениепользователя на MariaDB сервер
Введите следующую команду:
$ mysql -u root –p
Создайте базу данных под названием foo :
CREATE DATABASE foo;
Создайте пользователя с имение bar for для базы данных под названием foo :
GRANT ALL ON foo.* TO bar@localhost IDENTIFIED BY "mypassword" REQUIRE SSL;
Предоставление доступа с веб-сервера, размещенного по адресу 192.168.1.200 :
GRANT ALL ON foo.* TO bar@192.168.200 IDENTIFIED BY "mypassword" REQUIRE SSL;
Создайте безопасное соединение из оболочки bash
Вы можете войти в систему с консоли следующим образом:
$ mysql -u bar -p -h 192.168.1.100 foo
Создайте безопасное соединение из Python
Сначала установите интерфейс Python для MySQL:
$ sudo apt-get install python-mysql.connector
ИЛИ для Python v3.x
$ sudo apt-get install python3-mysql.connector
Здесь приведен пример кода Python для безопасного соединения с использованием:
#!/usr/bin/python import MySQLdb ssl = {"cert": "/etc/mysql/ssl/client-cert.pem", "key": "/etc/mysql/ssl/client-key.pem"} conn = MySQLdb.connect(host="192.168.1.100", user="bar", passwd="mypassword", ssl=ssl) cursor = conn.cursor() cursor.execute("SHOW STATUS LIKE "Ssl_cipher"") print cursor.fetchone()
#!/usr/bin/python # Note (Example is valid for Python v2 and v3) from __future__ import print_function import sys import mysql.connector from mysql.connector.constants import ClientFlag config = { "user": "bar", "password": "mypassword", "host": "192.168.1.100", "client_flags": , "ssl_ca": "/etc/mysql/ssl/ca-cert.pem", "ssl_cert": "/etc/mysql/ssl/client-cert.pem", "ssl_key": "/etc/mysql/ssl/client-key.pem", } cnx = mysql.connector.connect(**config) cur = cnx.cursor(buffered=True) cur.execute("SHOW STATUS LIKE "Ssl_cipher"") print(cur.fetchone()) cur.close() cnx.close()
Примеры возможных выводов данных:
("Ssl_cipher", "DHE-RSA-AES256-SHA")
Я решил отказаться от использования MySQL, а точнее полностью перевести все свои сервера на ее форк — MariaDB. Пользуясь случаем, хочу рассказать о процессе установки MariaDB 10.1 в Debian 8. Следует отметить, что краткое описание установки MariaDB есть на официальной странице проекта. Я решил выделить этому вопросу отдельный пост, в котором хочу описать необходимые действия после установки MariaDB на сервере.
Перед началом установки MariaDB необходимо добавить ее репозиторий. На сайте MariaDB рекомендуют для этого установить пакет software-properties-common . Я не вижу в этом никакого смысла и предпочитаю все делать вручную.
Регистрируем GPG-ключ репозитория в системе:
Apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
Добавляем описание репозитория в файл sources.list . Открываем файл в редакторе nano:
Nano /etc/apt/sources.list
Копируем в конец следующие строки:
Deb http://lon1.mirrors.digitalocean.com/mariadb/repo/10.1/debian jessie main deb-src http://lon1.mirrors.digitalocean.com/mariadb/repo/10.1/debian jessie main
Обновляем список доступных пакетов:
Apt-get update
Запускаем процесс установки MariaDB 10.1:
Apt-get install mariadb-server
Во время установки нас попросят ввести пароль для пользователя root . На этом процесс установки MariaDB в Debian 8 закончен. А теперь переходим к настройке сервера.
Чтобы повысить надежность нашего сервера, нужно выполнить минимальные требования безопасности. Запретить авторизацию под пользователем root с удаленных хостов. При наличии базы test и пользователя anonymous , нужно удалить их с сервера. Чтобы облегчить задачу используйте скрипт:
Mysql_secure_installation
Тип хранения данных по умолчанию
Если необходимо изменить тип хранения данных по умолчанию, добавьте в файл my.cnf следующие строки:
Default-storage-engine = innodb
Убедитесь, что MariaDB использует таблицы InnoDB по умолчанию. Для этого выполните команду:
SHOW ENGINES;
Создать пользователя и базу MariaDB
Чтобы создать пользователя в MariaDB используйте команду ниже:
CREATE USER "USER_NAME"@"localhost" IDENTIFIED BY "PASSWORD";
Создаем новую базу:
CREATE DATABASE database_name;
Даем полные права пользователю USER_NAME на базу databasename:
GRANT ALL PRIVILEGES ON database_name.* TO "USER_NAME"@"localhost";
Теперь нужно обновить все привилегии:
FLUSH PRIVILEGES
Для просмотра привилегий выполните команду:
SHOW GRANTS FOR "USER_NAME"@"localhost";
Бинарные логи
MariaDB записывает все изменения БД в бинарный журнал, он необходим для работы механизма репликации. Если вы не делали бэкапов или они устарели, бинарные логи можно использовать для восстановления данных. Впрочем, нет никакой гарантии, что данные будут полностью или частично восстановлены. Успех будет зависеть от размера, времени хранения бинарных логов, частоты выполнения бэкапа.
Для отключения бинарных логов, комментируем строки в файле my.cnf:
#log_bin = /var/log/mysql/mariadb-bin #log_bin_index = /var/log/mysql/mariadb-bin.index
2 января, 2017 12:16 пп 13 224 views | Комментариев нетТребования
- Сервер CentOS 7.
- Пользователь с доступом к sudo.
Все необходимые инструкции можно найти в .
1: Установка MariaDB
Чтобы установить MariaDB, используйте репозиторий Yum. Запустите следующую команду и нажмите y, чтобы продолжить.
sudo yum install mariadb-server
После завершения установки запустите демон:
sudo systemctl start mariadb
Команда systemctl не показывает вывод некоторых команд. Чтобы убедиться, что демон запущен, введите:
sudo systemctl status mariadb
Если демон MariaDB был запущен, в выводе команды будут строки:
Active: active (running)
[…]
Dec 01 19:06:20 centos-512mb-sfo2-01 systemd: Started MariaDB database server.
Теперь нужно настроить автозапуск MariaDB. Для этого введите:
sudo systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
После этого нужно обеспечить безопасность данных.
2: Безопасность MariaDB
После завершения установки нужно запустить встроенный сценарий безопасности MariaDB, который изменяет некоторые опции по умолчанию и блокирует удалённый root-логин. Чтобы запустить сценарий, введите:
sudo mysql_secure_installation
Сценарий предоставляет подробное описание каждого шага. Сначала он запросит root-пароль. Поскольку в новой установке такого пароля пока нет, просто нажмите Enter. После этого сценарий предложит вам создать такой пароль. Введите сложный пароль и подтвердите его.
После этого сценарий задаст вам ряд вопросов. Чтобы принять данные по умолчанию, можете просто нажать Y и Enter. Сценарий заблокирует анонимных пользователей и удалённый root логин, удалит тестовые таблицы и перезагрузит привилегии.
3: Тестирование MariaDB
Теперь нужно убедиться, что установка MariaDB прошла успешно.
Попробуйте подключиться к БД с помощью инструмента mysqladmin (это клиент для запуска команд администрирования). Чтобы подключиться к MariaDB как root (-u root), ввести пароль (-p) и запросить версию программы, введите команду:
mysqladmin -u root -p version
Команда выведет:
mysqladmin Ver 9.0 Distrib 5.5.50-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Server version 5.5.50-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 4 min 4 sec
Threads: 1 Questions: 42 Slow queries: 0 Opens: 1 Flush tables: 2 Open tables: 27 Queries per second avg: 0.172
Это значит, что установка СУБД MariaDB прошла успешно.
Заключение
Теперь вы умеете выполнять базовую установку и настройку MariaDB.
В данной статье мы рассмотрим как установить и настроить Linux, Apache, MariaDB, PHP на Centos7 /RHEL 7. В новой версии Centos7 /RHEL 7 много изменений.
Что такое LAMP?
LAMP — комплект программного обеспечения на ОС, состоящей из операционной системы Linux, веб-сервера Apache, сервера базы данных MySQL и языка программирования PHP (или Perl / Python) . LAMP используется для работы тяжелых динамических веб-сайтов полностью состоящий из свободного программного обеспечения с открытым исходным кодом. В этой статье я собираюсь объяснить, как Linux, Apache, MySQL / MariaDB (замена для MySQL), PHP (LAMP) устанавливаются на CentOS 7 или RHEL 7.
- Устанавливаем RHEL 7 или CentOS 7 сервер. Открываем терминал к серверу по ssh, у Вас должны быть права суперпользователя root.
- Вам также понадобятся знания команд yum
- Вам понадобится IP адрес вашего сервера, используйте следующую комманду, что бы определить IP адрес для интерфейса eth0
- Полученный IP 10.180.10.10 адрес будем использовать для тестирования установки
Итак приступим
Установка Apache on a CentOS 7 /RHEL 7 сервер
Для установки веб сервера используем команду
Yum install httpd
Включите службу HTTPd в автозагрузки
systemctl enable httpd.service ln -s "/usr/lib/systemd/system/httpd.service" "/etc/systemd/system/multi-user.target.wants/httpd.service"Чтобы отключить, автоматическую загрузку
Systemctl disable httpd.service rm "/etc/systemd/system/multi-user.target.wants/httpd.service"
Запустите HTTPd службу на CentOS 7 / RHEL 7
systemctl start httpd.serviceНа данном этапе вы можете указать в веб-браузере IP-адрес вашего сервера, http://10.180.10.10. Вы увидите стартовую страницу apache:
Остановка HTTPd службы на CentOS 7 / RHEL 7
systemctl stop httpd.serviceПерезапуск HTTPd службы на CentOS 7 / RHEL 7
Просмотр статуса apache службы на CentOS 7 / RHEL 7
Убедитесь что веб сервер запущен
Systemctl status httpd.service
Также перезапуск веб сервера может быть выполнен следующей командой
Apachectl graceful
Проверка apache / httpd на наличие ошибок конфигурации в Centos 7/ RHEL 7
Apachectl configtest
Конфигурация по умолчанию HTTPD сервера:
- По умолчанию конфигурационный файл: /etc/httpd/conf/httpd.conf
- Файлы конфигурации, загружаемых модулей: /etc/httpd/conf.modules.d/ (например, PHP)
- Выберите MPMs как загружаемые модули и события: / etc/httpd/conf.modules.d/00-mpm.conf
- Стандартные порты: 80 и 443 (SSL)
- Файлы журналов по умолчанию: /var/log/httpd/{access_log,error_log}
Установка MariaDB на сервере CentOS 7 / RHEL
MariaDB — обновленная замена для сервера MySQL. На RHEL / CentOS 7 вместо MySQL используется система управления базами данных MariaDB. Введите следующую yum команду для установки MariaDB сервера:
Yum install mariadb-server mariadb
Для запуска MariaDB, используйте команду:
Systemctl start mariadb.service
Чтобы убедиться, что сервис MariaDB запускается автоматически во время загрузки, введите:
Systemctl enable mariadb.service
Вывод команды
Ln -s "/usr/lib/systemd/system/mariadb.service" "/etc/systemd/system/multi-user.target.wants/mariadb.service"
Чтобы остановить / перезапуск и отключить MariaDB используйте следующие команды:
Sudo systemctl stop mariadb.service #-- Остановить mariadb сервер sudo systemctl restart mariadb.service #-- Перзапусить mariadb сервер sudo systemctl disable mariadb.service #-- Отключить автозагрузку mariadb сервер sudo systemctl is-active mariadb.service #-- Проверка запущен ли сервер?
Первый запуск MariaDB
Введите следующую команду:
/usr/bin/mysql_secure_installation
Отвечая на вопросы Вы сможете настроить первоначальную безопасность БД
Проверка установки MariaDB
Введите следующую команду
Mysql -u root -p
Пример вывода:
Установка PHP на CentOS 7 / RHEL 7
Для установки PHP и модулей, такие как GD / mysql введите следующую комманду
Yum install php php-mysql php-gd php-pear
Необходимо перезагрузить HTTPD (Apache) сервер, введите:
Systemctl restart httpd.service
Для поиска всех других PHP модулей:
Yum search php-
Чтобы получить более подробную информацию о модуле:
Yum info php-pgsql
Проверка PHP на сервере
Создайте файл с именем /var/www/html/test.php следующим образом:
Vi /var/www/html/test.php
Добавьте следующий код:
LAMP сервер установлен, если у вас есть проблемы с настройкой сервера, мы производим разовые работы по установке и настройке web сервера LAMP .
Начиная с версии Debian 9 популярную систему управления базами данных MySQL заменила MariaDB. Данная СУБД является ответвлением от MySQL созданная ее первоначальными разработчиками, которые оказались недовольны лицензионной политикой Oracle и испытывали опасения, что MySQL может стать более закрытым продуктом. MariaDB является полностью совместимой с MySQL, а это значит, что замена произойдет максимально прозрачно и все приложения, которые работали с MySQL также будут работать с MariaDB. А мы же рассмотрим некоторые особенности этого перехода.
Прежде всего скажем, что все команды, инструкции, скрипты и т.д. и т.п. которые раньше работали с MySQL будут также работать с MariaDB, никаких изменений вносить не нужно и многие пользователи просто могут не заметить, что работают с другой СУБД.
Но есть и отличия, прежде всего они касаются безопасности и были внесены командой Debian. Одним из основных отличий является то, то MariaDB входящая в состав Debian 9 не запрашивает пароль root при установке . После чего пользователь остается в некоторой растерянности, а что делать дальше? Масла в огонь подливает тот факт, что большинство инструкций в сети интернет рассматривают управление MySQL сугубо через панель управления phpMyAdmin, и не имеющие навыков работы в командной строке пользователи оказываются в особо беспомощном состоянии.
"Как установить пароль root в MariaDB " в разных вариациях является одним из популярных поисковых запросов, связанных с этой СУБД. Но не будем рубить с плеча, а сначала разберемся, что сделали разработчики Debian и для чего.
Самой большой проблемой безопасности MySQL является то, что учетные данные для доступа к БД хранятся в конфигурационных файлах веб-приложений открытым текстом. С учетом того, что многие пользователи не заморачиваются и делают владельцем всех баз суперпользователя root - проблема становится довольно серьезной. А если учесть, что доступ к файлам веб-приложений может иметь достаточно широкий круг лиц, включая не только сотрудников, но и фрилансеров - становится совсем плохо.
Поэтому в Debian для суперпользователя root в MariaDB предусмотрена аутентификация через UNIX-сокет и реализована она таким образом, что неограниченный доступ к MariaDB может получить только суперпользовтаель системы и только в режиме командной строки. С точки зрения безопасности это очень правильно, так как теперь сторонние пользователи и веб-приложения не смогут получить доступ с правами root, даже если они каким-то образом узнали пароль.
Все это хорошо, но что делать обычному пользователю, который поставил MariaDB на свой сервер и хочет залить на нее дамп базы сайта? Прежде всего завести пользователя, лучше даже не одного. Для этого поднимем свои права в системе до root через su или sudo и выполним команду:
Mysql -u root
После чего вы окажетесь в командной строке MariaDB. Для того, чтобы создать нового пользователя выполним команду:
create user "andrey" @ "localhost" identified by "password" ;В нашем примере мы создали пользователя andrey с паролем password .
Теперь назначим ему права. Прежде всего явно заберем права на чужие базы:
grant usage on *.* to "andrey"@"localhost";И выдадим полные права на базы с шаблоном имени andrey_basename, такой подход позволит автоматически давать права всем новым базам которые будет создавать пользователь.
grant all privileges on `andrey\_%`.* to "andrey"@"localhost";Обратите внимание, что шаблон оборачивается символами грависа (`) , который находится на клавише с русской буквой Ё.
Остается только перезагрузить привелегии и выйти из консоли MariaDB
flush privileges;quit;
После чего можно вернуться к привычным инструментам работы с MySQL/MariaDB, например, phpMyAdmin:
Обратите внимание, что данный способ, в отличие от распространенных рекомендаций "включить root в MariaDB", позволяет сохранить повышенную безопасность системы, что важно, если доступ к ней будут иметь третьи лица. Также мы не советуем держать все базы под одним пользователем, в идеале один сайт (или иное приложение) - один пользователь, это позволит без лишних затрат времени и сил сменить пароль в случае его компрометации или ее потенциальной возможности (скажем вы привлекали для работ с сайтом фрилансера).
Установка MariaDB из репозиториев разработчика
Операционная система Debian имеет много достоинств, одно из них, за которое его больше всего любят - это стабильность. Настроил и забыл - это как раз про него, но оборотной стороной такого подхода является консервативность, многие пакеты имеют не столь свежие версии, как иногда хотелось бы. В настоящий момент вместе с Debian 9 поставляется MariaDB 10.1, в то время как текущими версиями являются 10.2 и 10.3.
Поэтому если вам нужны какие-то новые функции MariaDB или вы просто хотите использовать последние стабильные версии софта, то можете установить MariaDB непосредственно из репозиториев разработчика. Сделать это несложно, но перед любым потенциально опасным действием следует сделать полную резервную копию вашего сервера.
Для этого выполните в консоли сервера с правами суперпользователя следующую команду:
Mysqldump -u root --all-databases > ~/my_backup.sql
Эта команда сохранит все базы MariaDB, включая служебные, в файл my_backup.sql в директории /root и, если что-то пойдет не так, вы всегда сможете восстановить состояние вашего сервера на момент создания копии.
Получить инструкции по установке можно на специальной странице официального сайта.
Сделана она очень удобно: вы выбираете свой дистрибутив, его выпуск, версию СУБД и зеркало - после чего получаете готовую инструкцию для установки. Чтобы сэкономить вам время приведем ее здесь (мы будем устанавливать MariaDB 10.3 на Debian 9):
Apt-get install software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository "deb http://mirror.mephi.ru/mariadb/repo/10.3/debian stretch main"
Чтобы вы понимали, что делаете кратко прокомментируем эти команды. Первая из них добавляет в систему нужные зависимости, вторая устанавливает ключ, которым подписаны пакеты и третья, наконец, добавляет в систему сам репозиторий.
Теперь обновим список пакетов:
Apt-get update
и установим новую версию MariaDB:
Apt-get install mariadb-server
Обратите внимание, что пакетный менеджер корректно удалит предыдущую версию и установит новую, все базы данных при этом сохранятся и продолжат работать с новой версией MariaDB.
Второй момент, при установке MariaDB от разработчиков инсталлятор попросит у вас задать пароль root, так как в этой версии аутентификация через UNIX-сокет не используется.
Кого-то может это и порадует, но если вы успели понять и оценить все достоинства способа от разработчиков Debain, то возникнет резонный вопрос: а можно ли вернуть как было? Можно. Для этого откройте конфигурационный файл /etc/mysql/mariadb.conf.d/50-server.cnf и добавьте в секцию строку:
Plugin-load-add = auth_socket.so
Перезапустим СУБД:
Service mysqld restart
Попробуем войти из учетной записи обычного пользователя:
Несмотря на то, что система спросит нас пароль и мы его правильно введем - в доступе нам будет все равно отказано. Повторим попытку через phpMyAdmin:
И здесь успеха у нас не будет. Отлично! Теперь доступ с правами суперпользователя СУБД имеет только суперпользователь системы и нам не нужно беспокоиться, что пароль root MariaDB станет известен кому-либо.