1

Тема: Что-то сделал и не пускает phpmyadmin. Пакет Vertrigo Server.

Apache 2.0.64 PHP 5.2.14 Mysql 5.0.91 PhpMyAdmin 2.11.11
Пакет Vertrigo Server  установлен на localhost.
Создал базу данных crystalshop, с помощью Joomla 1.5 заполнил. Сайт был готов, стал переносить на хостинг.
Возникли проблемы, стал экспериментировать в phpmyadmin. Доэкспериментировался.... 8-)
Процесс переноса:
дабы не портить crystalshop, скопировал ее в базу import.
Crystalshop ВООБЩЕ не трогал!!!
В import кроме пользователя admin (всегда переименовываю с root) прописал дополнительного пользователя для хостингового сервера - логин и пароль те, которые дал хостинг. All privilegies.
Стал переносить базу, возникли какие-то проблемы, сайт не работал. Наверное, стоило все это решить с хостинговой компанией, а я вместо этого решил попробовать следующее:
В разделе Привилегии в базе import переназначил обоим пользователячм (admin и hosting) значение с localhost на адрес хоста сервера хостинговой компании.
Все. После этого я не могу попасть в phpmyadmin никак, кроме как пользователем pma, но с него я вижу только базу данных phpmyadmin.
Почему это происходит, я вообще не понимаю. Ну ладно с базой import накосячил, но свою основную crystalshop-то я вообще не трогал! Лежит она, родненькая, в своей папочке, а как попасть-то туда?
Что делать?

2 (изменено: DmitryV, 2011-02-03 13:41:55)

Re: Что-то сделал и не пускает phpmyadmin. Пакет Vertrigo Server.

Правильно, так как Вы запретили пользователям admin и hosting доступ к своему локальному хосту mysql сервера.
Необходимо востановить учетные записи и дать права на заход с localhost (так как вы им изменили права - у них сейчас нет прав на вход с локального адреса).

Пароли хранятся в базе в зашифрованном виде, поэтому восстановить забытый пароль нельзя, однако можно установить новый. Для этого нужно:

1.Перезапустить сервер в режиме --skip-grant-tables
2.Установить новый пароль администратора
3.Перезапустить сервер в обычном режиме
Теперь подробнее о каждом пункте. В режиме skip-grant-tables отключена проверка прав доступа и привилегий, иными словами, вы можете подключиться с пустыми логин/пароль и будете обладать при этом всеми возможными привилегиями.

Примечание. Обратите внимание, что другие пользователи, подключившие до выполнения вами команды flush privileges; или перезагрузки сервера в обычном режиме, также будут обладать администраторскими правами.
MySQL сервер хранит информацию о привилегиях в таблицах привилегий служебной базы mysql. При старте сервера, содержимое таблиц привилегий загружается в память и в дальнейшей работе используется копия, находящаяся в памяти. Команда flush privileges; обновляет данные о привилегиях, загруженные в память. Таким образом, данная команда отменяет режим skip-grant-table и включает проверку прав доступа и привилегий.

Примечание. Обратите внимание, что если вы напрямую редактируете содержимое таблиц привилегий базы mysql, с помощью команд insert, update, delete, то изменения сразу не вступят в силу, так как информация о пользовательских привелегиях, загруженная в память, останется неизменной.
Если использовать рекомендованные команды типа grant или set password, то изменения вступят в силу незамедлительно.
Примечание. Обратите внимание, что изменение прав пользователей не распространяется на уже установленные соединения пользователей. Если нужно отнять у кого-то права, то после следует убедиться, что он не подключен к серверу (с помощью SHOW FULL PROCESSLIST), а если подключен, то убить его поток (оператором KILL).
Для запуска сервера в режиме skip-grant-tables проще всего временно добавить строчку skip-grant-tables в my.ini (для ОС Linux файл будет называться my.cnf) в секции [mysqld]

[mysqld]
skip-grant-tables

другие параметры
Затем перезапустить сервер.

Дальнейшие действия будут зависеть от используемого вами клиента:

1.Если ваш клиент не разрывает соединение после выполнения каждой команды как, например, родной клиент mysql, то первым делом выполняем команду flush privileges;, которая загружает в память таблицы грантов. Затем с помощью команд grant или set password назначаем пароль администратору:

set password for root@localhost=password('mypassword');

2.Если ваш клиент разрывает соединение после выполнения каждой команды, например, Query Browser, то после выполнения flush privileges; он будет требовать указать пароль, который мы ещё не успели назначить. Назначить сначала пароль с помощью команд grant или set password не получится, так как в режиме skip-grant-tables их нельзя использовать. (Выше уже указывалось, что flush privileges; отменяет данный режим, поэтому в предыдущем пункте данные команды работают.) Остается единственно возможный способ это напрямую изменять данные в таблице mysql.user

UPDATE mysql.user SET password=PASSWORD('mypassword') WHERE user='root' AND host='localhost';

Как восстановить root-пользователя?
Если root-пользователь (пользователь, обладающий всеми возможными прривилегиями, как правило имеет имя root) был по неосторожности удален, то последовательность действий аналогична предыдущему разделу за исключением того, что вместо назначения пароля необходимо будет создать root-пользователя. Т.е. в режиме skip-grant-tables в зависимости от используемого вами клиента действуем одним из нижеследующих способов:

В вашем случае рекомендую следующие действия:

flush privileges;

Затем добавляем root-пользователя с помощью команды grant

grant all ON *.* TO `root`@`localhost` identified by 'mypassword' with grant option;

Распространенные случаи.
Ошибка (1045  Access denied for user 'root'@'localhost' (using password: No)) означает, что подключение производится с пустым паролем.
Ошибка (1045  Access denied for user 'root'@'localhost' (using password: Yes)) указывает на неверный пароль.
Обе данные ошибки могут возникнуть вследствии недостатока прав доступа для выполнения требуемой операции, т.е. пользователя зовут root, но права у него не рутовые. На практике такая ситуация маловероятна.

Удалённый доступ root-пользователя.
В MySQL пользователь характеризуется двумя параметрами: именем и хостом, с которого он может обращаться, т.е. user@x и user@y - это разные пользователи. Для удобства записи в MySQL используются квантификаторы, например, % на месте хоста означает любую машину кроме локальной.

Если при доступе под рутом с удаленной машины вы получаете ошибку (1045 Acces denied for user 'root'@'%'), то это может оказаться следствием того, что в настройках по умолчанию удаленный root-пользователь оказался не совсем "рутом", т.е. не обладает всеми привилегиями. Для проверки нужно (под настоящим "рутом") сравнить результат выполнения команд:

show grants for root@localhost;
show grants for root@'%';

И при необходимости добавить недостающие привилегии пользователю root@'%' с помощью команды GRANT. Если необходимо владеть привилегиями администратора при соединении с удаленной машины, то рекомендуем, в целях безопасности, называть такого пользователя другим именем (не root).

3

Re: Что-то сделал и не пускает phpmyadmin. Пакет Vertrigo Server.

Вам необходимо восстановить пользователя root. Здесь описано как это сделать для MySQL 5.0.

4

Re: Что-то сделал и не пускает phpmyadmin. Пакет Vertrigo Server.

Спасибо. Проблема решена. Помогло первое решение. Если кратко, на будущее остальным чайникам:
1. Запустить сервер в режиме skip-grant-tables:
временно добавить строчку skip-grant-tables в my.ini в секции [mysqld]
Этот файл нашел банальным поиском.
2. Перезапустить сервер. Ну, совсем для чайников - остановить и включить сервер. Не знаю там, ну, компьютер перезагрузить, если совсем непонятно. 8-)
3. Запустить консоль MySQL Console (у меня Vertrigo Server, консоль прилагается).
4. команда flush privileges;
Просто написать.
5. команда grant all ON *.* TO `root`@`localhost` identified by 'mypassword' with grant option;
Прямо так скопировать и вставить. Я вообще ничего в ней (в команде) не менял, даже пароль не менял - он получился "mypassword"
6. Идем обратно в my.ini, удаляем строчку skip-grant-tables
7. Перезапускаем сервер.
8. Идем в phpmyadmin  и спокойно заходим под логином root и паролем mypassword
9. Меняем пароль root (как минимум), ну, и, в общем, продолжаем работать. 8-)
А, ну и в конце - что из этого получилось-то: я создал нового пользователя root в базе с ALL Privilegies с паролем mypassword.