Создание базы данных
Вы конечно же установили уже MySQL, завели пользователей и защитили все паролями. Рассмотрение вопросов установки не входит в рамки этой заметки, тем более, что документация, поставляемая с MySQL - исчерпывающая.
Запустите сервер MySQL с помощью скрипта mysql.server.
Далее установите соединение с сервером с помощью команды
mysql -h host -u user -p.
Если сервер запущен на локальном компьютере - можно не использовать опцию -h host.
После ввода пароля вы подключаетесь к серверу(по крайней мере должны подключиться!) и теперь можно начинать процесс создания нашей базы.
В приглашении mysql введите
CREATE DATABASE lf;
Так как это моя база данных - я назвал ее lf(LinuxFocus), вы естественно можете дать ей любое другое имя. Далее пропишите права пользователям, чтобы это сделать вы сами должны обладать правами администратора. Если вы хотите чтобы пользователь мог управлять базой данных - выполните следующую команду:
GRANT ALL ON lf.* TO username;
Теперь, когда база данных создана, выполните команду USE lf, чтобы поработать с ней. Создайте таблицу, мы создадим следующую и назовем ее trissue :
CREATE TABLE trissue (num INTEGER UNSIGNED, category VARCHAR(25), title VARCHAR(40), author VARCHAR(20), en VARCHAR(20), es VARCHAR(20), fr VARCHAR(20),de VARCHAR(20), nl VARCHAR(20), ru VARCHAR(20), tk VARCHAR(20), issue VARCHAR(20));.
Теперь проверьте что вы сделали следующими командами :
USE lf
SHOW TABLES;
DESCRIBE trissue;
Вот и все.
Теперь неплохо бы ее чем-нибудь наполнить - самый простой путь создать текстовый файл с разделителями 'tab' и загрузить его в базу командой:
LOAD DATA LOCAL INFILE "maindb.txt" INTO TABLE trissue;
Если текстовый файл был создан корректно - данные в базе и это можно проверить командой :
SELECT * FROM trissue;
Теперь данные из нашей базы можно выбирать SQL запросами.
До сих пор мы использовали MySQL и вроде этого было достаточно - какова же задача Perl спросите вы?
Что делает Perl
Perl поможет нам автоматизировать запросы, отображать результаты в браузере и т.д. Хочу еще раз повторить - вы должны установить модули для взаимодействия Perl и MySQL.
Сейчас мы создадим Perl-скрипты, которые будем использовать в качестве cgi-скриптов - это будут смешанные программы, состоящие из Perl и HTML, чтобы можно было одновременно и делать запросы и отображать данные.
Наш скрипт будет выбирать названия заметок, написанных одним автором - отображать мы будем порядковый номер заметки, ее категорию, название, имена переводчиков(только для полностью поддерживаемых секций) и выпуск, в котором она вышла.
# First, we say this is a "Tainted" Perl script. #!/usr/bin/perl -Tw # # This is a comment # db consult # # We use the Perl DBI module use DBI; # As cgi : use CGI qw(param()); print <<END_of_start; Content-type: text/html <html> <title>LFAuthors main db</title> <center><TABLE> <TR VALIGN=TOP> <TD><form action="/cgi-bin/lf.cgi" method="get"> # Here comes the button's title for the launching page <input type="submit" value=" LFAuth "> </form> </TD> </TR> </TABLE>
Теперь делаем запрос к базе данных
<center><H2>Search by author</H2></center> <form action=\"/cgi-bin/lf.cgi\" method=\"get\">Author name : <input type=\"text\" size=\"30\" name=\"author\"><input type=\"submit\" value=\"Search...\"></form></center> END_of_start if (param("author") ne '') { $author = param("author"); $autsrch.='"'; $autsrch.=$author; $autsrch.='"'; # We connect to the database named lf as user doe $dbh = DBI->connect("DBI:mysql:lf","doe",''); $sth = $dbh->prepare(" select * from trissue where author = $autsrch "); $sth->execute;
Далее подготавливаем и отображаем результаты запроса. Если мы не будем вводить имя автора - нам будут показаны все заметки, если имя введем - только заметки автора. В случае наличия тысяч записей в базе данных - не советую выводить все содержимое!
print <<END_suite; <center> <TABLE BORDER=> <tr bgcolor=#A1C4EE> <th width=60 align=CENTER><font color=#000000> Num </font></th> <th width=110 align=CENTER><font color=#000000> Category </font></th> <th width=110 align=CENTER><font color=#000000> Title </font></th> <th width=110 align=CENTER><font color=#000000> Author </font></th> <th width=110 align=CENTER><font color=#000000> En </font></th> <th width=110 align=CENTER><font color=#000000> Es </font></th> <th width=110 align=CENTER><font color=#000000> Fr </font></th> <th width=110 align=CENTER><font color=#000000> De </font></th> <th width=110 align=CENTER><font color=#000000> Nl </font></th> <th width=110 align=CENTER><font color=#000000> Ru </font></th> <th width=110 align=CENTER><font color=#000000> Tk </font></th> <th width=110 align=CENTER><font color=#000000> Issue </font></th> </tr> END_suite while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) { print "<tr>"; print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $category</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $title</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $author</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $en</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $es</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $fr</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $de</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $nl</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $ru</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $tk</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $issue</td>"; print "</tr>"; } print "</TABLE>"; print "<BR>"; print "<BR>"; print "<br>"; } else { # DB Connect $dbh = DBI->connect("DBI:mysql:lf","doe",''); # Search $sth = $dbh->prepare(" select * from trissue "); $sth->execute; # Display result print <<SUITE; <center> <TABLE BORDER=> <tr bgcolor=#A1C4EE> <th width=60 align=CENTER><font color=#000000> Num </font></th> <th width=110 align=CENTER><font color=#000000> Category </font></th> <th width=110 align=CENTER><font color=#000000> Title </font></th> <th width=110 align=CENTER><font color=#000000> Author </font></th> <th width=110 align=CENTER><font color=#000000> En </font></th> <th width=110 align=CENTER><font color=#000000> Es </font></th> <th width=110 align=CENTER><font color=#000000> Fr </font></th> <th width=110 align=CENTER><font color=#000000> De </font></th> <th width=110 align=CENTER><font color=#000000> Nl </font></th> <th width=110 align=CENTER><font color=#000000> Ru </font></th> <th width=110 align=CENTER><font color=#000000> Tk </font></th> <th width=110 align=CENTER><font color=#000000> Issue </font></th> </tr> SUITE while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) { print "<tr>"; print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $category</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $title</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $author</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $en</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $es</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $fr</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $de</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $nl</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $ru</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $tk</td>"; print "<td width=110 bgcolor=#FFFFE8 align=left> $issue</td>"; print "</tr>"; } print "</TABLE>"; print "<BR>"; } print end_html; $sth->finish; # Disconnect $dbh->disconnect; exit;
Вопросы безопасности
Если вы хотите организовать доступ к базе данных на своем сайте - позаботьтесь о безопасности. Естественно мы не можем дать пошаговую инструкцию по безопасности сайта или сервера баз данных. Тем не менее важно хотя бы взглянуть на основы.
Короче говоря, предоставляя услуги в веб прежде всего защитите свой веб-сервер. Эта тема за пределами данной заметки, если хотите поближе познакомиться с этим вопросом - направляйтесь на the Linux Documentation Project - неплохое место для начала.
Следующий вопрос - безопасность сервера баз данных. Когда будете устанавливать MySQL не пропустите раздел, посвященный безопасности в руководстве по MySQL. Первое, на что следует обратить внимание - пароли пользователей - никогда не делайте безпарольных пользователей, особенно root'ов баз данных(может отличаться от root'а самой системы). Следующее тонкое место - права пользователей - никогда не давайте ВСЕ ВСЕМ. Вроде перечислил очевидные вещи, но многие забывают даже о них!
Если немного углубиться - почему бы не сделать chroot базы данных?
Следующий момент - передача данных.
И наконец - безопасное программирование как основа безопасности системы.
Я подразумеваю также, что ваша система не имеет общеизвестных дыр в защите, на нее установлены все патчи и масса приложений NIDS (Network Intrusion Detection System) таких как snort (http://www.snort.org), брандмауэр, сканнеры (nmap, nessus), и т.д.
Вопросы безопасности всегда будут актуальны. Опасность вторжения можно только уменьшить, но каждый день уловки злоумышленников становятся все изощреннее и изощреннее. Вас предупредили.
Автор: Пухляков Кирилл
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus