Как я могу работать с привилегиями root@localhost в MySQL?

Я пытаюсь запустить инструкцию GRANT ALL:

GRANT ALL ON daisyrepository.* TO daisy@localhost IDENTIFIED BY 'password_here';

Я выполнил это утверждение на самом сервере с помощью удаленного рабочего стола, используя:

  • PHPMyAdmin
  • Администратор MySQL
  • Клиент командной строки

Каждый раз, когда я запускаю этот оператор, я получаю следующую ошибку:

ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'daisyrepository'

Немного информации о привилегиях:

корень@%

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, EXECUTE 

root@localhost

ALL PRIVILEGES 

Если я правильно понимаю, даже если я подключен к серверу, MySQL обрабатывает мои утверждения так, как будто я пришел из удаленного места?

Правка №1 Уточнение: на сервере, к которому я подключен, также работает MySQL.

Редактировать №2 После входа в RDP я вхожу в MySQL с помощью командной строки. Если я запускаю select current_user(), я получаю [email protected]. В файле my.ini также есть skip_name_resolve.


person TekiusFanatikus    schedule 04.05.2011    source источник
comment
где майскл сервер? на локальном хосте? В смысле на той же машине?   -  person jotapdiez    schedule 04.05.2011
comment
Да, я использовал удаленный рабочий стол для доступа к серверу, на котором работал MySQL.   -  person TekiusFanatikus    schedule 04.05.2011
comment
Что произойдет, если вы попытаетесь запустить это как root: GRANT ALL on *.* to root@localhost identified by '$roots_password'; (убедитесь, что вы указали правильный пароль)   -  person AJ.    schedule 04.05.2011
comment
#1045 - Доступ запрещен для пользователя 'root'@'%' (используя пароль: ДА)   -  person TekiusFanatikus    schedule 04.05.2011
comment
имеет ли сервер несколько сетевых карт (несколько IP-адресов). Кроме того, если вы используете Windows, убедитесь, что ваш файл hosts имеет локальный хост 127.0.0.1.   -  person Abe Petrillo    schedule 06.05.2011
comment
@Abe: Мой файл hosts содержит 127.0.0.1 для localhost. И у него нет двух IP-адресов/сетевых карт. к вашему сведению.   -  person TekiusFanatikus    schedule 09.05.2011


Ответы (1)


Похоже, вы всегда подключаетесь через TCP (а не через сокеты Unix в Linux или именованные каналы в Windows). Поскольку у вас есть skip_name_resolve в вашем ini-файле, сервер не реверсирует DNS-адрес 127.0.0.1 обратно на localhost, поэтому пользователь, которого вы видите, является [email protected], а не root@localhost.

Если можете, удалите skip_name_resolve из ini-файла и убедитесь, что, как упоминает Эйб Петрилло, у вас есть «127.0.0.1 localhost» в вашем файле hosts. Это должно позволить вам подключиться как root@localhost. Если вам нужно вернуть skip_name_resolve, обязательно запустите,

GRANT ALL on *.* to 'root'@'127.0.0.1' identified by '$roots_password' WITH GRANT OPTION;

что должно позволить вам добавить skip_name_resolve обратно в ваш ini-файл.

person JohnC    schedule 06.05.2011
comment
Означает ли это, что у меня будет 3 набора разрешений: %, 127.0.0.1 и localhost? Это норма? И должен ли я работать без skip_name_resolved? - person TekiusFanatikus; 09.05.2011
comment
--skip-name-resolve: не разрешать имена хостов при проверке клиентских подключений. Используйте только IP-адреса. Если вы используете этот параметр, все значения столбца Host в таблицах предоставления должны быть IP-адресами или локальным хостом. У меня складывается впечатление, что я должен попытаться выяснить, почему я не могу подключиться с использованием именованных каналов? - person TekiusFanatikus; 09.05.2011
comment
@TekiusFanatikus Обычно у меня не было бы «корня» @'%'. Если другим серверам необходимо подключиться, назначьте определенных пользователей с заблокированными привилегиями. «root» @ «localhost» мы обычно оставляем (если у него надежный пароль), так как это путь по умолчанию, если что-то пойдет не так. 'root'@'127.0.0.1' нужен только в том случае, если вы решите сохранить skip_name_resolve. Мы использовали серверы как с, так и без. Разрешение IP-адресов означает, что мы можем перемещать клиентские серверы на другие IP-адреса без необходимости обновления разрешений, но можем предотвратить некоторые соединения, если когда-либо возникнет проблема с локальными DNS-серверами. - person JohnC; 09.05.2011
comment
Мне все еще трудно понять, почему я не могу получить доступ к root@localhost, когда я использую RDP на машине, на которой работает MySQL. Если вы посмотрите документацию о skip-name-resolve (dev.mysql.com/doc/refman/5.1/en/), там указаны IP-адреса или локальный хост. В моем случае у меня есть подстановочный знак и локальный хост. Позволит ли мне избавиться от подстановочного знака доступ к локальному хосту? И если я посмотрю dev.mysql.com/doc/refman /5.0/en/connection-access.html, он сначала сортирует подстановочный знак, затем локальный хост... так что, может быть, мне следует избавиться от root@%?? - person TekiusFanatikus; 09.05.2011
comment
@TekiusFanatikus: dev.mysql.com/doc/refman/5.0/en/connection-access.html говорит, что он сортирует определенные хосты перед любыми подстановочными знаками, поэтому вам не нужно удалять root@%. Проблема в том, что skip_name_resolve означает, что TCP-соединение 127.0.0.1 никогда не получает обратный DNS-адрес на localhost. Мы склонны использовать MySQL в Linux, который по умолчанию использует сокеты unix при запуске локального клиента. Это устанавливает имя пользователя на @'localhost', следовательно, причина сохранения записи @localhost. Я не уверен, устанавливает ли Windows имя хоста на localhost при подключении к именованным каналам, поскольку мы не используем его таким образом. - person JohnC; 09.05.2011