Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Пишу скрипт, в котором создаю БД, создаю таблицы, в числе которых есть таблица users, заношу первичные данные в таблицы, в том числе и в users (ФИО, должность и т.п.) после чего делаю GRANT для тех юзеров, что внес на select, update, insert, delete на dbname.*. На стартовой странице висит приглашение на ввод логина/пароля. затем запускается php в котором идет подключение к БД под введенными логином/паролем но почему то если я использую GRANT у этих юзеров пропадают вообще какие либо права. т.е. к БД я под ними подключиться не могу. почему то в mysql\users мои юзера прописываются, но в столбцах с правами везде проставляется N. Подскажите, как нужно мне грантить юзеров, что бы без проблем можно было работать с БД? а то начал писать, а такой затык все желание отбивает.
И еще, подскажите, как мне организовать подключение к БД? т.е. юзер вводит логин/пароль, подключается к БД и дальше может пользоваться select/insert/update без постоянного повторения подключения к БД или все таки требуется постоянное повторение операции подключения к БД? (Сорри за запутанность)
Неактивен
1. Какой командой Вы добавляете права? Скорее всего, проставляете пароль как-то не так.
2 .Если даете права на базу, то и ищите их в таблице с базой, N в глобальных правах —
нормальное положение вещей.
3. По поводу поддержания соединений — смотрите на тему mysql_pconnect.
Неактивен
paulus написал:
1. Какой командой Вы добавляете права? Скорее всего, проставляете пароль как-то не так.
grant select, insert, update, delete on dbname.* to username identified by 'passcode'
paulus написал:
2 .Если даете права на базу, то и ищите их в таблице с базой, N в глобальных правах —
нормальное положение вещей.
Тем не менее, после такого гранта меня в БД не пускает.
paulus написал:
3. По поводу поддержания соединений — смотрите на тему mysql_pconnect.
Это все понятно, вот только не понятно как использовать идентификатор уже открытого соединения если используется куча страничек? например, открываю соединение на главной странице, а затем перехожу на другую не будет ли теряться соединение?
Неактивен
grant select, insert, update, delete on dbname.* to username identified by 'passcode'
вот эта команда плохая, скорее всего, Вы не проверяете ошибки. в синтаксисе
username@hostname. Иначе подставляется localhost, а соединение, скорее всего,
приходит не с него. Угадал?
--
К страничкам pconnect не имеет никакого отношения. Влияет только наличие уже
открытого соединения под тем же пользователем.
Неактивен
paulus написал:
grant select, insert, update, delete on dbname.* to username identified by 'passcode'
вот эта команда плохая, скорее всего, Вы не проверяете ошибки. в синтаксисе
username@hostname. Иначе подставляется localhost, а соединение, скорее всего,
приходит не с него. Угадал?
Не угадали. Я пишу на своем компе, соответственно и проверяю на нем же, так что localhost тут не играет главной роли
Позднее:
с GRANTом вроде разобрался - доступ получил. Но все равно не понятно, если давать привилегии юзеру, то они оседают не в той таблице, которая создана, а в БД mysql.user и т.п. Тем более пароль шифруется средствами password(). А что если это форум, и юзеров там 10 000? таблица же раздуется. и опять же не понятен вопрос с доступом с php-страниц. Если пытаюсь получить доступ с web - то не могу использовать password() т.к. это для SQL-выражений. Как же мне юзеров то прописывать? Есть конечно вариант, прописать одного юзера и жестко забить логин и пароль в странице, но ведь это же не выход, да и количество одновременных соединений, да еще и под одним и тем же логином/паролем будут расти. Как же люди регистрят юзеров?
Отредактированно pixel (15.05.2009 20:41:01)
Неактивен
Вы путаете пользователей БД и пользователей сервиса. К БД обычно подсоединяются по небольшим
(часто — 1) количеством пользователей.
Неактивен
ясно, спасибо. Теперь возникла другая проблема, что то не могу понять, данные есть а в выборке их нет:
1. Скриптом заносятся данные пользователей:
insert into users values (NULL, 0, "Админов", "Админ","Админыч","admin",password(999999),5,1,0);
естественно что под password(999999) - понимается зашифрованный пароль.
В таблице users моей БД появляется пользователь - все вроде бы нормально, но когда я из php-страницы посылаю:
$query="select ID_USER, FirstName, MiddleName, Sex_Id from users where Login='$Log1' and Pass=Password('$Pass1')";
возвращается что пользователь не найден. разве я не правильно использую Password()?
Неактивен
А Вы выведите строчку на экран перед тем, как посылать. Скорее всего, какая-то
из переменных окажется пустой.
Неактивен
все переменные заполнены правильно, я даже в самом mysql запускал эту строку со значениями - возвращает 0
Неактивен
«я вам не верю» ©
[celestia] root test > create table users (login varchar(20), password varchar(41)); Query OK, 0 rows affected (0.14 sec) [celestia] root test > insert users values ('admin', password('root')); Query OK, 1 row affected (0.00 sec) [celestia] root test > select * from users where login='admin' and password=password('root'); +-------+-------------------------------------------+ | login | password | +-------+-------------------------------------------+ | admin | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +-------+-------------------------------------------+ 1 row in set (0.00 sec)
Возможно, у Вас проблемы со структурой таблицы (например, поле пароля короткое, а
на предупреждения, что строка обрезана, Вы не смотрите).
Неактивен
странно, у меня под поле пароля было выделено 15 символов - не работало, сделал 50 - заработало. НО, в итоге то пароли одинаковые! все равно спасибо за помощь.
Неактивен
Для того, чтобы хранить строку длиной 41 байт, 15 байт мало, а 50 — много. 41 — в самый раз
Неактивен