Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Глюки выбора БД и подключения.
 
 автор: tim313   (30.03.2010 в 01:57)   письмо автору
 
 

Вот стоит на сервере Бд mysql, только стоит не нормльно а глючно.
Была БД с именем tim2, однажды пошла команда на установку Mysql и mysql начал записываться по верх старой версии.

При установке создалась новая папка mysql, а старой было присвоено имя типа mysql2.
Я недолго думая заменил имя старой папки на Mysql а новой папки на Mysql2.
Таким образом я востановил все свои данные.

И все было нормльно пока я не попробовал создать новую БД и добавить пользователй в таблицу mysql->user.

Добавил туда нового пользователя с правами через команду insert ну и пароль записывал через PASSWORD.
Но почему то никак не удавалось подключиться по этому пользователю средствами php, по старым все продолжало работать. Ну да ладно подумал я , накосячил где то.

Создал новую БД с именем tim3.
Подключился к mysql по старым пользователям и тут выеснил что php команды выбора БД mysql не работают с новой базой tim3.
$dbSelected = mysql_select_db('tim3', $dbcnx); где $dbcnx подключение которое выполнялось.
И база tim3 точно существовала!

Предположил что это какойто глюк в системе связанный с записью mysql по верх старой и просто заменение новых папок на старые.

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

  Ответить  
 
 автор: cheops   (30.03.2010 в 02:02)   письмо автору
 
   для: tim313   (30.03.2010 в 01:57)
 

1. В первую очередь выложите my.ini, который сейчас использует сервер - что там?
2. У вас таблицы MyISAM
3. Это Windows или UNIX?
4. Какие версии новой и старой базы данных?

  Ответить  
 
 автор: tim313   (30.03.2010 в 02:14)   письмо автору
2.4 Кб
 
   для: cheops   (30.03.2010 в 02:02)
 

1 - Ini вроде для Windows нашел только cnf, прикрепил
2 Таблицы MyISAM
3 Unix , FreeBSD
4 Версии незнаю наверно одинаковые, все было на 1м сервере.

Версия новой Версия MySQL-клиента: 5.0.67, версия старой не знаю, наверно такая же.

В phpmyadmin все нормально работает и переключаеться.
А через php только tim2 и старые пользователи.

  Ответить  
 
 автор: cheops   (30.03.2010 в 04:23)   письмо автору
 
   для: tim313   (30.03.2010 в 02:14)
 

1. Таблицы в обоих папках (старом и новом каталоге данных) каким пользователям и группам принадлежат и какие на них права доступа?
2. А вы путь к каталогу данных где прописываете? Через параметр сервера передаете его?

  Ответить  
 
 автор: tim313   (30.03.2010 в 12:11)   письмо автору
 
   для: cheops   (30.03.2010 в 04:23)
 

1 - Права на все папки и таблицы одинаковые, на папки 700 на таблицы 660. Старые и новые одно и то же.
И Владелец и Группа на старых и новых тоже одинаковые(владелец и групп mysql)
2 - Не понимаю путь до базы? До базы tim3?
Выбор БД вот так $dbSelected = mysql_select_db('tim3', $dbcnx);

или до папки с БД по умолчанию?
путь до папки по умолчанию я не знаю где найти, он просто стандартно в var/db/mysql/ находиться.

  Ответить  
 
 автор: cheops   (30.03.2010 в 12:57)   письмо автору
 
   для: tim313   (30.03.2010 в 12:11)
 

>или до папки с БД по умолчанию?
Да
>путь до папки по умолчанию я не знаю где найти, он просто стандартно в var/db/mysql/
>находиться.
Вы говорили что у вас две их, вы не меняли путь, просто заменяли файлы в var/db/mysql/ ?

  Ответить  
 
 автор: tim313   (30.03.2010 в 14:01)   письмо автору
 
   для: cheops   (30.03.2010 в 12:57)
 

Нет у меня две базы всмысле две базы(tim2 и tim3) в одной базе Mysql.
Пусть я конечно не менял, я даже не знаю где он прописан.
Просто заменил файлы в var/db/mysql/ на старые.

В Таблице Mysql->User у пользователя через которого я подключаюсь по php все права находяться в состоянии "N". Тоесть нету прав.
Но через этого юзера я нормально могу вставлять удалять смотреть таблицы через php.
Еще есть пользователи unknown-xxx.agava.net и 127.0.0.1 у которых вообще нет пароля.

Такое ощущение что гдето храняться данные о юзерах которые используються сервером, и сервер считает юзера со всеми правами N юзером сервера и дает возможность делать все что доступно юзерам unknown-xxx.agava.net или 127.0.0.1.

Если это так то может быть есть записи и о БД которые доступны юзерам, и там находиться запись только об одной бд tim2, а на новую tim3 записи нету.

Попробовал зайти через php юзером root со всеми правами, все работает.
У меня стоит ISP Maneger панель, помню как в ней создавал юзеров с разными правами, а в таблице у всех этих узеров права N.
Значит только где то храниться информация о том у кого какие права у юзеров.

  Ответить  
 
 автор: cheops   (30.03.2010 в 15:04)   письмо автору
 
   для: tim313   (30.03.2010 в 14:01)
 

N ещё ничего не значит - это глобальные права (вас я так понимаю интересую права на базы данных?) запрос
SHOW GRANTS FOR 'root'@'localhost';

Подставляя вместо root имя пользователя, а в место localhost сетевой суффикс - как выглядят результаты?

>Если это так то может быть есть записи и о БД которые доступны юзерам, и там находиться
>запись только об одной бд tim2, а на новую tim3 записи нету.
Скорее всего

>Попробовал зайти через php юзером root со всеми правами, все работает.
>У меня стоит ISP Maneger панель, помню как в ней создавал юзеров с разными правами, а в
>таблице у всех этих узеров права N.
>Значит только где то храниться информация о том у кого какие права у юзеров.
Там вероятно имеется phpMyAdmin? Зайдите в него в раздел привелегии - там можно выставить права доступа и просматривать их гораздо удобнее.

  Ответить  
 
 автор: tim313   (30.03.2010 в 15:20)   письмо автору
 
   для: cheops   (30.03.2010 в 15:04)
 

И так,
Создав нового пользователя и выставив ему все права при запросе
SHOW GRANTS FOR 'root'@'localhost'; где root-его имя, mysql ругаеться и выдает:

#1141 - There is no such grant defined for user 'foto_1' on host 'localhost' хотя он есть в таблице со всеми правами.
И даже а разделе привелегиии он там есть:

Пользователь    Хост    Тип    Привилегии    GRANT    Действие
foto_1     localhost    Глобальный уровень     ALL PRIVILEGES     Да
'
Через php по этому пользователю со всеми правами тоже не зайти и в phpmyadmin по нему не зайти пишит ошибку, но указывает что пароль введен верно)

При таком же запросе на старых пользователей действиетльно нашел то, что и ожидал.
Вывод типа:

GRANT USAGE ON *.* TO 'tim313'@'localhost' IDENTIFIED BY PASSWORD '*тут пароль'
GRANT SELECT, INSERT, UPDATE, DELETE ON `db\_tim313\_1`.* TO 'tim313'@'localhost'

Вот она в чем собака.

Остаються 2 вопроса, как добавлять юзеров что бы их принимал mysql и как им ставить права подобные GRANT SELECT, INSERT, UPDATE, DELETE ON `db\_tim313\_1`.* TO 'tim313'@'localhost'.

Понял как создавать привелегии только почему то они не создаються на нового пользователя, на старых работает а на новом ругаеться:

SQL-запрос:  
GRANT SELECT , INSERT , UPDATE , DELETE ON `tim3` . * TO 'foto_1'@'localhost';
Ответ MySQL:  
#1133 - Can't find any matching row in the user table


Ура все получилось, нажал изменить имя пользователя, он автоматически создал нового с теми же данными и для него уже вышло поменять привелегии.
Спасибо большое)

  Ответить  
 
 автор: cheops   (30.03.2010 в 18:44)   письмо автору
 
   для: tim313   (30.03.2010 в 15:20)
 

Вот так попробуйте
SHOW GRANTS FOR 'foto\_1'@'localhost';

  Ответить  
 
 автор: cheops   (30.03.2010 в 18:49)   письмо автору
 
   для: tim313   (30.03.2010 в 15:20)
 

Вообще использовать подчеркивания в именах пользователей - плохая идея, лучше вообще без них, если у вас подчеркивания имеются нужно очень внимательно составлять запросы и экранировать их. Причем это только в именах пользователей, в базах данных уже не надо и это нужно постоянно помнить - собственно поэтому идея и плохая, нет единообразия обработки символа - в одном месте так, в другом эдак.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования