elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Script Perl para consultas Mysql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Script Perl para consultas Mysql  (Leído 2,607 veces)
^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Script Perl para consultas Mysql
« en: 9 Noviembre 2007, 18:18 pm »

He iniciado un simple y extenso script de perl que hace consultas y subconsultas a Mysql, Postgresql y proximamente Oracle :D

El script en si es basicamente para usuarios que no saben casi nada de SQL y esto les puede server, Bien, el script iba a ser demasiado extenso para 1 solo archivo, asi que lo dividi en varios modulos, por el momento solo publicare el script completo hacia Mysql ya que en el modulo Postgresql me faltan algunas subconsultas que completar y testear en mi PC.
 
He aqui el main.pl del script:

Código:
#!/usr/bin/perl 
 
 use strict;
 use warnings;
 use DBI;
 use Mysql;
 use mysql1;
 use msql1;
 use pgs1;
 use oracle1;
 
 
 printf " ***************************************\n ";
 printf " **************  Genesix ***************\n ";
 printf " ********** Version 1.0 **************\n ";
 printf " ********* Autor:: Marian S. *********\n" ;
 printf " Escriba la base de datos que le gustaria utilizar\n";
 printf "\n";
 printf " 1 - Mysql, 2 -Postgresql, 3 - Oracle  :  Seleccione un numero para continuar  ";
 my $opcion = <STDIN> ;
 chomp $opcion;
 if ($opcion eq 1) {  Mysql(); }
 elsif ($opcion eq 2) { Postgresql(); }
 elsif ($opcion eq 3) { Oracle(); }
 
 sub Mysql {
 my $hostname = "localhost";
 printf "Bienvenido/as al cliente de consultas Mysql :  ";
 printf "Indique que quiere hacer\n";
 printf " 1 - Crear una tabla\n";
 printf " 2 - Eliminar una tabla\n";
 printf " 3 - Crear un backup de una base de datos y todas sus tablas\n" ;
 printf " 4 - Otorgar permisos a una base de datos a un usuario\n" ;
 printf " 5 - Eliminar una Base de Datos\n";
 printf " 6 - Modificar/Alterar una tabla\n" ;
 printf " 7 - Remover permisos de una base de datos a un usuario\n";
 printf " 8 - Crear una base de datos\n";
 my $query = <STDIN>;
 chomp $query;
 if ($query eq 1) { &mysql1::mysql2(); }
 elsif ($query eq 2) { &mysql1::mysql3(); }
 elsif ($query eq 3) { &mysql1::mysql4(); }
 elsif ($query eq 4) { &mysql1::mysql5(); }
 elsif ($query eq 5) { &mysql1::mysql6(); }
 elsif ($query eq 6) { &msql1::msql2(); }
 elsif ($query eq 7) { &msql1::msql3(); }
 elsif ($query eq 8) { &msql1::msql4(); }
 } ;
 
 sub Oracle {
 printf "Bienvenido/a al cliente de consultas Oracle : ";
 printf "Especifique que desea hacer\n";
 printf " 1 - Crear una tabla\n";
 printf " 2 - Eliminar una tabla\n";
 printf " 3 - Crear un backup de una base de datos y todas sus tablas\n" ;
 printf " 4 - Otorgar permisos a una base de datos a un usuario\n" ;
 printf " 5 - bla bla\n";
 my $query = <STDIN>;
 chomp $query;
 if ($query eq 1) { &oracle1::oracle2(); };
 
 } ;
 
 sub Postgresql {
 printf "Bienvenido/a al cliente de consultas Postgresql : ";
 printf "Especifique que desea hacer\n";
 printf " 1 - Crear una tabla\n";
 printf " 2 - Eliminar una tabla\n";
 printf " 3 - Crear un backup de una base de datos y todas sus tablas\n" ;
 printf " 4 - Otorgar permisos a una base de datos a un usuario\n" ;
 printf " 5 - bla bla\n";
 my $query = <STDIN>;
 chomp $query;
 if ($query eq 1) { &pgs1::pgs2(); };
 
 } ;
 
 1;

Bien Como dije divide en modulos el programita solo publicare los modulos de Mysql, ya que los de Postgresql aun estan incompletos aunque los pocos que estan habilitados funcionan
 
Primer modulo de Mysql:

Código:
package mysql1; 
 
 my $hostname = "localhost";
 
 sub mysql2 {
 printf "Indique el nombre de la base de datos a usar : ";
 my $database = <STDIN>;
 chomp $database;
 printf "Nombre de la tabla a crear : " ;
 my $table = <STDIN>;
 chomp $table ;
 printf "Inserte los registros que tendra la nueva tabla : Ejemplo: 'nombre varchar(30), apellidos varchar(30), edad int;' : ";
 my $registro = <STDIN>;
 chomp $registro;
 printf "Indique el nombre de su usuario :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("create table $table ($registro);") or die ("$!\n");
 };
 
 sub mysql3 {
 printf "Indique el nombre de la base de datos a usar : ";
 my $database = <STDIN>;
 chomp $database;
 printf "Nombre de la tabla a eliminar : ";
 my $delete = <STDIN>;
 chomp $delete ;
 printf "Indique el nombre de su usuario :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("drop table if exists $delete;") or die ("$!\n");
 };
 
 sub mysql4 {
 my $backup = "/usr/bin/mysqldump";
 my $HOME = "~" ;
 my $archivo = "backup.sql";
 my $directorio = "$HOME/backup" ;
 printf "Indique el nombre de su usuario :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 printf "Indique el nombre de la DB de la cual se hara el backup  :  " ;
 my $table = <STDIN>;
 chomp $table;
 my $ubicacion = `cd $directorio 2>/dev/null || mkdir -p ${directorio} && cd $directorio && $backup --opt --user=$user --password=$pass $table > $archivo && tar -cvf $archivo.tar *.sql && compress $archivo.tar && rm *.sql` ;
 sprintf $ubicacion ;
 printf "El backup fue creado satisfactoriamente, Backup guardado en $directorio\n";
 };
 
 sub mysql5 {
 printf "Indique el nombre de su usuario :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 printf "Indique el nombre del usuario que sera privilegiado : ";
 my $user1 = <STDIN>;
 chomp $user1;
 printf "Indique el nombre de la DB a la cual se le dara privilegios a dicho usuario : ";
 my $db = <STDIN>;
 chomp $db;
 printf "Privilegios a otorgar ::: \n";
 printf "1 - Garantizar todos los privilegios (Grant All)\n";
 printf "2 - Garantizar solo permisos de crear, eliminar, actualizar (Grant usage, create, update, eliminar)\n";
 printf "3 - Deseo introducir los permisos que este usuario tendra : ";
 my $eleccion = <STDIN>;
 chomp $eleccion;
 if ($eleccion eq 1) { my $conexión = Mysql->connect("$hostname", "$db", "$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("grant all privileges on $database.* to $user1@$hostname identified by $pass with grant option;") or die ("$!\n");
 }
 elsif ($eleccion eq 2) { my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("grant usage, create, update, drop on $database.* to $user1@$hostname identified by $pass with grant option;") or die ("$!\n"); }
 elsif ($eleccion eq 3) { printf "Introduzca los permisos a garantizar separados por comas y con espacio Ejemplo:: drop, update, alter  sin \ entrecomillar la palabra, ni finalizar con punto y coma ";
 my $opccion = <STDIN>;
 chomp $opccion;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("grant $opccion on $database.* to $user1@$hostname identified by $pass with grant option;") or die ("$!\n");
 }
 };
 
 sub mysql6 {
 printf "Indique el nombre de la base de datos a Eliminar : ";
 my $database = <STDIN>;
 chomp $database;
 printf "Indique el nombre de su usuario :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("drop database $database;") or die ("$!\n");
 };
 
 1;

Segundo Modulo del Mysql;

Código:
package msql1; 
 
 my $hostname = "localhost";
 
 sub msql2 {
 printf "Indique el nombre de su usuario :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 printf "Indique el nombre de la base de datos donde esta la tabla : ";
 my $database = <STDIN>;
 chomp $database;
 printf "Indique Nombre de la Tabla a utilizar : " ;
 my $table = <STDIN>;
 chomp $table ;
 printf "Que desea modificar en la Tabla\n";
 printf " 1 - Agregar un registro, 2 - Modificar un registro, 3 - Eliminar un registro ; Seleccione un numero para continuar : ";
 my $opcion = <STDIN>;
 chomp $opcion;
 if ($opcion eq 1) { Add(); }
 elsif ($opcion eq 2) { Mod(); }
 elsif ($opcion eq 3) { Drop(); }
 sub Add {
 printf "Introduzca el nuevo dato que desea agregar Ex: 'email varchar(30), edad int' insertar datos no encapsular entre comillas \
 no colocar punto y coma al final tampoco : ";
 my $data = <STDIN>;
 chomp $data;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("alter table $table add ($data);") or die ("$!\n");
 sub Mod {
 printf "Indique el registro a modificar Ex: columna disponible - nombre varchar(20) - Modificamos ::  'nombre varchar(30)' - Donde el registro nombre fue cambiado la capacidad de data a guardar con varchar(30)' \ Introducir datos sin entrecomillar y sin punto y coma al final : ";
 my $seleccion = <STDIN>;
 chomp $seleccion;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("alter table $table modify $seleccion;") or die ("$!\n");
 }
 sub Drop {
 printf "Introduzca la palabra/columna que desea Eliminar de la Tabla , Ex: nombre : ";
 my $data = <STDIN>;
 chomp $data;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("alter table $table drop $data;") or die ("$!\n");
 }
 }
 };
 
 sub msql3 {
 printf "Indique el nombre de su usuario (ROOT para poder eliminar permisos) :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 printf "Indique el nombre del usuario al cual se le removeran los privilegios : ";
 my $user1 = <STDIN>;
 chomp ($user1);
 printf "Indique el nombre de la base de datos : ";
 my $database = <STDIN>;
 chomp $database;
 printf "Indique Nombre de la Tabla (por motivos de conexión) : " ;
 my $table = <STDIN>;
 chomp $table ;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("revoke all privileges on $database.* from $user1@$hostname;") or die ("$!\n");
 };
 
 sub msql4 {
 printf "Indique el nombre de su usuario  :  ";
 my $user = <STDIN>;
 chomp $user;
 printf "Indique su contraseña  :  " ;
 my $pass = <STDIN>;
 chomp $pass;
 printf "Indique el nombre del usuario al cual se le removeran los privilegios : ";
 my $user1 = <STDIN>;
 chomp ($user1);
 printf "Indique el nombre de la base de datos : ";
 my $database = <STDIN>;
 chomp $database;
 printf "Indique Nombre de la Tabla (por motivos de conexión) : " ;
 my $table = <STDIN>;
 chomp $table ;
 my $conexión = Mysql->connect("$hostname","$database","$user","$pass") or die ("$!\n") ;
 my $select = $conexión->selectdb("$database") or die ("$!\n");
 my $peticion = $conexión->query("create database $database;") or die ("$!\n");
 };
 
 1;

La parte de Mysql esta practicamente completa a mi entender a lo mejor estoy obviando algo, pero por el momento cumple los objetivos de donde trabajo, varios empleados estan usando este script para hacer subconsultas y consultas rapidas a Mysql y Postgresql.

Obvio el modulo que he creado de Postgresql ya que aun esta incompleto pero las pocas funciones que hace funcionan :) dicho scriptcito esta siendo muy utilizable por ciertos empleados donde laboro, ya que se sienten a gusto con el que me han pedido que haga el mismo script pero version grafica para los usuarios de Windows, y he estado creando el mismo software en version grafica con Tk. Vere como me va hasta ahora muy positivo.

Espero que a alguien le sirva.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Conexion inversa para consultas mysql desde php
Desarrollo Web
Graphixx 1 3,279 Último mensaje 23 Abril 2011, 23:12 pm
por Nakp
Filtro dinamico para consultas MySQL
Desarrollo Web
Shell Root 3 7,043 Último mensaje 8 Agosto 2011, 20:52 pm
por Shell Root
Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
.NET (C#, VB.NET, ASP)
luison 8 5,611 Último mensaje 10 Febrero 2013, 05:02 am
por alister
Pequeño script para MySQL
Bases de Datos
syncro_7 0 2,046 Último mensaje 13 Enero 2016, 17:49 pm
por syncro_7
[Pregunta]: Consultas Mysql / PHP
Desarrollo Web
Leguim 2 1,510 Último mensaje 3 Febrero 2019, 01:19 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines