Прежде всего позвольте мне упомянуть, что я прошел через многие предложенные вопросы и не нашел подходящего ответа. Вот что я делаю.
Я подключен к своему экземпляру Amazon EC2. Я могу войти с MySQL root с помощью этой команды:
mysql -u root -p
Затем я создал новый счет пользователя с хостом%
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Предоставлены все привилегии для счета пользователя:
grant all privileges on *.* to 'bill'@'%' with grant option;
Затем я выхожу от пользователя root и пытаюсь войти с помощью счета:
mysql -u bill -p
ввел правильный пароль и получил эту ошибку:
ОШИБКА 1045 (28000): доступ запрещен для пользователя 'bill' @ 'localhost' (используя пароль: ДА)
FLUSH PRIVILEGES
?Ответы:
Возможно, у вас есть анонимный пользователь
''@'localhost'
или''@'127.0.0.1'
.Согласно инструкции :
Следовательно, такой анонимный пользователь «маскирует» любого другого пользователя, как
'[any_username]'@'%'
при подключении сlocalhost
.'bill'@'localhost'
соответствует'bill'@'%'
, но будет соответствовать (например)''@'localhost'
заранее.Рекомендуемое решение состоит в том, чтобы удалить этого анонимного пользователя (как правило, в любом случае это хорошая вещь).
Приведенные ниже правки в основном не имеют отношения к основному вопросу. Они предназначены только для ответа на некоторые вопросы, поднятые в других комментариях в этой теме.
Редактировать 1
Аутентификация как
'bill'@'%'
через сокет.Редактировать 2
Точно такая же настройка, за исключением того, что я повторно активировал сеть, и теперь я создаю анонимного пользователя
''@'localhost'
.Редактировать 3
Та же ситуация, что и в редактировании 2, теперь указывается пароль анонимного пользователя.
Вывод 1, из редактирования 1: Можно аутентифицироваться как
'bill'@'%'
через сокет.Вывод 2, из редактирования 2. Независимо от того, подключается ли кто-либо через TCP или через сокет, процесс аутентификации не влияет (за исключением того, что никто не может подключиться, как кто-либо другой, но
'something'@'localhost'
через сокет, очевидно).Вывод 3, из редактирования 3: Хотя я указал
-ubill
, мне предоставили доступ в качестве анонимного пользователя. Это из-за "правил сортировки", рекомендованных выше. Обратите внимание, что в большинстве установок по умолчанию анонимный пользователь без пароля существует (и должен быть защищен / удален).источник
DROP USER ''@'localhost';
. Они не нужны для какой-то особой цели.Пытаться:
источник
Когда ты побежал
и получил эту ошибку
mysqld ожидает, что вы подключитесь как
bill@localhost
Попробуйте создать
bill@localhost
Если вы хотите подключиться удаленно, вы должны указать либо DNS-имя, публичный IP-адрес, либо 127.0.0.1 с использованием TCP / IP:
После входа в систему, пожалуйста, запустите
USER () сообщает, как вы пытались пройти аутентификацию в MySQL
CURRENT_USER () сообщает, как вам разрешили проходить аутентификацию в MySQL из таблицы mysql.user
Это даст вам лучшее представление о том, как и почему вам было разрешено войти в MySQL. Почему это мнение важно знать? Это связано с протоколом заказа аутентификации пользователя.
Вот пример: я создам анонимного пользователя на моем рабочем столе MySQL
ОК, смотри, как я вошел как анонимный пользователь
Порядок аутентификации очень строг. Он проверяет от наиболее конкретного до наименее. Я написал об этом стиле аутентификации в DBA StackExchange .
Не забудьте явно вызвать TCP как протокол для клиента mysql, когда это необходимо.
источник
'bill'@'localhost'
должно совпадать'bill@%'
, не так ли?SELECT USER(),CURRENT_USER();
. Вы почти никогда не увидите анонимных пользователей из этих двух функций, за исключением очень плохих настроек.mysql.user
. На самом деле, если вы прочитаете мой ответ еще раз, вы увидите, что я сказал (на самом деле, в руководстве написано), порядок сортировкиhost
сначала основан на столбце. Вы много писали о том, как проверить свои текущие учетные данные, но я вижу мало информации о том, почему'bill'@'localhost'
не могу войти как'bill'@'%'
, что является сегодняшним вопросом AFAIK. У OP, вероятно, плохая настройка, поэтому он получает эти ошибки.--protocol=TCP
был ключ. Большое спасибо!Супер поздно к этому
Я попробовал все эти другие ответы и запустил много разных версий,
mysql -u root -p
но никогда не бегалmysql -u root -p
И просто нажимаю
[ENTER]
на пароль.Как только я это сделал, это сработало. Надеюсь, это кому-нибудь поможет.
источник
Связанная проблема в моем случае была попытка подключения с помощью:
Пробелы, по- видимому, разрешены между -u # uname #, но НЕ между -p и # password #
Поэтому необходимо:
В противном случае с белым пространством между -p mypass MySQL принимает «» mypass как дб имя
источник
Когда вы печатаете
mysql -u root -p
, вы подключаетесь к серверу mysql через локальный сокет unix.Однако предоставленный вами грант, как
'bill'@'%'
ни странно , соответствует только соединениям TCP / IP.Если вы хотите предоставить доступ к локальному сокету unix, вам нужно предоставить привилегии для 'bill' @ 'localhost', что, как ни странно, не то же самое, что 'bill'@'127.0.0.1'
Вы также можете подключиться с помощью TCP / IP к клиенту командной строки mysql, чтобы соответствовать привилегиям, которые вы уже предоставили, например, запускать
mysql -u root -p -h 192.168.1.123
или какой-либо локальный IP-адрес, который есть у вашего ящика.источник
skip-networking
'bill'@'%'
через сокет на v5.5.Если вы забыли свой пароль или хотите изменить его. Вы можете выполнить следующие действия:
Бинго! Вы можете связать свою базу данных с вашим именем пользователя и новым паролем:
источник
mysql.server stop
. В моем случае я не смог обновить столбец пользователя, потому что его нет; также не может создать его, потому что он находится в безопасном режиме. Для того, что я делаю сейчас, мне все равно, но я действительно ценю этот формат ответа с точными показанными входами и выходами. Спасибо!Избавьте себя от ОСНОВНОЙ головной боли ... Ваша проблема может заключаться в том, что вы пропускаете кавычки вокруг пароля. По крайней мере, это был мой случай, который отвлек меня на 3 часа.
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Найдите «Вот типичный файл опций пользователя:» и посмотрите пример, который там указан. Удачи, и я надеюсь сэкономить кому-то еще время.
источник
Решение состоит в том, чтобы удалить анонимного (любого) пользователя!
Я также столкнулся с той же проблемой при настройке сервера кем-то другим. Обычно я не решаю создать анонимного пользователя после установки MySQL, поэтому не заметил этого. Первоначально я вошел в систему как «root» пользователь и создал пару «обычных» пользователей (то есть пользователей с привилегиями только на dbs с их именем пользователя в качестве префикса), затем вышел из системы и продолжил проверку первого обычного пользователя. Я не мог войти. Ни через phpMyAdmin, ни через shell. Оказывается, виновником этого «любого» пользователя.
источник
У меня была несколько похожая проблема - при первой попытке войти в MySQL, как
root
мне сказали, доступ запрещен. Оказывается, я забыл использоватьsudo
...Итак, если вы потерпели неудачу с
root
первой попытки, попробуйте:и затем введите свой пароль, это должно работать.
источник
Лучшее решение, которое я нашел для себя, это.
мой пользователь - сонар, и всякий раз, когда я пытаюсь подключиться к своей базе данных с внешней или другой машины, я получаю сообщение об ошибке, так как
Кроме того, как я пытаюсь это с другой машины и через работу Jenkins, мой URL для доступа
если вы хотите подключиться удаленно, вы можете указать это различными способами следующим образом:
Чтобы получить доступ к этому с помощью URL, вам просто нужно выполнить следующий запрос.
источник
Хорошо, я не уверен, но, вероятно, виноват этот файл my.cnf внутри установочного каталога mysql. Закомментируйте эту строку, и проблема может быть решена.
источник
Просто хотел сообщить вам необычное обстоятельство, я получил ту же ошибку. Возможно, это поможет кому-то в будущем.
Я разработал несколько базовых представлений, создал их на сайте разработки и перенес их на производственную площадку. Позже на этой неделе я изменил PHP-скрипт, и внезапно возникли ошибки, когда доступ был запрещен для пользователя 'local-web-user' @ 'localhost'. Объект источника данных не изменился, поэтому я сосредоточился на пользователе базы данных в MySQL, опасаясь, пока кто-нибудь взломает мой сайт. К счастью, остальная часть сайта казалась невредимой.
Позже выяснилось, что взгляды были виновником (ами). Наши передачи объектов выполняются с использованием другого (и удаленного: admin @ ip-address) пользователя, нежели пользователь локального веб-сайта. Таким образом, представления были созданы с «admin» @ «IP-адрес» в качестве определителя. По умолчанию создание представления SECURITY
Когда локальный веб-пользователь пытается использовать представление, он сталкивается с отсутствующими привилегиями определителя для использования таблиц. После того, как безопасность была изменена на:
проблема была решена. Фактическая проблема полностью отличалась от ожидаемой на основании сообщения об ошибке.
источник
Это разница между:
а также
Проверь это:
Команда
доступ неявный к 'bill' @ 'localhost' и НЕ к 'bill' @ '%'.
Нет разрешений для 'bill' @ 'localhost'
Вы получаете ошибку:
решение проблемы:
источник
Это также происходит, когда ваш пароль содержит некоторые специальные символы, такие как @, $ и т. Д. Чтобы избежать этой ситуации, вы можете заключить пароль в одинарные кавычки:
Или вместо этого не используйте пароль при вводе. Оставьте это поле пустым, а затем введите его, когда терминал спросит. Это рекомендуемый способ.
источник
pwgen
. Сегодня я создал новый для базы данных MySQL и ее пользователя. К сожалению, пароль содержал обратную косую черту "\", которую я не определил как источник ошибок (я даже не думал об этом). Итак, я часами искал решение. После установки пароля на «123» в отчаянии логин наконец заработал. … Пользователи должны знать, что некоторые специальные символы могут вызывать проблемы, поскольку MySQL не показывает никаких предупреждений об использовании паролей, таких как, например, «daiy4ha4in7chooshuiphie \ Th * aew».Для меня эта проблема была вызвана новой функцией MySQL 5.7.2:
user
записи игнорируются, если ихplugin
поле пусто.Установите его, например,
mysql_native_password
чтобы включить их:См. Примечания к выпуску для MySQL 5.7.2 , в разделе «Примечания проверки подлинности».
По какой-то причине (возможно, из-за того, что мои хеши паролей до 4.1 были удалены),
mysql_upgrade
скрипт не установил значение плагина по умолчанию.Я узнал, заметив следующее предупреждение в
/var/log/mysql/error.log
:Я публикую этот ответ здесь, чтобы, возможно, спасти кого-то от использования такого же нелепого количества времени на это, как и я.
источник
Не уверен, что кто-то еще найдет это полезным, но я столкнулся с той же ошибкой и все время искал анонимных пользователей ... а их там не было. Проблема закончилась тем, что для учетной записи пользователя было установлено «Требовать SSL» - что я нашел в PHPMyAdmin, перейдя в раздел «Учетные записи пользователей» и нажав «Изменить привилегии для пользователя». Как только я снял эту опцию, все заработало как положено!
источник
Сводка отладки
Существует большая вероятность того, что вы, возможно, сталкивались с этой проблемой несколько раз в своей работе. Эта проблема возникала у меня чаще всего из-за неправильного ввода имени пользователя или пароля. Хотя это одна из причин, есть много других шансов, что вы можете получить эту проблему. Иногда это выглядит очень похоже, но когда вы копаете глубже, вы поймете несколько факторов, способствующих этой ошибке. В этом посте будет подробно объяснено большинство распространенных причин и способы решения этой проблемы.
Возможные причины:
Это самая распространенная причина этой ошибки. Если вы ввели имя пользователя или пароль неправильно, вы обязательно получите эту ошибку.
Решение:
Решение для этого типа ошибки очень просто. Просто введите правильное имя пользователя и пароль. Эта ошибка будет устранена. В случае, если вы забыли пароль, вы можете сбросить имя пользователя / пароль. Если вы забыли пароль для учетной записи администратора / root, существует много способов сбросить / восстановить пароль root. Я опубликую еще один пост о том, как сбросить пароль root на случай, если вы забудете пароль root.
MySQL предоставляет ограничения на основе хоста для доступа пользователей в качестве функций безопасности. В нашей производственной среде мы использовали ограничение доступа только к серверам приложений. Эта функция действительно полезна во многих производственных сценариях.
Решение:
Когда вы сталкиваетесь с этим типом проблемы, сначала проверьте, разрешен ли ваш хост или нет, проверив таблицу mysql.user. Если он не определен, вы можете обновить или вставить новую запись в таблицу mysql.user. Как правило, доступ с правами root с удаленного компьютера отключен, и это не рекомендуется из-за проблем безопасности. Если у вас есть требования для доступа к вашему серверу с нескольких компьютеров, предоставьте доступ только к этим машинам. Лучше не использовать подстановочные знаки (%) и дает универсальный доступ. Позвольте мне обновить таблицу mysql.user, теперь демосер может получить доступ к серверу MySQL с любого хоста.
Этот тип ошибки возникает, когда пользователь, к которому вы пытаетесь обратиться, не существует на сервере MySQL.
Решения:
Когда вы сталкиваетесь с этим типом проблемы, просто проверьте, существует ли пользователь в таблице mysql.user или нет. Если запись не существует, пользователь не может получить доступ. Если для этого пользователя требуется доступ, создайте нового пользователя с таким именем.
Важные точки
Не рекомендуется использовать подстановочные знаки при определении хоста пользователя, попробуйте использовать точное имя хоста.
Отключить root-логин с удаленной машины.
Используйте концепцию прокси-пользователя.
Есть несколько других концепций, связанных с этой темой, и подробное описание этих тем очень сильно отличается от этой статьи. Мы рассмотрим следующие связанные темы в следующих статьях.
Я надеюсь, что этот пост поможет вам исправить MySQL Error Code 1045 Доступ запрещен для пользователя в MySQL.
источник
Я надеюсь, что вы не причинили больше вреда, также удалив пользователя debian-sys-maint в mysql
Пусть ваш демон mysql работает в обычном режиме. Запустите клиент MySQL, как показано ниже
В другом терминале
cat
файл/etc/mysql/debian.cnf
. Этот файл содержит пароль; вставьте этот пароль при запросе.http://ubuntuforums.org/showthread.php?t=1836919
источник
Я обнаружил еще один случай, который на поверхности кажется краевым; Я могу экспортировать в файловую систему через SELECT INTO .. OUTFILE как root, но не как обычный пользователь. Хотя это может быть вопросом разрешений, я посмотрел на это и не вижу ничего особенно очевидного. Все, что я могу сказать, это то, что выполнение запроса обычным пользователем, имеющим все разрешения для рассматриваемой базы данных, возвращает ошибку отказа в доступе, которая привела меня к этой теме. Когда я нашел расшифровку успешного использования SELECT INTO… OUTFILE в старом проекте, я заметил, что вошел в систему как root. Конечно, когда я вошел в систему как root, запрос выполнялся как ожидалось.
источник
Обновление: на v8.0.15 (возможно, эта версия)
PASSWORD()
функция не работает.Вы должны:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
источник
Когда вы запускаете
mysql -u bill -p
,localhost
он разрешается в ваш ip, так как это 127.0.0.1 и в вашем/etc/hosts
файле, по умолчанию,127.0.0.1 localhost
существует. Таким образом, MySQL интерпретирует вас как то,bill@localhost
что не предоставляется сbill@'%'
. Поэтомуroot
в результатеselect host, user from mysql.user;
запроса для пользователя есть две разные записи .Есть два способа справиться с этой проблемой.
Один из них - указать IP-адрес, который не разрешается
/etc/hosts
файлом обратно при попытке входа в систему. Например, ip сервера есть10.0.0.2
. Когда вы запустите командуmysql -u bill -p -h 10.0.0.2
, вы сможете войти в систему. Если вы напечатаетеselect user();
, вы получитеbill@10.0.0.2
. Конечно, любое доменное имя не должно быть разрешено до этого IP в вашем/etc/hosts
файле.Во-вторых, вам нужно предоставить доступ для этого конкретного доменного имени. Для
bill@localhost
, вы должны вызвать командуgrant all privileges on *.* to bill@localhost identified by 'billpass';
. В этом случае вы сможете войти с помощью командыmysql -u bill -p
. После входаselect user();
команда возвращаетсяbill@localhost
.Но это только для того, что вы пытаетесь войти на сервер MySQL на том же хосте. С удаленных хостов mysql ведет себя ожидаемо, «%» предоставит вам возможность войти в систему.
источник
Я решил эту проблему , удалив старые ошибочные записи пользователя "bill" (это важная часть: из mysql.user и mysql.db ), затем создал того же пользователя, что и sad, до этого:
Работал, пользователь подключается. Теперь я уберу из этого некоторые превилеты :)
источник
Я столкнулся с той же ошибкой. Настройка, которая не работала, выглядит следующим образом:
Отредактированная установка ниже - та, которая заставила это работать. Заметили разницу?
Разница заключается в двойных кавычках. Они кажутся весьма значимыми в PHP, в отличие от Java, и они оказывают влияние, когда речь идет о экранировании символов, настройке URL-адресов и, теперь, передаче параметров в функцию. Они красивее (я знаю), но всегда используйте одинарные кавычки, насколько это возможно, тогда двойные кавычки могут быть вложены в них, если это необходимо.
Эта ошибка возникла, когда я протестировал свое приложение на Linux-боксе, а не в среде Windows.
источник
У меня были похожие проблемы, потому что мой пароль содержит ";" char взламывает мой пароль, когда я создаю его в первый момент. Осторожно с этим, если может помочь вам.
источник
Это может относиться к очень немногим людям, но здесь идет. Не используйте восклицательный знак
!
в вашем пароле.Я сделал и получил вышеупомянутую ошибку, используя MariaDB. Когда я упростил это до просто цифр и букв, это сработало. Другие символы, такие как
@
и$
работают нормально - я использовал эти символы у другого пользователя в том же экземпляре.Пятый ответ по этому адресу привел меня к решению проблемы .
источник
В Windows вот как решить:
C:\Program Files,C:\Program Files (x86)
иC:\ProgramData
источник
Это также может произойти, если MySQL работает в нечувствительной к регистру ОС, такой как Windows.
Например, я обнаружил, что попытка подключения к базе данных с использованием этих учетных данных не удалась:
MySQL>
grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105
Но это удалось:
MySQL>
grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -h10.300.300.400 databaseV105 -p
источник
Если длина строк вашего имени, имени пользователя, пароля и т. Д. Превышает значения, указанные на https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties , вы может также не войти в систему, как это было в моем случае.
источник
В наше время! Решение для:
Wampserver 3.2.0 новая установка или обновление
Вероятно,
xamp
использованиеmariaDB
по умолчанию хорошо.Wamp
Сервер поставляется сmariaDB
и MySQL, и установкаmariaDB
по умолчанию на порт 3306 и MySQL на 3307, иногда порт 3308.Соединить с
mysql
!При установке он просит использовать
mariaDB
илиMySql
, но mariaDB отмечен по умолчанию, и вы не можете изменить его, проверьтеmysql
опцию и установить.после завершения установки оба будут работать
mariaDB
на порте по умолчанию 3306 иmysql
на другом порту 3307 или 3308.Щелкните правой кнопкой мыши
wampserver
значок, где его запуск должен быть в правом нижнем углу, перейдите к инструментам и посмотрите ваш правильныйmysql
порт запуска.И включите его в соединение с вашей базой данных так же, как folowng:
Note :
Я использую pdo.Смотрите здесь для получения дополнительной информации: https://sourceforge.net/projects/wampserver/
источник