Я только что установил Ubuntu 16.04 LTS вместе с пакетами php
, mariadb
и nginx
. Я запустил mysql_secure_installation
и изменил пароль root.
Теперь, когда я пытаюсь войти в систему с mysql
использованием учетной записи root, когда вы вошли в Ubuntu как обычная учетная запись пользователя, я получаю доступ запрещен.
Когда я захожу с помощью sudo mysql
, mysql даже не спрашивает меня пароль. Если я запускаю, mysql_secure_installtion
я вижу, что старые настройки никогда не устанавливаются постоянно.
Что я делаю неправильно?
источник
%
означает, что вы можете подключиться откуда угодно ... удаленно?grant all privileges on *.* to 'root'@'localhost' with grant option;
Взято из изменения пароля пользователя в MySQL 5.7 с помощью «plugin: auth_socket»
Таким образом, чтобы изменить
plugin
обратноmysql_native_password
:Войти с помощью sudo:
Измените
plugin
и установите пароль с помощью одной команды:Конечно, вы также можете использовать команду выше, чтобы установить пустой пароль.
Просто для записи (и
MariaDB < 10.2
пользователей) есть также другой способ изменить толькоplugin
без предоставления пароля (оставив его пустым):источник
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;
Источник: stackoverflow.com/a/41537019/1004587Короче, на MariaDB
где вы заменяете NEWPASSWORD на нужный вам пароль, а все остальное дословно.
Проблема здесь в том, что когда MariaDB или MySQL установлены / обновлены (особенно если в какой-то момент root установлен без пароля), тогда в таблице Users пароль фактически пуст (или игнорируется), и вход в систему зависит от пользователя системы, соответствующего пользователю MySQL. Вы можете проверить это следующим образом, перейдя в корневой каталог системы, а затем введите:
Затем введите либо пароль, либо неверный пароль. Скорее всего, вас впустят. (Вы даже можете войти в систему из корня unix просто
# mysql
потому, что пароль не имеет значения и пользователь определен).Так что же происходит? Хорошо, если вы войдете в систему как root и сделаете следующее:
Вы заметите
auth_socket
(что можно прочитатьunix_socket
на MariaDB). Эти сокеты игнорируют пароли и позволяют соответствующему пользователю Unix войти без проверки пароля. Вот почему вы можете войти в систему как root, но не с другим пользователем.Таким образом, решение состоит в том, чтобы обновить пользователей, чтобы они не использовали
auth_socket/unix_socket
и правильно установить пароль.На MariaDB (<10.2, см. Комментарии ниже), который на Ubuntu версии 16 на 2017 год, этого должно быть достаточно. NEWPASSWORD - это ваш пароль.
mysql_native_password
вы вводите дословно.(Возможно, что установка плагина на пустой будет работать. YMMV. Я не пробовал это. Так что это альтернатива.)
В противном случае:
затем
Напомним, что решение, включающее удаление пользователя и воссоздание его с помощью «%», полностью блокирует меня из базы данных и может вызвать другие проблемы, если вы не получите
grant
правильное утверждение - проще просто обновить корень, который у вас уже есть.По моему опыту, проблема возникает только с пользователем root, так как другие пользователи будут добавлены вручную, а не частью первоначальной установки / обновления.
источник
mysql_secure_installation
таким же эффектом не получилось. Где хранится новый пароль?UPDATE
с, которые применяются к MariaDB <10.2 иALTER
другие версии? И является ли второйUPDATE
альтернативой первому, или нам нужно ввести оба? Наконец, «mysql_native_password» - это что-то для дословного ввода, или мы должны заменить его нашим предполагаемым паролем root для MySQL?mysql_native_password
тот вариант.Если вы установили MySQL / MariaDB из базового репозитория, пользователи не могут войти в MySQL как root-пользователь MySQL из своих учетных записей Unix (не применимо, если у них есть доступ sudo )
Войдите в корневую оболочку MySQL:
Выполните следующие запросы:
Откройте новую оболочку, затем:
Источник
источник
mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Попробуйте создать новую учетную запись mysql, для меня это сработало (mysql 5.7.12):
Войти как sudo:
Создайте нового пользователя и предоставьте ему привилегии (без пароля):
Войти как новый пользователь:
источник
Мне пришлось сделать две вещи (благодаря @Todor и @Loremhipsum):
а потом:
Я бы не рекомендовал сбрасывать пользователя
root
.источник
Попробуйте сначала этот код,
а потом,
затем нажмите
Ctrl+Z
и введите:bg
для запуска процесса с переднего плана на задний план, а затем проверьте свой доступ с помощью:источник
Если вы просто запустите команду mysql под пользователем root, вам будет предоставлен доступ без запроса пароля, потому что аутентификация сокета включена для root @ localhost. ,
Единственный способ установить пароль - переключиться на собственную аутентификацию, например:
источник
Я адаптировал некоторые сценарии инициализации, которые я создал, чтобы использовать MariaDB, и столкнулся с этой проблемой. Собирая воедино много информации , ответ Газзера в этом вопросе действительно обнуляется ; все сводится к настройке
auth_socket
/unix_socket
.Поэтому при использовании MariaDB 5.5 (под Ubuntu 14.04) и MariaDB 10 под (Ubuntu 16.04) вход в MySQL и выполнение этой команды сразу все проясняло:
Другие ответы, включая самый высокий голос за этот пост от Loremhipsum, действительно поощряют плохие практики, рекомендуя удалить пользователя, а затем воссоздать его. Для меня это довольно радикальное решение. Лучшее / простое решение для обнуления
plugin
стоимости, сброса привилегий и продолжения жизни.источник
У меня была та же проблема, и я запустил следующие исправления:
источник
root
задаютсяplugin
нестандартные настройки. Единственный крайний случай, когда обновление БД может помочь в подобном случае, если самmysql_upgrade
процесс учитываетplugin
настройки, в которых я сомневаюсь.