Вопрос: Разрешение доступа к шаблону (%) в MySQL db, получение ошибки «доступ запрещен для« »@« localhost »»


Я создал базу данных и пользователя и разрешил доступ через следующее:

create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;

однако, когда я пытаюсь подключиться к MySQL, я получаю следующую ошибку:

$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)

Если «%» - это подстановочный знак, то разве он не включил бы localhost? Однако, если я не укажу, что я хочу использовать пароль, тогда я могу подключиться к базе данных просто отлично, что не имеет смысла, потому что я указываю пароль при создании пользователя.


13
2018-03-15 05:28


Источник




Ответы:


Попробуйте подключиться к mysql -u someuser -p -h 127.0.0.1,

Если вы можете подключиться без пароля, либо вы сохранили учетные данные в .my.cnf, либо создали учетную запись, которая разрешает доступ без пароля.


Этот комментарий из документов mysql также может быть связан.

http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

Если вы не можете понять, почему вы получаете   Доступ запрещен, удаляется у пользователя   таблица всех записей, содержащих Host   значения, содержащие подстановочные знаки (записи   которые содержат символы «%» или «_»).   Очень распространенная ошибка заключается в том, чтобы вставить новую   запись с Host = '%' и   User = 'some_user', думая, что это   позволяет указать localhost для   подключитесь к одной машине.   причина в том, что это не работает.   привилегии по умолчанию включают   запись с Host = 'localhost' и   Пользователь = ''. Поскольку эта запись имеет Host   Значение «localhost» больше   чем «%», он используется в   предпочтение от новой записи, когда   соединение с localhost! Правильный   процедура заключается в том, чтобы вставить вторую запись   с Host = 'localhost' и   Пользователь = 'some_user' или удалить   запись с Host = 'localhost' и   Пользователь = ''.


12
2018-03-15 05:58



+1 включая определение хоста и ~ / .my.cnf - Andy


Я уверен, что вам нужно следующее:

предоставлять все привилегии на somedb. * to 'someuser' @ '%' с возможностью предоставления;

В вашем заявлении GRANT отсутствует объявление имени хоста.


7
2018-03-15 18:45



Должно быть указано местоположение: GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1'; - nojak


Если вы не можете подключиться к mysql с помощью someuser @ '%', где '%' является подстановочным знаком для имени хоста, убедитесь, что у вас нет записи '@localhost в вашей пользовательской таблице. Подтвердите, используя следующий оператор SQL:

    mysql> SELECT * FROM user WHERE user='' AND host='localhost';

Если «@localhost» существует, удалите его, выпустив следующий оператор SQL:

    mysql> DELETE FROM user WHERE user='' AND host='localhost';

затем наконец

    FLUSH PRIVILEGES;

Теперь someuser @ '%' подключится к базе данных.


6
2017-07-19 13:08



Предоставление привилегий «имя пользователя» @ «localhost» не приведет к тому, что гранты одного и того же пользователя из другого места не будут работать. - nojak
как это уместно? что делает «пользователь» в «localhost»? - Steve Buzonas
@SteveBuzonas Это абсолютно актуально. Он представляет собой пример кода для ответа, отправленного Zoredache. Локальный адрес более специфичен, чем «%», поэтому, если вы пытаетесь подключиться через localhost с пользователем, который имеет доступ только на «%», запись localhost более конкретна, поэтому mysql пытается войти в систему на локальном хосте, но ожидает пустого имени пользователя и пустой пароль. Поскольку это не учетные данные, вы получаете отказ в доступе к доступу. Удалив эти записи, он обеспечивает доступ для пользователей в%. - bstakes
@bstakes поведение по умолчанию клиента mysql заключается в использовании вашего имени пользователя оболочки, если вы его не укажете. вопрос имеет пользователя в примере и в сообщении об ошибке. Мне было любопытно, как «пользователь» будет конфликтует с именованным пользователем. является «подстановочным знаком»? - Steve Buzonas
@SteveBuzonas '' работает как шаблон для локального хоста. Из Документов MySQL и показано в ответе выше, ссылаясь на значение по умолчанию, которое вы упомянули: «Поскольку эта запись имеет значение Host« localhost », которое более специфично, чем«% », оно используется в предпочтении новой записи при подключении с localhost Правильная процедура заключается в том, чтобы вставить вторую запись с Host = 'localhost' и User = 'some_user' или удалить запись с Host = 'localhost' и User = ''. " - bstakes


Мое понимание, и я готов к исправлению этого, заключается в том, что MySQL рассматривает localhost отдельно на%. то есть localhost не включен в подстановочный знак.


4
2018-03-15 10:23



Примеры, представленные в dev.mysql.com/doc/refman/5.1/en/connection-access.html заставил меня поверить, что это может быть неточным. У вас есть ссылки в противном случае? - Warner
Мое понимание этого вопроса основано на том, что другие сообщают об одной и той же проблеме, как в печати, так и в устной форме, и разрешают ее, создавая 2 пользователей, используя «%» и «localhost». Я не могу вспомнить, когда-либо видел, что это официально документировано. - John Gardeniers
Это похоже на Ubuntu 12.04 LTS по крайней мере - Dex


Вы запустили flush privileges; после создания пользователя? Если этого не произойдет, изменения для пользователей / разрешений не будут выполняться до тех пор, пока сервер не будет перезапущен.

Затем убедитесь, что у вас нет записи «%» @ «localhost».


0
2018-03-15 05:40



использование «создать пользователя» и «грант» автоматически сбрасывает привилегии. Вам нужно только очистить привилегии, если вы непосредственно манипулируете базой данных mysql. - Zoredache