У Вас конечно уже установлено же 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 и 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), и т.д.
Вопросы безопасности всегда актуальны. Опасность проникновения можно только уменьшить, но каждый день злоумышленники становятся все изощреннее и изощреннее. А Вас предупредили.