MyTetra Share
Делитесь знаниями!
Задание пароля SQL-пользователя root для MariaDB (MySQL) в Debian 9
Время создания: 13.12.2017 17:15
Автор: xintrea
Текстовые метки: linux, mysql, mariadb, root, пользователь, пароль
Раздел: Компьютер - Программирование - SQL - MySQL, MariaDB
Запись: xintrea/mytetra_syncro/master/base/1513173735msmq7znqxk/text.html на raw.github.com

Вместо вступления


В Debian 9 пакет с MySQL сервером называется mariadb-server. Из него, по сути, устанавливается MySql сервер, который с некоторых пор зовется MariaDB. Имена бинарников, конфигурационных каталогов и файлов не поменялись - всё осталось как у MySql. Например, сам бинарник MySql-консоли как назывался mysql, так и называется. Каталог настройки тоже не претерпел изменений:


/etc/mysql


Неужели ничего больше не изменилось? Конечно, изменилось. Например, раньше, при установке MySql сервера, запрашивался пароль для SQL-пользователя root. Теперь этого не происходит. И даже запуск команды:


dpkg-reconfigure mariadb-server


теперь не приводит к запросу логина-пароля SQL-суперпользователя.


Почему так произошло? Как задать пароль SQL-суперпользователя? Разработчики MariaDB решили, что теперь авторизация с сервером должна происходить не по паролю, а по токену. Поэтому в свежеустановленной MariaDB у пользователя root нет пароля.


Примечание. Далее, чтобы упростить повествование, название MariaDB писаться не будет. В конце концов, это всего лишь название пакета и информационная строка в опции --version. Все будет написано так, как будто речь идет о MySql.



Вход в консоль управления


Чтобы зайти в консоль управления, необходимо из-под UNIX-пользователя root дать команду:


mysql -u root -p


На вопрос "Enter password:" надо просто нажать Enter. Если вы дадите эту команду от обычного UNIX-пользователя, то получите ошибку:


ERROR 1698 (28000): Access denied for user 'root'@'localhost'


В общем, c помощью этой команды происходит вход в консоль управления MySql под SQL-пользователем root.



Задание пароля для пользователя root


Для задания пароля SQL-пользователя root, следует активировать базу mysql:


use mysql;


В таблице user имеется всего одна запись (для SQL-пользователя root), и выглядит она так:



MariaDB [mysql]> select Host, User, Password, plugin from user;

+-----------+------+----------+-------------+

| Host      | User | Password | plugin      |

+-----------+------+----------+-------------+

| localhost | root |          | unix_socket |

+-----------+------+----------+-------------+

1 row in set (0.00 sec)



Видно, что у пользователя root отсутсвует пароль, а в плагинах прописан метод подключения через сокет. Задать пароль для root можно следующими командами:


UPDATE user SET Password = PASSWORD('тут_пароль') WHERE User = 'root';


Затем можно отключить плагин unix_socket, чтобы подключение к БД было возможно не только локально:


UPDATE user SET plugin = '' WHERE User = 'root';


Вроде как данную настройку править не обязательно, потому что она дополняет режимы подключения, а не заменяет, но тут мнение экспертов в рунете расходятся.


После чего надо обновить привелегии пользователей:


FLUSH PRIVILEGES;


После этих действий таблица пользователей должна выглядеть примерно так:


MariaDB [mysql]> select Host, User, Password, plugin from user;

+-----------+------+-------------------------------------------+--------+

| Host      | User | Password                                  | plugin |

+-----------+------+-------------------------------------------+--------+

| localhost | root | *2045AB820D86268976EFFA8F604CEF72848B4C1B |        |

+-----------+------+-------------------------------------------+--------+

1 row in set (0.00 sec)


Далее надо проверить, как работает вход в консоль MySql с новым паролем. Выход из консоли:


MariaDB [mysql]> quit

Bye


Повторный вход:


# mysql -u root -p

Enter password: Вводим пароль (при вводе он не будет отображаться)

Welcome to the MariaDB monitor.


Все в порядке.


Теперь, после такой настройки, вход в консоль управления MySql под SQL-пользователем root будет возможен из bash-сессии любого UNIX-пользователя. Надо будет просто ввести пароль. Команда для входа всё та же:


$ mysql -u root -p


Кроме того, после такой настройки начнут устанавливаться соединения с сервером баз данных, инициированные клиентами, которые умеют коннектится "как обычно" - только по логину-паролю. В принципе, именно для этого здесь показана именно такая настройка MySql.



Вместо послесловия


А нужно ли делать все эти настройки? Задавать пароль root? В принципе, нет. Вместо этого можно создать еще одного SQL-пользователя, у которого будет доступ к изменению только одной базы данных. И эта настройка наиболее правильна. Но мы же дилетанты, а не опытные БД админы, которым достаточно одной консоли. А для того, чтобы подключиться к mysql-серверу в качестве администратора с какого-нибудь внешнего GUI менеджера, придется задать пароль администратора.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования