MariaDb: Разница между командами входа “sudo mysql” и “sudo mysql -u root -p”?

Вопрос или проблема

Я запускаю сервер 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;

Это даст вам общее представление о созданных пользователях и их хостах.

Рекомендации

  1. Проверьте права пользователя: Если вы хотите, чтобы пользователь, который аутентифицируется через sudo mysql, имел больший доступ, вам необходимо выдать им соответствующие привилегии.

  2. Управляйте пользователями: Рассмотрите возможность создания отдельных пользователей для различных задач с конкретно назначенными правами, чтобы улучшить безопасность.

  3. Изучите конфигурацию: Проверьте файл конфигурации MariaDB (/etc/mysql/mariadb.conf.d/). Там могут быть указаны важные настройки, касающиеся аутентификации и прав.

Таким образом, ваше замечание о необходимости более глубокого понимания различных методов аутентификации и их влияния на работу с базами данных в MariaDB абсолютно обосновано.

Оцените материал
Добавить комментарий

Капча загружается...