Spec-Zone.ru › MariaDB

Аутентификация из MariaDB 10.4

MariaDB, начиная с 10.4

MariaDB 10.4 внесла ряд изменений в процесс аутентификации, направленных на упрощение и интуитивность.

Обзор

В версии 10.4 есть четыре новых основных функции, относящихся к аутентификации:

  • Можно использовать более одного плагина аутентификации для каждой учетной записи пользователя. Например, это может быть полезно для постепенной миграции пользователей на более безопасный ed25519 плагин аутентификации со временем, сохранив старый mysql_native_password плагин как альтернативу на переходный период.
  • Учетная запись пользователя root@localhost, созданная с помощью mariadb-install-db, создаётся с возможностью использования двух плагинов аутентификации.
    • Сначала она настраивается для попытки использования плагина unix_socket аутентификации. Это позволяет пользователю root@localhost войти без пароля через локальный файл Unix-соккета, определённый переменной системы socket, при условии, что вход выполняется процессом, принадлежащим учетной записи пользователя root операционной системы.
    • Во-вторых, если аутентификация завершается неудачей с помощью плагина unix_socket аутентификации, то она настраивается для попытки использования плагина mysql_native_password аутентификации. Однако первоначально устанавливается неверный пароль, поэтому для аутентификации таким образом необходимо установить пароль с помощью SET PASSWORD.
    • Однако для многих пользователей использование только плагина unix_socket аутентификации может быть достаточно и очень безопасно. Вы можете попробовать войти без пароля, чтобы оценить удобство этого варианта. Помните, что лучший способ защитить свой пароль — это не использовать его!
  • Все учетные записи пользователей, пароли и глобальные привилегии теперь хранятся в таблице mysql.global_priv. Таблица mysql.user всё ещё существует и содержит точно такие же столбцы, что и раньше, но теперь это представление, ссылающееся на таблицу mysql.global_priv. Инструменты, анализирующие таблицу mysql.user, должны продолжать работать так же, как и раньше. С версии MariaDB 10.4.13 определённый пользователь mariadb.sys создаётся как определяющий это представление. Ранее определяющим был root, что приводило к проблемам с привилегиями при изменении этого имени пользователя.
  • MariaDB 10.4 добавляет поддержку срок действия пароля пользователя, которая по умолчанию не активна.

Описание

В результате вышеуказанных изменений исчезла открытая для всех всемогущая учетная запись root. Сценарии установки больше не будут требовать от вас «ПОЖАЛУЙСТА, НЕ ЗАБУДЬТЕ УСТАНОВИТЬ ПАРОЛЬ ДЛЯ ПОЛЬЗОВАТЕЛЯ MariaDB root!», так как учетная запись root создается автоматически и безопасно.

По умолчанию создаются две всемогущие учетные записи — root и пользователь ОС, владеющий каталогом данных, обычно mysql. Они создаются как:

CREATE USER root@localhost IDENTIFIED VIA unix_socket OR mysql_native_password USING 'invalid'
CREATE USER mysql@localhost IDENTIFIED VIA unix_socket OR mysql_native_password USING 'invalid'

Использование unix_socket означает, что если вы являетесь системным пользователем root, вы можете войти как root@locahost без пароля. Этот метод был разработан Отто Кекалаиненом в пакетах Debian MariaDB и успешно используется в Debian с MariaDB 10.0.

Он основан на простом факте, что запросить у системного root пароль не добавляет дополнительной безопасности — root в любом случае имеет полный доступ ко всем файлам данных и всей памяти процесса. Но если не запрашивать пароль, то нет пароля root, который можно забыть (нет необходимости в многочисленных руководствах по сбросу пароля MariaDB root). И если вы хотите написать скрипт для выполнения утомительной работы с базой данных, вам не нужно хранить пароль root в открытом виде для использования скриптом (нет необходимости в пользователе debian-sys-maint).

Тем не менее, некоторые пользователи могут захотеть войти как пользователь MariaDB root без использования sudo. Поэтому старый метод аутентификации — обычный пароль MariaDB — по-прежнему доступен. По умолчанию он отключен («недействительный» не является допустимым хешем пароля), но вы можете установить пароль с помощью обычного оператора SET PASSWORD. И при этом сохранить беспарольный доступ через sudo.

Если вы устанавливаете MariaDB локально (скажем, из tar-архива), вы не захотите использовать sudo для входа. Вот почему MariaDB создает второго всемогущего пользователя с тем же именем, что и системный пользователь, владеющий каталогом данных. В локальных (не системных) установках это будет пользователь, который установил MariaDB — они автоматически получают удобный беспарольный доступ, подобный root, поскольку они в любом случае имеют доступ ко всем файлам данных.

Даже если MariaDB установлена в системе, вы можете не захотеть запускать скрипты обслуживания базы данных как системный root — теперь вы можете запускать их как системного пользователя mysql. И вы будете знать, что они никогда не уничтожат всю вашу систему, даже если вы допустите ошибку в скрипте оболочки.

Однако опытным администраторам MariaDB, привыкшим к старым способам, необходимо внести некоторые изменения. Примеры распространённых задач представлены ниже.

Рецепты

После установки MariaDB в системе первым делом, к которому вы привыкли, было подключение к незащищённой учетной записи root и защита её, то есть установка пароля root:

$ sudo dnf install MariaDB-server
$ mysql -uroot
...
MariaDB> set password = password("XH4VmT3_jt");

Теперь это не только излишне, но и просто не сработает — незащищённой учетной записи root не существует. Чтобы войти как root, используйте

$ sudo dnf install MariaDB-server
$ sudo mysql

Обратите внимание, что это предполагает подключение через unix-сокет, а не через tcp. Если у вас есть protocol=tcp в системном файле /etc/my.cnf, используйте sudo mysql --protocol=socket.

После установки MariaDB локально вы также привыкли подключаться к незащищённой учетной записи root с помощью mysql -uroot. Это тоже не сработает, просто используйте mysql без указания имени пользователя.

Если вы забыли пароль root, не проблема — вы всё ещё можете подключиться с помощью sudo и изменить пароль. И если вы также удалили аутентификацию unix_socket, чтобы восстановить доступ, сделайте следующее:

  • перезапустите MariaDB с параметром --skip-grant-tables
  • войдите в незащищённый сервер
  • выполните FLUSH PRIVILEGES (обратите внимание, что до версии 10.4 это был последний шаг, но теперь это не так). Это отключает --skip-grant-tables и позволяет изменить хранимый метод аутентификации
  • выполните SET PASSWORD FOR root@localhost, чтобы изменить пароль root.

Для просмотра внутри таблиц привилегий старая таблица mysql.user всё ещё существует. Вы можете выбирать из неё, как и раньше, хотя больше нельзя обновлять. Она не отображает альтернативные плагины аутентификации, и это была одна из причин перехода к таблице mysql.global_priv — сложные правила аутентификации не подходили для жёсткой структуры реляционной таблицы. Вы можете выбрать из новой таблицы, например:

select concat(user, '@', host, ' => ', json_detailed(priv)) from mysql.global_priv;

Возвращение к предыдущему методу аутентификации для root@localhost

Если вы не хотите, чтобы учетная запись пользователя root@localhost, созданная с помощью mariadb-install-db, по умолчанию использовала аутентификацию unix_socket, то есть несколько способов вернуть предыдущий метод аутентификации mysql_native_password для этой учетной записи пользователя.

Настройка mariadb-install-db для возврата к предыдущему методу аутентификации

Один из способов вернуть предыдущий метод аутентификации mysql_native_password для учетной записи пользователя root@localhost заключается в выполнении mariadb-install-db с особым параметром. Если mariadb-install-db выполняется с указанием параметра --auth-root-authentication-method=normal, то он создаст учетные записи по умолчанию, используя поведение по умолчанию MariaDB 10.3 и более ранних версий.

Это означает, что учетная запись пользователя root@localhost будет использовать аутентификацию mysql_native_password по умолчанию. Существуют и другие различия. Дополнительную информацию см. в разделе mariadb-install-db: Учетные записи пользователей, созданные по умолчанию.

Например, параметр можно задать в командной строке при выполнении mariadb-install-db:

mariadb-install-db --user=mysql --datadir=/var/lib/mysql --auth-root-authentication-method=normal

Параметр также можно задать в файле параметров в группе параметров, поддерживаемой mariadb-install-db. Например:

[mysql_install_db]
auth_root_authentication_method=normal

Если параметр задан в файле параметров и если mariadb-install-db выполняется, то mariadb-install-db прочитает этот параметр из файла параметров и автоматически установит его.

Изменение учетной записи пользователя для возврата к предыдущему методу аутентификации

Если вы уже установили MariaDB, и учетная запись пользователя root@localhost уже использует аутентификацию unix_socket, то вы можете вернуть старый метод аутентификации mysql_native_password для этой учетной записи, выполнив следующее:

ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("verysecret")

См. также

  • Урок по аутентификации в MariaDB 10 4 (видео)
  • Аутентификация в MariaDB 10.4 — понимание изменений (mariadb.org)
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/authentication-from-mariadb-10-4/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API