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

Форум MySQL

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

 

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

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

тема: Использование одного MySQL-пользователя для реализации авторизации множества пользователей
 
 автор: parallelepiped   (07.03.2007 в 12:09)   письмо автору
 
 

Привет, у меня есть вопрос до боли простой для вас, на который вы отвечаете ежедневно своей работой, а я ни в одном источнике не смог найти на него ответа. Наверное не под тем углом смотрел.
Имеем хостинг с одним пользователем MySQL, т.е.. Я не могу понять принципа реализации прав доступа для админки и для юзеров, куда прячутся пароли и каким образов происходит коннект с ДБ? Я наверное немного непонятно изъясняюсь, но это как раз от того что не понимаю самого принципа. В кратце мне нужно сделать так, чтобы все читали,а админ занимался контентом. Да и вобще сам принцип того как анонимный юзер может делать запросы к БД, не получая при этом от нее пароля? Где можно почитать об этом? Или кто-то может объяснить в кратце принцип.

   
 
 автор: Ralph   (07.03.2007 в 12:44)   письмо автору
 
   для: parallelepiped   (07.03.2007 в 12:09)
 

А анонимные пользователи и не имеют доступ к базе.Они могут иметь доступ к скрипту,а вот он,определив,кто его вызывает(админ,не админ) и обращается к базе данных,используя твой логин и пароль.получается,что вопросом "свой/чужой" занимается скрипт

   
 
 автор: parallelepiped   (07.03.2007 в 12:51)   письмо автору
 
   для: Ralph   (07.03.2007 в 12:44)
 

А скрипт этот chmod-ом защищен от просмотра рядовыми пользователями, я правильно понимаю? И как тогда быть с запросами? Устанавливать pconnect с базой, а потом только запросы, верно?

   
 
 автор: Ralph   (07.03.2007 в 12:51)   письмо автору
 
   для: Ralph   (07.03.2007 в 12:44)
 

Скрипт действует как фильтр.К примеру,начало работы.Ты вызываешь скрипт,он определяет кто ты(или по ip+браузер,или просит ввести логин/пароль,или по данным сессии,в общем способов-куча).Дальше-смотрит,какое действие ты запрашиваешь и имеешь ли ты на это право...Не имеешь-выдает ошибку(идет в отказ,посылает нах,зависает...),имеешь-тогда скрипт,используя логин и пароль того самого единственного пользователя базы,и соединяется с базой и посылает ей запрос

   
 
 автор: Ralph   (07.03.2007 в 12:56)   письмо автору
 
   для: Ralph   (07.03.2007 в 12:51)
 

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

   
 
 автор: parallelepiped   (07.03.2007 в 12:59)   письмо автору
 
   для: Ralph   (07.03.2007 в 12:51)
 

Спасибо тебе огромное за внесение некоторой ясности. А не мог бы ты указать мне на какой-нибудь пример того как это работает, только не на какой-нибудь CMS, желательно чтобы попроще было. Можно даже без кода, схемой или как-нибудь еще. Я много где искал просто, разжеванного нигде не нашел, а это ведь основа.

   
 
 автор: Ralph   (07.03.2007 в 13:11)   письмо автору
 
   для: parallelepiped   (07.03.2007 в 12:59)
 

Хорошо,к примеру,кто-то загрузил страницу на моем сайте и нажал на ссылку "удалить статью #8",вызвав скрипт 'удаление.пхп'.скрипт начинает работу.Первым делом он должен узнать,кто к нему обратился.Простейший (правда,опасный,но пока это неважно) вариант-мой логин и пароль хранятся в куках.Скрипт читает куку 'логин' и куку 'пароль'.Дальше он устанавливает соединение с базой mysql_connect(имя сервера с базой данных,логин пользователя базы,пароль пользователя базы).Проверяет,получилось ли соединиться

   
 
 автор: Ralph   (07.03.2007 в 13:25)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:11)
 

Если не получилось-выдает сообщение об ошибке и прекращает работу.Получилось-посылает базе запрос $dim=mysql_fetch_array(mysql_query("SELECT статус FROM юзеры WHERE l='логин,взятый из куки' AND p='пароль из куки' LIMIT 1")).У нас в базе есть таблица 'юзеры' со столбцами 'логин','пароль','статус'... Запрос запрашивает из таблицы юзеров одну строку,у которой значение столбца l равно нашему логину из кук,а значение столбца p равно паролю из кук.Если строка с таким условием найдена,то

   
 
 автор: Ralph   (07.03.2007 в 13:36)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:25)
 

переменная становится массивом,ключами которого становятся те столбцы,имена которых мы указали после слова select.Так как мы указали один столбец 'статус',то у нас должен получиться массив с одним ключом-$dim['статус'].Теперъ проверяем if(!$dim){exit'fuck you';}-если массив не создан-значит,в той таблице нет строки,соответствующей нашим условиям-скорее всего это значит,что со скриптом работает незарегистрированный пользователь.Следовательно,посылаем его нах и заканчиваем работу

   
 
 автор: parallelepiped   (07.03.2007 в 13:42)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:36)
 

Да это-то понятно :) Как раз это в учебниках написано. Мне просто необходимо взглянуть с другой стороны на хранение имени пользователя и пароля к БД как-нибудь так, чтобы неавторизованый юзер мог получать инфу (не важно, через другой скрипт это делается или напрямую) но при этом не получал пароля от БД, в том-то и дело что я не понимаю принципа. Возможно, конечно, его можно прямо в коде писать не скрывая, если код php нельзя прочитать никому или как-то иначе, я вот этого как раз и не знаю.

   
 
 автор: Ralph   (07.03.2007 в 13:47)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:36)
 

Если такая строка есть-значит,по крайней мере,пользователь зарегистрирован.Теперь проверим,имеет ли он право удалять статьи if($dim['статус']!='админ'){exit'извини,ты конечно классный мужик,но удалять статьи не имеешь права';}.Получается,мы проверили,что да,есть в таблице юзеров пользователь с таким логином и паролем,и что он админ,следовательно можно с чистой совестью посылать базе запрос на удаление из таблицы 'статьи' строки номер 8 mysql_query("DELETE FROM статьи WHERE num=8

   
 
 автор: parallelepiped   (07.03.2007 в 13:37)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:11)
 

Ну про телефон, это ты переборщил, конечно ;) Я более-менее понимаю что к чему. И если бы была возможность создать несколько пользователей БД у меня и вопросов бы не возникло: один пользователь для web с правами SELECT на определенные таблицы и все, другой админ со всеми правами.
У меня пример такой: на странице выодится ежедневный анонс, и сопутствующие ему элементы, как действующие лица, например и еще что-нибудь. Т.е. только SELECT меня интересует. Как я понял, можно сделать так: К к index.php подключаем файл db_inf.php c сhmod 700, например (чтобы пользователям он был не доступен) из него устанавливаем постоянное соединение с БД ( mysql_pconnect(), если я правильно все понимаю), и все запросы в index.php работают. Или в этом файле с паролем и логином я пишу функцию подключения к БД, вида
db_connect () {
return mysql_connect('host','login,'pass);
}
' которой потом пользуюсь?

   
 
 автор: Ralph   (07.03.2007 в 13:59)   письмо автору
 
   для: parallelepiped   (07.03.2007 в 13:37)
 

Сам просил поподробнее :-) В принципе,все правильно,но для того,чтобы все запросы в index.php работали,необязательно вызывать постоянное соединение mysql_pconnect,хватит обычного mysql_connect

   
 
 автор: parallelepiped   (07.03.2007 в 14:01)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:59)
 

Спасибо тебе огромное за то что потратил на меня время и все разжевал. Действительно, очень тебе благодарен! :)

   
 
 автор: Ralph   (07.03.2007 в 14:15)   письмо автору
 
   для: Ralph   (07.03.2007 в 13:59)
 

Лично я в начале каждого файла прописываю строку include'db.php'; где файл имеет текст
<?php

function mq($q,$e)

{
$r=mysql_query($q);
if(!
$r){exit('ошибка БД'.$e.mysql_error());}
return;}

$mid=@mysql_connect('server','login','password');
if(!
$mid){exit('не удалось соединиться с базой');}
mq("USE database",'Выбор базы данных');
?>
а далее в главном файле пользуюсь инструкциями типа mq("select...",'чтение...')

   
Rambler's Top100
вверх

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