|
|
Este documento está disponible en los siguientes idiomas: English Castellano ChineseGB Deutsch Francais Nederlands Portugues Russian Turkce Arabic |
por Georges Tarbouriech <georges.t(at)linuxfocus.org> Sobre el autor: Georges es un viejo usuario de Unix. A el le gustan esos productos que han contribuido a popularizar las soluciones de software libre en el área profesional. Taducido al español por: Leo Trujillo Gomez <aleogom(at)prodigy.net.mx> Contenidos: |
Resumen:
MySQL y Perl han estado por todos lados hace ya buen
tiempo. Ellos son ampliamente usados aún y cuando la "moda" cambia. Este
artículo trata acerca de estos dos productos trabajando juntos como un
todo, ya sea en la Internet o en una Red Local. El ejemplo proporcionado
concierne a los sistemas Unix,
libres o no, aún si puede ser adaptado a otros "sistemas" ampliamente
generalizados.
Lo que este artículo es : una pequeña revisión de
lo que puede hacer esta pareja, mostrando lo fácil de usar, su rapidez,
confiabilidad, seguridad...
Lo que este artículo no es : no es
un tutorial de MySQL ni tampoco de Perl; ni una revisión de MySQL
o de Perl.
Consecuentemente, nosotros veremos a
MySQL trabajando en conjunción con Perl, sin olvidar que "hay más de
una forma de hacerlo".
MySQL es un Sistema de Administración de Base de Datos
Relacional (RDBMS-Relational DataBase Management System)
disponible en
http://www.mysql.com. Esta liberado
bajo GNU GPL
para ser libre, dependiendo para lo que se le utilice. Revise la
politica de la licencia en el sitio web de MySQL. Funciona ya sea como
un servidor o un cliente en muchas plataformas. Algunos otros RDBMS
existen como software libre y nosotros no haremos comparación alguna dado
que la elección de MYSQL para este artículo es arbitraria. Ni
compararemos a las grandes armas "comerciales" tales como
Informix, Oracle, Sybase... Basta decir que MySQL es probablemente uno
de los DBM más ampliamente usados en la Internet. Para este artículo
usaremos la versón 3.23.36 (un vez más,
de manera arbitraria). Al momento de escribir esto, la actual versión
estable es la 3.23.46 y la experimental es la tan largamente esperada
version 4.0. Estas pueden ser descargadas como código fuente para ser
compiladas o como paquetes.
Para usar MySQL en conjunción con Perl,
necesita algunas cosas más : los módulos Perl DBI.
Por lo menos, usted puede descargar los módulos DBI,
Msql-Mysql-modules, Data-Dumper y Data-ShowTable.
No hablaremos
acerca de su instalación dado que esto es obvio y los paquetes le
proveen con todo lo que usted necesita saber.
Perl se
mantiene como lenguaje práctico de extracción y de informes
(Practical Extraction and Report Language). En un principio, la
intención fue la manipulación de documentos (parseo, extracción...)
pero rápidamente comenzó a ser algo más que eso. Usted también puede
hacer todo con Perl desde tareas administrativas hasta scripts
cgi para verdaderas aplicaciones y naturalmente, interfaces de
bases de datos.
Perl es parte de muchas (si no es que todas)
distribuciones Unix tanto si son libres o no.
La versión actual es la 5.6.1 y la versión experimental la 5.7.2 al
momento que escribo este artículo. Para el artículo usaremos la vieja y
aceptable versión 5.005_03. En el caso que usted no tenga instalado Perl
en su máquina (¿ Cómo puede ser esto posible ?) puede obtenerlo de http://www.perl.com. Perl
le proporciona toneladas de módulos para casi todo. Puede obtenerlos
desde la sección CPAN de este sitio web : ¡ una mina de oro !
Por
último pero no menos importante, para trabajar con ambas herramientas,
sorpresa : ¡ usted necesita un servidor web ! Apache
parece la correcta elección dado que es parte de muchas
distribuciones Unix, libres o no, como es usual. En caso que no lo tenga
(¿ Dónde encontró su distribución ?),
está disponible en http://www.apache.org.
Usted probablemente ha notado que
LinuxFocus es una revista multilingüe. Esto significa que, cuando
usted es un editor, necesita administrar el estatus de los artículos
nuevos, su traducción. En otras palabras, quién esta haciendo qué,
cuando... Hasta el momento, hay cerca de 200 artículos disponibles,
en promedio en 5 idiomas. Esto hace alrededor de 1000
artículos (Qué listo soy ¿ no ?) ¡ y seguimos contando !
Estas cosas han sido archivadas, formateadas, resumidas... ¿Cómo cree
usted que esta administración es realizada ? Con Perl, naturalmente.
Nuestro editor en jefe, Guido Socher, escribió muchos programas en
Perl para hacer nuestro trabajo mucho más fácil. El escribió también
tres partes de un tutorial de Perl y una revisión de un libro de Perl.
Revise la sección de referencia al final del artículo.
Javi, el
editor en Español, escribió un programa para administrar el estatus
de las traducciones... en
Perl.
Atif, uno de nuestros autores estrellas, viene del Reino
de Perl, por eso, su lengua materna es Perl.
Eventualmente, el también ha contribuido para MySQL, mejorando
una herramienta de administración web.
Una vez más, revise la sección de referencia.
Todo esto para decir que si usted busca un paraíso Perl... únase a
LinuxFocus.
dado que soy uno de los editores Franceses de
LinuxFocus... y que soy algo perezoso, he creado mi propia base de
datos usando, adivine que : ¡ MySQL y Perl !
Esto asume que MySQL ha sido instalado apropiadamente,
que los usuarios han sido creados y han sido protegidos con passwords.
La instalación está fuera del alcance de este artículo y la enorme
documentación que viene con MySQL
le informará de todo.
Inicie el servidor MySQL usando el
script mysql.server, puesto que invoca al demonio
safe_mysqld usted puede pasar opciones a este demonio.
Conectese al servidor usando
mysql -h host -u user -p
. Si el servidor esta corriendo en su máquina local, usted no necesitará -h host.CREATE DATABASE lf;
Este es nuestro ejemplo (lf viene de LinuxFocus) y obviamente usted dará el nombre que quiera a su base de datos. A continuación, confiera algunos permisos a los usuarios autorizados, esto asume que tiene los derechos para hacerlo (esto es que usted tiene los derechos de administración siendo usuario que está conectado). Si desea que un usuario sea capaz de administrar la base de datos puede darle a él los privilegios para hacerlo usandoGRANT ALL ON lf.* TO nombredeusuario;
Seleccione la base de datos que acaba de crear y escribaUSE lf
. Cree una tabla de acuerdo a sus necesidades. En nuestro ejemplo, hemos creado una tabla llamada trissue :CREATE TABLE trissue (num INTEGER UNSIGNED, categoria VARCHAR(25), titulo VARCHAR(40), autor VARCHAR(20), en VARCHAR(20), es VARCHAR(20), fr VARCHAR(20),de VARCHAR(20), nl VARCHAR(20), ru VARCHAR(20), tk VARCHAR(20), edicion VARCHAR(20));
. Revisemos, si ha sido creada como esperabamos con :
USE lf
SHOW TABLES;
DESCRIBE trissue;
LOAD DATA LOCAL INFILE "maindb.txt" INTO TABLE trissue;
Si su archivo de texto es correcto la tabla estará ahora poblada de datos. Puede revisar esto con :SELECT * FROM trissue;
Esto deberá desplegar una larga lista. Ahora, usted está capacitado para recuperar cualquier tipo de dato usando consultas.
Perl nos ayudará a automatizar las consultas, a desplegar los
resultados en un navegador web, etc. Una vez más, esto implica que los
módulos Perl han sido apropiadamente instalados para usar
MySQL en conjunción con Perl.
Ahora escribiremos scripts Perl
que serán usados como scripts cgi. Ellos nos permitirán mezclar Perl
y HTML para consultar la base de datos y dar formato a la salida.
Usaremos un script simple como ejemplo,
que nos permitirá buscar todos los artículos escritos por el mismo
autor. Desplegará los números de artículo, la categoría, el título, los
nombres de los traductores para los distintos idiomas (solamente para
los proyectos completos en funcionamiento),
y la edición cuando el artículo ha sido publicado.
Puede usar este
script como un modelo para su propio uso, pero sea conciente que este
ejemplo no es un programa muy seguro. Puede obtener una versión con más
comentarios aquí.
#!/usr/bin/perl -Tw
# Primero, diremos que este es un script Perl "Impuro".
#
# Este es un comentario
# consulta db
#
# Usaremos el módulo Perl DBI
use DBI;
# Como cgi :
use CGI qw(param());
print <<END_of_start;
Content-type: text/html
<html>
<titulo>LFAuthors main db</titulo>
<center><TABLE>
<TR VALIGN=TOP>
<TD><form action="/cgi-bin/lf.cgi" method="get">
# Aquí viene el título del botón parala página de inicio
<input type="submit" value="LFAuth "> </form>
</TD>
</TR>
</TABLE>
<center><H2>Buscar por autor</H2></center>
<form action=\"/cgi-bin/lf.cgi\" method=\"get\">Nombre Autor : <input
type=\"text\" size=\"30\" name=\"autor\"><input type=\"submit\"
value=\"Search...\"></form></center>
END_of_start
if (param("autor") ne '') {
$autor = param("autor");
$autsrch.='"';
$autsrch.=$autor;
$autsrch.='"';
# Nos conectamos a la base de datos llamada lf como el usuario doe
$dbh = DBI->connect("DBI:mysql:lf","doe",'');
$sth = $dbh->prepare("
select *
from trissue
where
autor = $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> Categoria </font></th>
<th width=110 align=CENTER><font color=#000000> Titulo </font></th>
<th width=110 align=CENTER><font color=#000000> Autor </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> Edicion </font></th>
</tr>
END_suite
while( ($num,$categoria,$titulo,$autor,$en,$es,$fr,$de,$nl,$ru,$tk,$edicion) =$sth->fetchrow() ) {
print "<tr>";
print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $categoria</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $titulo</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $autor</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> $edicion</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> Categoria </font></th>
<th width=110 align=CENTER><font color=#000000> Titulo </font></th>
<th width=110 align=CENTER><font color=#000000> Autor </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> Edicion </font></th>
</tr>
SUITE
while(($num,$categoria,$titulo,$autor,$en,$es,$fr,$de,$nl,$ru,$tk,$edicion) =$sth->fetchrow() ) {
print "<tr>";
print "<td width=60 bgcolor=#FFFFE8 align=center> $num</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $categoria</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $titulo</td>";
print "<td width=110 bgcolor=#FFFFE8 align=left> $autor</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> $edicion</td>";
print "</tr>";
}
print "</TABLE>";
print "<BR>";
}
print end_html;
$sth->finish;
# Desconexión
$dbh->disconnect;
exit;
Obviamente, si usted desea proporcionar un servicio de base de datos en
su sitio web, debe asegurar las cosas por completo. Naturalmente,
no daremos una forma paso a paso para la seguridad de un sitio web o un
servidor de base de datos. Sin embargo, es importante insistir en lo
básico.
Para ser concisos, cuando proporcione servicios en la web, la primer
cosa que debe asegurar es su servidor web.
Esto está lejos del alcance de este artículo. si quiere aprender más de
este tema, hay abundante documentación disponible. Un lugar estupendo
para comenzar es El Proyecto de Documentación Linux - the Linux
Documentation Project.
El siguiente paso concierne al
servidor de base de datos. Cuando instala una herramienta como MySQL
no olvide leer la parte de seguridad del manual.
De nuevo, lo básico concierne a los passwords de usuarios : no deje
una cuenta sin password especialmente la cuenta de root para la base
de datos (la cual debería de ser distinta a la cuenta de root de la
máquina). El otro punto importante está relacionado a los permisos :
no conceda todo a todos. Parece obvio... ¡ y esto es porque mucha gente se
olvida de ello !
Vamos un poco más allá, ¿porqué no
permitir chroot en la base de datos ? Revise el Artículo de Mark "Configurar Chroot en
todos los servicios" en esta edición. El habla acerca de una
base de datos distinta, pero lo que dice puede aplicarse en MySQL.
Otra medida de seguridad concierne a la circulación de datos. No es una
mala idea enviar y recibir los datos a través de un túnel. Puede
revisar el artículo A través del Túnel
para más información.
Por último, pero no menos importante, la programación segura es
una de las claves. Perl es un lenguaje grandioso, pero es muy fácil
cometer errores de programación con él. En otro artículo de
LinuxFocus se le enseñará a usted como hacerlo, especialmente
con Perl. Puede ver algo aquí. Es el último artículo de
la serie de Programación Segura y concierne especialmente sobre los
script cgi. ¡ Un "deber leerlo" !
Por supuesto, esto asume que usted ya tiene un sistema robusto sin
ninguno de los agujeros de seguridad conocidos, con los últimos
parches, y muchas de las herramientas de seguridad tales como NIDS
(Sistema de detección de Intrusos de Red - Network Intrusion Detection
System) como snort (from http://www.snort.org), firewall, escáneres de
puertos y seguridad (nmap, nessus), etc.
Si puede proporcionarlo, usted puede también tener un servidor
distinto para cada servicio que ofrece : un servidor web,
un servidor de base de datos... y sus mirrors para alta disponibilidad.
¡ etcétera ! Nunca finalizará con el tema, dado que la seguridad núnca se
cumple a cabalidad. Sólo trata de reducir los riesgos... y ellos
son más perversos cada día. Usted está advertido.
Como Hay Más de Una Forma de Hacerlo,
usted puede elegir su propia forma.
Hay muchos RDBMS y muchos lenguajes para comunicarse con ellos. La idea
que hay detrás de escribir este artículo era mostrar cómo MySQL y Perl
trabajan bien cuando los usa juntos.
Naturalmente, la elección fue muy subjetiva : yo amo MySQL porque
es preferentemente pequeño en tamaño, funciona en muchos Sistemas
Operativos, es rápido, confiable... Yo a su vez aprecio mucho el trabajo
hecho por el equipo de MySQL, sin olvidar el número de gente que
ha contribuido. Y lo que más me gusta es que : esas personas no intentan
reinventar la rueda. Mantienen las cosas simples.
Concerniente a Perl, todo a sido dicho acerca de él : ¿ Qué más
podría yo agregar ? Creo que usted no puede trabajar sin él, ya sea
si trabaja como administrador de Red o como desarrollador, o no importa
que. La comunidad Perl es una de las más grandiosas fuentes de
conocimiento compartido. Una revista está disponible, llamada the
Perl Journal, la cual esta ahora incluida en
SysAdmin magazine, cada dos ediciones. Si quiere subcribirse, dirígase a
http://www.samag.com.
Dado
que estamos hablando de trabajos grandiosos, aquí viene la
acostumbrada sección off-topic. Ustedes, lectores de LinuxFocus
no han notado probablemente el pequeño número de personas
involucradas en la revista. No obstante, ustedes puede leerla
en muchos idiomas distintos. ¿Han notado que algunos del equipo de
trabajo son casi los de siempre, solamente una o dos personas haciendo
todo el trabajo ? Ellos son webmaster, traductores, etc. Revise el
equipo Ruso, el equipo Turco :
encontrará que muchos de los artículos son traducidos por Kyril o Erdal.
Revise los proyectos bajo desarrollo, tales como Portugués o Arabigo :
¡ el mismo resultado ! Quisiera felicitar a todos ellos por el enorme
trabajo que están haciendo. Gracias a todos ustedes :
la comunidad de software libre les debe mucho.
Perdón
por esta disgresión, pero creo que esto debería ser dicho.
Regresando al tema, finalicemos con unas palabras acerca del software
libre. La gente en MySQL o Perl merece las gracias.
Ellos le proveen a usted de grandiosas herramientas en su mayor
parte libres de cargo. Con todo, estas herramientas son
frecuentemente tan buenas como los verdaderos productos comerciales (si
no es que mejores), ellos son frecuentemente actualizados, con muy
buena documentación y las puede usar también en todos los sistemas Unix.
¿ Puede encontrar el equivalente en algún otro lugar ? ¡ me temo que no !
Este artículo probablemente no le enseñará a usted mucho, sin
embargo si usted advierte como probar estos productos, no será del
todo inútil.
¿ No vivimos una época maravillosa ?
Perl mongers
Tutorial de Perl de Guido :
Perl I
Perl II
Perl III
Revisión del libro Programación de Perl Profesional :
Programación en Perl
Contribuciones de Atif a MySQL.
Una revisión de MYSQL en LinuxFocus: viejo artículo aunque
actualizado :
MySQL
Un viejo tutorial de SQL en LinuxFocus SQL, en dos partes
:
SQL Parte I
SQL Parte II
|
Contactar con el equipo de LinuFocus
© Georges Tarbouriech, FDL LinuxFocus.org Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus |
Información sobre la traducción:
|
2002-01-04, generated by lfparser version 2.21