Авторизация для доступа к БД через Web

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Авторизация для доступа к БД через Web

Непрочитанное сообщение proxy-man » 2006-05-18 12:48:15

Привет. Кто-нибудь сталкивался с организацией доступа к БД (юзается Постгрес) при помощи вэб-интерфейса? Куда нужно копать? (на phpclub.ru и php.ru - поиск не принес результатов - там весь народ юзает в основном Мускуль, а относительно "слона" - инфы малова-то будет)... Киньте в меня линками плизььь :)
ЗЫ: основная заковыка - аутенфикация пользователя справочной системы. База уже готова (примерный или можно сказать тестовый образец) и теперь необходимо подключиться к ней при помощи обычного браузера. Однако, авторизация (правильная авторизация) - не происходит... может быть "собака порылась" в правах доступа к каталогам и их содержимому (где находятся файлы с расширением *.php)?
ЗЫ1: очень большой жаль, что процесс работы с такой БД как Постгрес, практический нигде не осведомлен...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
northern
лейтенант
Сообщения: 778
Зарегистрирован: 2006-02-08 20:48:45
Откуда: Днепропетровск
Контактная информация:

Непрочитанное сообщение northern » 2006-05-18 13:02:48

всё-таки остановился на вэб-интерфейсе и Постгрес? Сам искал по постресу инфу, мало очень, не раскручен он. Хотя многие пишут, что из опен он наиболее функционален.

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 13:12:14

northern - да, батенька, остановился на "слоне". Однако, скажу вот, что - литературы вообще нет... Надыбал себе только вот такую книжку (классическую, бумажную) -
"PostgreSQL руководство разработчика и администратора" by Гешвинде&Шенинг...
Но издание - только руководство по установке, настройке, архитектуре (поверхносто) и сопровождении этой БД. Есть отдельная ветка по Постгресу на phpclub.ru - сейчас буду ее внимательно изучать...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 13:50:44

а что подразумевается под авторизацией доступа к БД через php?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 14:29:30

а что подразумевается под авторизацией доступа к БД через php?
Подразумевается следующее - в БД создается таблица, в которой содержатся записи пользователей, которые будут иметь доступ к базе через вэб-интерфейс. А вообще, лучше расскажу так:
1. создаем базу данных в Постгресе (пока база - тестовая) - в базе есть различного рода
таблицы, что само собой разумеется.
2.доступ к данной базе (назовем ее test) - имеет специальный юзер, который создан в Постгресе.
3.необходимо идентифицировать пользователя, который подключается к БД при помощи вэб-интерфейса, по данным, которые храняться в таблице, например users - т.е. по имени и паролю... Пока это реализовать не могу...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 14:36:19

Код: Выделить всё

<?php

// подрубаем БД
require_once("../includes/db_data.php");

// авторизуем мудазвона, что припёрся.
if (!isset($_SERVER['PHP_AUTH_USER'])){
header('WWW-Authenticate: Basic realm="Доступ к рулю от сайта"');
header('HTTP/1.0 401 Unauthorized');
exit;
}else{
// если пустой пасс или юзер - посылаем
if(strlen($_SERVER['PHP_AUTH_USER']) == 0){echo "<HTML>\n<HEAD>\n<TITLE>www.lissyara.su</TITLE>\n<META http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\">\n</HEAD>\n<BODY>\n<br><br><br><br>\n<CENTER>Типа, самый умный, да?</CENTER>\n</BODY>\n</HTML>\n"; exit;}
if(strlen($_SERVER['PHP_AUTH_PW']) == 0){echo "<HTML>\n<HEAD>\n<TITLE>www.lissyara.su</TITLE>\n<META http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\">\n</HEAD>\n<BODY>\n<br><br><br><br>\n<CENTER>Типа, самый умный, да?</CENTER>\n</BODY>\n</HTML>\n"; exit;}
// достаём имя пользователя и пароль из БД
типа того не катит? (это неполный кусок кода - но для понимания идеи хватит)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 15:09:36

типа того не катит? (это неполный кусок кода - но для понимания идеи хватит)
для понимания процесса - хватает... а от какой базы кусок кода? От Мускуля чтоли?
ЗЫ - может кинешь линку по теме??? Хочу все сам сделать :-)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 15:18:18

а в данном исполнении неважно откуда ты берёшь данные для сравнения - хоть из текстового файла.
=====
а взято это с php.net - тока линк не дам не помню уже...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 15:27:16

а в данном исполнении неважно откуда ты берёшь данные для сравнения - хоть из текстового файла.
Ну не скажите так... Если данные беруться из БД - следовательно необходимо сделать SELECT ... и проверить соответствие вводимых данных с данными, которые попадают к нам из формы на браузере... Вообще, эта тема мало окучена, все более вопросов обсуждают касательно работы с БД (запросы, тригерры и вложенные запросы... ) - видимо все больше клиента пишут или на Дельфи ... или Дельфи... :-)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 15:38:38

Код: Выделить всё

<?php

// подрубаем БД
require_once("../includes/db_data.php");

// авторизуем мудазвона, что припёрся.
if (!isset($_SERVER['PHP_AUTH_USER'])){
header('WWW-Authenticate: Basic realm="Доступ к рулю от сайта"');
header('HTTP/1.0 401 Unauthorized');
exit;
}else{
// если пустой пасс или юзер - посылаем
if(strlen($_SERVER['PHP_AUTH_USER']) == 0){echo "<HTML>\n<HEAD>\n<TITLE>www.lissyara.su</TITLE>\n<META http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\">\n</HEAD>\n<BODY>\n<br><br><br><br>\n<CENTER>Типа, самый умный, да?</CENTER>\n</BODY>\n</HTML>\n"; exit;}
if(strlen($_SERVER['PHP_AUTH_PW']) == 0){echo "<HTML>\n<HEAD>\n<TITLE>www.lissyara.su</TITLE>\n<META http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\">\n</HEAD>\n<BODY>\n<br><br><br><br>\n<CENTER>Типа, самый умный, да?</CENTER>\n</BODY>\n</HTML>\n"; exit;}
// достаём имя пользователя и пароль из БД
$sql = "SELECT `author_id`,`author_name`,`author_passwd`,`author_active` FROM `authors_table` WHERE `author_name`='" . $_SERVER['PHP_AUTH_USER'] . "'";
$massiv_author = mysql_fetch_array(mysql_query("$sql"));
if($massiv_author['author_active'] == '0'){
// автор неактивен, пшёл прочь
echo "неактивен";
exit;
}else{
//echo "узер = " . $_SERVER['PHP_AUTH_USER'] . " пасс = " . $_SERVER['PHP_AUTH_PW'];
if(($_SERVER['PHP_AUTH_USER'] != $massiv_author['author_name'] )||(md5($_SERVER['PHP_AUTH_PW']) != $massiv_author['author_passwd'] )){
// неверное имяпользователя/пароль
//header('Location: ../');
echo "невернгое имя пользователя - пасс";
exit;
}
// автор активен, пароль верен.
// выводим радостные поздравления по этому поводу, и футболим на index.php
echo "успешная авторизация";
// выходим нах
exit;
}
}
?>
вот весь файл - страница логона
а в начале всех страниц инклюдишь файл такого содержимого:

Код: Выделить всё

<?php 

if (!isset($_SERVER['PHP_AUTH_USER'])){
header('WWW-Authenticate: Basic realm="Доступ к рулю от сайта"');
header('HTTP/1.0 401 Unauthorized');
exit;
}else{
// если пустой пасс или юзер - посылаем
if(strlen($_SERVER['PHP_AUTH_USER']) == 0){echo "<HTML>\n<HEAD>\n<TITLE>www.lissyara.su</TITLE>\n<META http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\">\n</HEAD>\n<BODY>\n<br><br><br><br>\n<CENTER>Типа, самый умный, да?</CENTER>\n</BODY>\n</HTML>\n"; exit;}
if(strlen($_SERVER['PHP_AUTH_PW']) == 0){echo "<HTML>\n<HEAD>\n<TITLE>www.lissyara.su</TITLE>\n<META http-equiv=\"Content-Type\" content=\"text/html;charset=windows-1251\">\n</HEAD>\n<BODY>\n<br><br><br><br>\n<CENTER>Типа, самый умный, да?</CENTER>\n</BODY>\n</HTML>\n"; exit;}
// достаём имя пользователя и пароль из БД
$sql = "SELECT `author_id`,`author_name`,`author_passwd`,`author_active` FROM `authors_table` WHERE `author_name`='" . $_SERVER['PHP_AUTH_USER'] . "'";
$massiv_author = mysql_fetch_array(mysql_query("$sql"));
if($massiv_author['author_active'] == '0'){
// автор неактивен, пшёл прочь
echo "неактивен";
exit;
}else{
//echo "узер = " . $_SERVER['PHP_AUTH_USER'] . " пасс = " . $_SERVER['PHP_AUTH_PW'];
if(($_SERVER['PHP_AUTH_USER'] != $massiv_author['author_name'] )||(md5($_SERVER['PHP_AUTH_PW']) != $massiv_author['author_passwd'] )){
// неверное имяпользователя/пароль
//header('Location: ../');
echo "неверное имя";
exit;
}
}
}
?>
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 15:41:22

хе ,хе. дырку у себя нашёл. имя и пароль не проверяются перед зпихиванием в БД...
ща поправлю...
давно я это писал....
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 15:45:35

добавил в начало обоих файлов

Код: Выделить всё

// лохматим юзера и пароль, если что не так - нех.
if(preg_match("#[^0-9a-zA-Z]#i",$_SERVER['PHP_AUTH_USER'])){ // в юзере что-то не то.
header("Location:http://www.yandex.ru/yandsearch?stype=&nl=0&text=%EA%E0%EA+%E2%E7%EB%EE%EC%E0%F2%FC+%F1%E0%E9%F2");
exit;
} // закрытие недопустимых символов
if(preg_match("#[^0-9a-zA-Z]#i",$_SERVER['PHP_AUTH_PW'])){ // в юзере что-то не то.
header("Location:http://www.yandex.ru/yandsearch?stype=&nl=0&text=%EA%E0%EA+%E2%E7%EB%EE%EC%E0%F2%FC+%F1%E0%E9%F2");
exit;
} // закрытие недопустимых символов
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 15:59:55

Однако... мудренного особо ничего и нет... но все таки.

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 16:11:54

Торможу, конечно, со страшной силой... пока нихрена разобрать не могу - все таки Мускуль и Слон - это не одно и тоже.... Мдя - процесс аутенфикации - пока не решается... :-)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 17:04:21

da kakaya raznitsa!
tebe iz BD nado dostat` login i parol i sravnit. vse.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-18 17:25:46

da kakaya raznitsa!
tebe iz BD nado dostat` login i parol i sravnit. vse.
Такая штука, что я пока только теоритеческий представляю, каким образом это сделать - вытянуть из БД логин и пароль и сравнить его с теми данными, что вводит пользователь, когда логинится на сайте...
ЗЫ - Лис, а куда русскую расскладку подевал?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 22:00:01

я из иксов писал, с занятий. у меня там русского нет...
невезёт, чё-то, нигде не получается по русски :)))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-18 22:04:24

вот пример, из которого родилось то что написано выше:
http://php.mysoft.ge/manual/ru/features.http-auth.php
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-19 9:32:12

я из иксов писал, с занятий. у меня там русского нет...
невезёт, чё-то, нигде не получается по русски ))
Офф-топ - а че за занятия? Если не секрет конечно... :-)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-19 9:53:06

http://www.specialist.ru/programs/course.asp?idc=286
это. в принципе, я процентов 90 знаю - но бумажка, плюс эти самые 10% - абсолютно неявные вещщи :)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-19 11:51:13

http://php.ru/manual/features.http-auth.html - более новый вариант мануала PHP на русском языке.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-19 11:54:46

ну я непомню откуда брал. может и отсюда...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-19 14:59:27

Ложу на обозрение пример своего "куска кода" для регистрации пользователя...

Код: Выделить всё

<?
//происходит активация формы для ввода логина и пароля
  if(!isset($name)&&!isset($password))
  {
  header('WWW-Authenticate: Basic realm="Input login and password"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Текст, отправляемый в том случае,
  если пользователь нажал кнопку Cancel';
  exit;
  }else{
//подключаемся к БД используя указанные ниже параметры
  $dbconn = pg_connect("host=localhost user=keeper dbname=test password=qwerty"
//проверяем статус соединения - если все ок -   'Connection status ok'
//если коннекта нет - 'Connection status bad'
  $stat = pg_connection_status($dbconn);
  if ($stat === PGSQL_CONNECTION_OK) {
      echo 'Connection status ok';
  }else{
      echo 'Connection status bad';
  }
//строим запрос для проверки введенного имени и пароля. Запрос проверяет наличие
//правильной строки - если значение строки нулевое - записи для пользователя в БД -
//отсутствует и следовательно в подключении будет отказано
  $query = "select count(*) from passwd where
                login='$name' and passwd='$password'";
//собственно выполняем сам запрос и проверяем его правильность
  $result = pg_query($query);
  if (!$result)
  {
  echo "ERROR\n";
  exit;
  }
//согласно мануала функция pg_query возвращает "pg_result_status --  Get status of query //result", а в нашем случае запрос передает в возвращаемую функцию pg_result_status
//или ноль (если записи нет) или единицу (если есть запись в таблице)
  $count = pg_result_status($result);
  if ($count > 0)
  {
   echo 'Login complite.<br>\n';
  }else{
  echo 'WRONG';
  }
}
?>
Однако ... запрос нихрена не работает :twisted:
Т.е. в браузере появляется форма для ввода логина и пароля (а как иначе может быть?), начинаем вводить логин и пароль, жмем кнопку "ОК".... и вываливается строка, если бы я нажал кнопку "ОТМЕНА".... Камрады - прошу меня поправить...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2006-05-19 15:05:04

добавь

Код: Выделить всё

echo $query
перез запросом, и запрос посмотри и руками его попробуй
Убей их всех! Бог потом рассортирует...

Аватара пользователя
proxy-man
лейтенант
Сообщения: 692
Зарегистрирован: 2006-04-05 12:06:13
Откуда: Odessa
Контактная информация:

Непрочитанное сообщение proxy-man » 2006-05-19 15:29:52

перез запросом, и запрос посмотри и руками его попробуй
Да запрос руками нормально работает...