Вопрос или проблема
Я запускаю сервер Ubuntu 22.04 LEMP.
Я пытаюсь войти в MariaDB и показать список ВСЕХ моих баз данных. Однако я получаю два разных списка баз данных в зависимости от того, как я вхожу в MariaDB. Я выполнил sudo mysql_secure_installation
и переключился на аутентификацию через UNIX-сокет.
Если я вхожу в MariaDB, используя sudo mysql
, я получаю это (что показывает только НЕКОТОРЫЕ из моих баз данных, а не все):
sudo mysql
Добро пожаловать в монитор MariaDB. Команды заканчиваются ; или \g.
Ваш ID соединения MariaDB: 14306
Версия сервера: 10.11.9-MariaDB-ubu2204-log бинарная дистрибуция mariadb.org
Авторские права (c) 2000, 2018, Oracle, MariaDB Corporation Ab и другие.
Введите 'help;' или '\h' для справки. Введите '\c', чтобы очистить текущее введенное выражение.
MariaDB [(none)]> show databases;
+--------------------+
| База данных |
+--------------------+
| Database1 |
| Database2 |
| Database3 |
| information_schema |
+--------------------+
4 строки в наборе (0.002 сек)
Если я вхожу в MariaDB, используя sudo mysql -u root -p
, я получаю это (что показывает ВСЕ мои базы данных):
sudo mysql -u root -p
Введите пароль:
Добро пожаловать в монитор MariaDB. Команды заканчиваются ; или \g.
Ваш ID соединения MariaDB: 14330
Версия сервера: 10.11.9-MariaDB-ubu2204-log бинарная дистрибуция mariadb.org
Авторские права (c) 2000, 2018, Oracle, MariaDB Corporation Ab и другие.
Введите 'help;' или '\h' для справки. Введите '\c', чтобы очистить текущее введенное выражение.
MariaDB [(none)]> show databases;
+--------------------+
| База данных |
+--------------------+
| Database1 |
| Database2 |
| Database3 |
| Database4 |
| information_schema |
| mysql |
| Database7 |
| performance_schema |
| Database9 |
| Database10 |
| sys |
+--------------------+
11 строк в наборе (0.002 сек)
Я задаюсь вопросом, почему эти методы входа в MariaDB дают разные результаты команды show databases;
, и каково значение каждой команды (т.е. Правильны ли мои настройки разрешений?, Имplies ли это различие в праве собственности на базы данных и как?, Каково значение каждого способа входа с точки зрения безопасности? Почему оба входа не требуют пароля, а только нажатия клавиши Enter? и т.д.)
Буду признателен за любую актуальную информацию и объяснение!
Похоже, у вас есть пользователь по умолчанию; посмотрите конфигурационный файл. И этот пользователь не имеет всех прав. С другой стороны, базой данных root
(в отличие от “root” ОС) имеет все права, поэтому он видит все выполняемые задачи.
sudo
является ‘красной селедкой’. Это не нужно в этом контексте.
Ответ или решение
Ваша ситуация действительно интересная и поднимает важные аспекты управления пользователями и правами доступа в MariaDB. Давайте разберем, почему вы видите разные списки баз данных при использовании команд sudo mysql
и sudo mysql -u root -p
.
1. Различия между командами
-
sudo mysql
: Эта команда позволяет вам войти в MariaDB от имени пользователя системы, который имеет право доступа к базе данных через сокет. В Ubuntu по умолчанию для пользователяroot
в MariaDB используется аутентификация через сокет. То есть, когда вы входите с помощьюsudo mysql
, вы аутентифицируетесь как системный пользователь и получаете доступ к базам данных от имени пользователя MariaDB, который может отличаться отroot
. -
sudo mysql -u root -p
: В этом случае вы конкретно указываете, что хотите войти как пользовательroot
MariaDB, вводя его пароль. Этот пользователь, как правило, имеет все привилегии и может видеть все базы данных, что объясняет, почему вы видите полный список баз данных.
2. Права доступа и аутентификация
Ваши результаты показывают, что пользователь, который аутентифицируется через sudo mysql
, не имеет всех необходимых прав для отображения всех баз данных. Это может быть связано с тем, что:
- По умолчанию в MariaDB создается некоторый «пользователь по умолчанию» с ограниченными правами.
- Функция аутентификации через сокет позволяет получить доступ некоторым пользователям только к определенным базам данных.
Пользователь root
, в отличие от системного пользователя, имеет все привилегии, включая полный доступ ко всем базам данных и возможность управления ими.
3. Безопасность
Аутентификация через sudo mysql
более безопасна для задач, не требующих администратора базы данных, так как она может ограничивать права уровня доступа, в то время как sudo mysql -u root -p
дает полный доступ (при условии, что пароль верен).
4. Оптимизация доступа
Если вы хотите избежать путаницы с правами доступа, вам стоит проверить, какие пользователи существуют в вашей базе данных и какие права у них есть. Вы можете запустить следующий запрос после входа как root
:
SELECT User, Host FROM mysql.user;
Это даст вам общее представление о созданных пользователях и их хостах.
Рекомендации
-
Проверьте права пользователя: Если вы хотите, чтобы пользователь, который аутентифицируется через
sudo mysql
, имел больший доступ, вам необходимо выдать им соответствующие привилегии. -
Управляйте пользователями: Рассмотрите возможность создания отдельных пользователей для различных задач с конкретно назначенными правами, чтобы улучшить безопасность.
-
Изучите конфигурацию: Проверьте файл конфигурации MariaDB (
/etc/mysql/mariadb.conf.d/
). Там могут быть указаны важные настройки, касающиеся аутентификации и прав.
Таким образом, ваше замечание о необходимости более глубокого понимания различных методов аутентификации и их влияния на работу с базами данных в MariaDB абсолютно обосновано.