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