Работа с базами данных

ДОСТУП К БАЗАМ ДАННЫХ ПОСРЕДСТВОМ CGI-СКРИПТА, НАПИСАННОГО НА ЯЗЫКЕ ESQL


Лабораторная работа 9

ДОСТУП К БАЗАМ ДАННЫХ ПОСРЕДСТВОМ CGI-СКРИПТА, НАПИСАННОГО НА ЯЗЫКЕ ESQL/C

Цель работы

Ознакомиться с основными понятиями разработки CGI-скриптов с целью написания простейших CGI-программ доступа к базам данных с использованием языка ESQL/C.

Содержание работы и методические указания к ее выполнению

Для выполнения работы необходимо

  • изучить основы языка разметки гипертекста HTML;
  • ознакомиться со структурой спецификации CGI и CGI-скрипта;
  • изучить необходимые конструкции HTML-формы;
  • ознакомиться с переменными CGI-окружения;


  • изучить алгоритм обработки данных HTML-формы с использованием методов GET и POST;
  • с использованием средств языка ESQL/C разработать и отладить программу доступа к базе данных.
  • Общая схема доступа к базам данных с использованием CGI-скриптов имеет вид:

    [ZEBR_TAG_P ALIGN="JUSTIFY">Спецификация CGI описывает формат и правила обмена данными между программным обеспечением WWW-сервера и запускаемой программой и представляет собой общую среду и набор протоколов для внешних приложений, которые используются при взаимодействии с Web-сервером.

    CGI-программа (CGI-скрипт) представляет собой программу локальной операционной системы сервера (в двоичном виде или в виде программы для интерпретатора), которая может быть вызвана из среды WWW. Для инициирования CGI достаточно, чтобы в URL-адресе был указан путь до запускаемой программы. Программное обеспечение WWW-сервера исполняет эту программу, передает ей входные параметры и возвращает результаты ее работы, как результат обработки запроса, клиенту.

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

  • права доступа для каталога, в котором хранятся CGI-скприпты, должны быть самые широкие, иначе скрипт не сможет создавать файлы, нужные ему для работы (кроме того, такие же права должны быть и у файлов, к которым обращается скрипт);

  • файлы CGI-скриптов (как, правило, с расширением cgi) должны быть обязательно исполняемыми.


  • Общепринятым средством организации интерфейса с пользователем в WWW-среде является HTML-форма. Если целью формы является сбор данных для последующей передачи их серверу, то такая форма должна обязательно содержать:

  • Адрес CGI-скрипта (программы-обработчика, расположенной на некотором сервере), которому будут пересылаться данные из формы. При этом выполняется пересылка не всей страницы целиком, а только значений, соответствующих элементам управления формы, которая инициировала запуск программы-обработчика.


  • Метод передачи данных (наиболее применяемые POST и GET).


  • Некоторый объект формы, при нажатии на который произойдет пересылка данных.


  • Форма задается в HTML-документе с помощью тега FORM. Все элементы управления находятся внутри контейнера <FORM>...</FORM>.

    <FORM action="http://.......cgi" method="GET"|"POST" enctype="encodingType" name="formName" target="windowName" onSubmit="Handler"> ... Поля формы ...

    </FORM>

    Среди атрибутов HTML-формы для целей CGI-программирования наиболее важны

  • action. Этот атрибут задает URL-адрес программы (CGI-скрипта), которая будет обрабатывать данные формы. Если он опущен, используется URL-адрес текущего документа;


  • method. Задается метод. По умолчанию предполагается GET.


  • Основными методами являются методы GET и POST. В зависимости от метода (GET или POST) данные формы будут помещены в переменную окружения QUERY_STRING или поданы на стандартный ввод STDIN. В случае метода GET, используемого по умолчанию, данные добавляются в конец URL-адреса и отделяются знаком "?". С помощью метода POST информация, введенная пользователем, посылается непосредственно в сценарий с помощью выходного потока сервера STDOUT и входного потока STDIN вашего сценария. Преимуществом использования метода POST является неограниченность длины передаваемого сообщения и безопасность передачи по сравнению с GET.



    При нажатии некоторой кнопки на форме HTML документа происходит передача данных броузером серверу, на котором находится программа-обработчик данных. Основная работа такой программы заключается в:

  • получении данных формы HTML-документа в виде строки, в которой перечислены значения всех элементов HTML формы, инициировавшей запуск программы (данная строка записана в соответствие с четко определенным форматом);


  • разборе полученной строки;


  • обработке данных (например, занесение полученных значений в базу данных или выборка некоторых записей из базы данных по полученным значениям и т.д. и т.п.);


  • формировании HTML-документа, который будет передан сервером программе-броузеру.


  • Обработка CGI-скриптом данных формы составляет шаблонную часть скрипта.

    Данные, веденные в форме, передаются CGI-модулю в виде последовательности символов через входной поток (метод POST) или переменную CGI-окружения (метод GET) в формате:



    имя=значение&имя1=значение1&...&имяN=значениеN,



    где имяi - значение параметра name из элемента HTML-формы, значениеi - введенное или выбранное значение независимо от его типа.

    Алгоритм обработки передаваемой в CGI-скрипт строки данных состоит в разделении ее на пары имя=значение и декодирования каждой пары, учитывая, что все пробелы в введенных значениях в форме сервером были заменены символом "+" и символы с десятичным кодом больше 128 преобразованы в символ "%" и следующим за ним шестнадцатеричным кодом символа.

    После шаблонной части CGI-скрипта следует содержательная часть, в которой можно анализировать полученные данные, обращаясь, при необходимости, к различным таблицам баз данных. При написании CGI-скрипта на языке ESQL/C работа с базой данных ведется средствами встроенного языка SQL и главных переменных, через которые передаются и возвращаются данные к серверу баз данных. Результаты обработки данных, полученных из базы данных, а также другие информационные сообщения передаются функцией printf() в выходной поток с учетом форматирования HTML-документа.



    CGI-скрипт, запускаемый из среды WWW, должен содержать информацию о сервере баз данных в своем теле. Эта информация состоит в задании в CGI-скрипте системных переменных, определяющих каталог с программным обеспечением сервера, имя сервера, параметры перекодировки и прочие параметры.

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

    В том случае, когда любой пользователь без ограничений может иметь доступ к данным, средствами программы dbaccess, либо средствами иного программного приложений владелец базы данных SQL-оператором

    Grant connect to nobody

    предоставляет пользователю операционной системы nobody минимальные права, в том числе в отношении баз данных. Это позволяет при написании CGI-скрипта использовать простейший вариант подключения к серверу баз данных без проверки индивидуальных полномочий пользователя.

    $Connect to 'database@server_name';

    После окончания работы с приложением владелец базы данных должен отобрать полномочия у пользователя nobody.

    Revoke connect from nobody

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

    $Connect to 'database@server_name' user 'name' using $parol;

    Последовательность выполнения лабораторной работы

  • Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.


  • Разработать и отладить HTML-формы для ввода данных пользователя согласно варианту задания.


  • Средствами языка ESQL/C разработать и отладить CGI-скрипты для обработки данных HTML-формы и доступа к базе данных.




  • После выполнения лабораторной работы привести базу данных в исходное состояние.


  • Требования к разрабатываемой программе

    Разрабатываемые программы должна удовлетворять следующим требованиям:

  • разрабатываемое программное приложение должно содержать HTML-документ с формой для ввода данных и CGI-скрипт, вызываемый по окончании работы с HTML-формой;


  • CGI-скрипт должен быть написан на языке ESQL/C;


  • ввод параметров задания в HTML-форме может быть осуществлен либо путем ввода значений в текстовом виде, либо посредством выбора значений из предлагаемого списка;


  • программа должна быть написана в предположении, что любой пользователь без ограничений может иметь доступ к данным;


  • в программе должен быть предусмотрен вывод сообщений обо всех шагах ее выполнения, в том числе и о возможных ошибках;


  • все действия в отношении базы данных должны выполняться в рамках транзакций;


  • программа должна быть достаточно документирована.


  • Варианты заданий

    Вариант 1

  • Вывести информацию о поставщиках, поставивших детали для изделий из указанного города.


  • Увеличить рейтинг поставщика, выполнившего наибольшую поставку некоторой детали, на указанную величину.


  • Вариант 2

  • Вывести информацию о деталях, поставки которых были осуществлены для указанного изделия.


  • Изменить цвет самой тяжелой детали на указанный.


  • Вариант 3

  • Вывести информацию о поставщиках, которые осуществляли поставки деталей из заданного города в указанный период.


  • Вставить поставщика с заданными параметрами.


  • Вариант 4

  • Вывести информацию о поставщиках, поставивших указанную деталь в заданный период.


  • Удалить поставщика, выполнившего меньше всего поставок.


  • Вариант 5

  • Вывести информацию обо всех деталях, поставляемых для указанного изделия более чем одним поставщиком.


  • В таблице поставок изменить номер поставщика при заданном номере детали и изделия.


  • Вариант 6

  • Вывести информацию о деталях, поставки которых были осуществлены для указанного изделия всеми поставщиками.


  • Увеличить рейтинг поставщика, выполнившего больший суммарный объем поставок, на указанную величину.




  • Вариант 7

  • Вывести информацию об изделиях, для которых была поставлена указанная деталь.


  • Изменить название и город детали с максимальным весом на указанные значения.


  • Вариант 8

  • Вывести информацию о поставщиках, которые осуществляли поставки деталей для указанного изделия.


  • Увеличить рейтинг поставщика, выполнившего большее число поставок, на указанную величину.


  • Контрольные вопросы

  • Какова общая схема доступа к базам данных посредством CGI-скриптов?


  • Каково назначение пустой строки, генерируемой CGI-скриптов?


  • Каковы основные элементы HTML-формы?


  • Каково назначение элемента action HTML-формы?


  • В каком виде данные, введенные в форме, передаются CGI-модулю?


  • В чем состоит особенность формата данных, передаваемых из HTML-формы CGI-модулю?


  • Какова общая схема работы CGI-скрипта, вводящего данные посредством HTML-формы?


  • В чем разница методов GET и POST?


  • Как в CGI-скрипте задать системные переменные, определяющие параметры сервера базы данных?


  • Каковы способы предоставления всем пользователям одинаковых полномочий на доступ к данным из CGI-скрипта?


  • Каковы способы предоставления пользователям индивидуальных привилегий на доступ к данным из CGI-скрипта?


  • В чем сильные и в чем слабые стороны CGI-технологии?



  • Содержание раздела