• No se han encontrado resultados

CONEXIÓN Y ENCRIPTACION DE UNA BASE DE DATOS PYTHON- POSTGRESQL. Reporte

N/A
N/A
Protected

Academic year: 2021

Share "CONEXIÓN Y ENCRIPTACION DE UNA BASE DE DATOS PYTHON- POSTGRESQL. Reporte"

Copied!
25
0
0

Texto completo

(1)

CONEXIÓN Y

ENCRIPTACION DE UNA

BASE DE DATOS

PYTHON-POSTGRESQL

(2)
(3)

1 Í

NDICE

2 Cifrando la conexión a una base de datos PostgreSQL ... 3

2.1 Requisitos ... 3

2.1.1 Virtualización de CentOS ... 3

2.1.2 Instalación del servidor postgresql ... 7

2.1.3 Instalación de Python ... 11

2.1.4 Instalación de PyGreSQL ... 11

2.1.5 Instalación de pgAdmin ... 11

2.2 Creación de la base de datos ... 12

2.3 Conectar con la base de datos localmente ... 13

2.3.1 Conectar con la base de datos localmente ... 13

2.3.2 Conectarse a la base de datos desde pgAdmin... 13

2.3.3 Conexión a la base de datos desde Python... 16

2.4 Programa de encriptación de usuario y contraseña ... 17

2.4.1 Ejecución del programa en el cliente ... 17

2.4.2 Código del programa ... 20

2.4.3 Funcionamiento de la aplicación ... 23

(4)

2 C

IFRANDO LA CONEXIÓN A UNA BASE DE DATOS

P

OSTGRE

SQL

2.1 R

EQUISITOS

Para la realización de este proyecto, se necesitó instalar CentOS y posteriormente: En CentOS: Servidor postgresql Python PyGreSQL En Windows: pgAdmin III 2.1.1 Virtualización de CentOS

En VirtualBox clicamos en la pestaña “nueva”, y a continuación empezamos a crear nuestra maquina virtual.

(5)

Asignamos la memoria RAM para la máquina virtual.

Hacemos clic en crear (disco duro virtual)

(6)

Elegimos reservado dinámicamente.

Finalmente elegimos la capacidad de almacenamiento que asignaremos a nuestra máquina virtual.

Hecho esto Podemos iniciar la virtualización de CentOS, podemos insertar el CD en la unidad lectora o montar una unidad virtual.

(7)

Elegimos la opción de instalación, en la siguiente pantalla elegimos SKIP

(8)

2.1.2 Instalación del servidor postgresql

Para poder instalar el servidor postgresql e iniciar la base de datos se ejecutan en la terminal los siguientes comandos en CentOS:

Instalar

# yum install postgresql postgresql-server Inicializar la Base de datos

# service postgresql initdb Iniciar daemon

# service postgresql start

Arrancar el daemon por defecto en los niveles de inicio 2,3, y 5. # chkconfig --levels 235 postgresql on

2.1.2.1 Edicion de los archivos pg_hba.conf y postgresql.conf

Una vez instalado el servidor, debemos configurar los archivos pg_hba.conf y postgresql.conf. Para modificar el archivo postgresql.conf nos logueamos como usuario postgres

# su –l postgres

Con el comando vin accedemos al archivo postgresql.conf $ vin data/postgresql.conf

(9)

Originalmente el atributo listen_addresses esta comentado, se debe descomentar y asignarle como valor el simbolo asterisco (*), esto para que el servidor sea capaz de escuchar cualquier diección ip, se pueden especificar tambien por separado las direcciones deseadas.

El otro valor que se debe modificar es el puerto, por defecto es el 5432, esta linea esta comentada originalmente, por lo tanto la descomentamos.

Presionamos la tecla ESC para indicar que estamos listos para salir y tecleamos “ :wq “ para salir de la edición del archivo guardando los cambios. Para que los cambios tengan efectos se debe reiniciar el servicio postgresql

# service postgresql restart

Ahora abrimos el archivo pg_hba.conf $ vin data/pg_hba.conf

(10)

Aquí lo que se hace es especificar cuales hosts vamos a permitir se conecten al servidor en la red local. Y se modifica el campo METHOD como md5 para cada una de las direcciones de la tabla. Para que los cambios tengan efectos se debe reiniciar el servicio postgresql

(11)

2.1.2.2 Configuración del cortafuegos

Para poder aceptar conexiones, un paso más es necesario. Vaya a Sistema> Administracion> Cortafuegos De clic en la pestaña otros puertos, y presione el botón Añadir.

Se le presentara la ventana “Puerto y Protocolo”, aquí busque los puertos 5432 de tcp y udp y añádalos. Después de clic en aplicar y reinicie el servicio postgresql desde consola.

(12)

2.1.3 Instalación de Python

Para instalar Python solo es necesario ejecutar el siguiente comando en consola: # yum install Python

2.1.4 Instalación de PyGreSQL

Este paquete es necesario para poder conectar Python con la base de datos, para instalarlo solo se ejecuta el comando:

# yum install PyGreSQL

2.1.5 Instalación de pgAdmin

pgAdmin es una plataforma de administración y desarrollo para PostGreSQL

En la siguiente dirección usted puede descargar pgAdmin III en su versión más reciente para Windows:

(13)

2.2 C

REACIÓN DE LA BASE DE DATOS

Despues de instalar postgresql, puede revisar el estado del servicio con: # service postgres status

Si el servicio corre de manera correcta, ahora usted puede loguearse como usuario postgres: # su –l postgres

Una vez logueado con el usuario postgres, usted puede crear nuevos usuarios o nuevas base de datos Para crear un usuario solo necesita especificar el nombre del usuario y una contraseña:

$ createuser miUsuario –P

La terminal le pedirá establecer la contraseña correspondiente, se le preguntará si el usuario va a ser un super usuario y si se le permite la creación de nuevos roles.

Para crear una base de datos se usa el siguiente comando: $ createdb miBD –owner= dueñoDB

Se debe espeficicar el nombre de la nueva base de datos y que usuario sera el administrador de la misma

(14)

2.3 C

ONECTAR CON LA BASE DE DATOS LOCALMENTE 2.3.1 Conectar con la base de datos localmente

Para conectarse localmente a la base de datos y desde la consola de postgresql, se usa el comando: $ psql –U miUsuario –d miDB

Y de esta manera estará listo para empezar a modificar la base de datos agregando tablas, borrando tablas o cualquiera que sea la operación a realizar.

2.3.2 Conectarse a la base de datos desde pgAdmin

Una vez que la dirección ip del host a conectarse se ha dado de alta, en pgAdmin haga clic en nueva conexión.

(15)
(16)

Si la conexión es exitosa la imagen anterior es un ejemplo de lo que puede aparecer, en caso de que la conexión no se alcance a establecer, asegúrese de que:

- Su dirección este registrada en el archivo pg_hba.conf del servidor - La configuración del cortafuegos en el servidor sea la adecuada - Los datos ingresados sean los correctos

(17)

2.3.3 Conexión a la base de datos desde Python

La primera prueba que se realizó desde Python, se hizo desde consola. En la terminal, ejecutar:

# python

La sentencia siguiente, sólo funcionará si realizó la instalación del PyGreSQL. >>> from pg import DB

Y a continuación

>>> db = DB(‘nombre_bd’, ’ip_servidor’, puertoDeConexion, ‘ ’, ‘ ’, ‘usuario’, ‘contraseña’ )

(18)

2.4 P

ROGRAMA DE ENCRIPTACIÓN DE USUARIO Y CONTRASEÑA

El objetivo de este programa es conectar un cliente con una base de datos en otro host. El usuario debe tener conocimiento de:

- El nombre de la base de datos - La contraseña del usuario

- El dueño de la base de datos o usuario

- La dirección IP donde se encuentra alojada la base de datos 2.4.1 Ejecución del programa en el cliente

El archivo conecta.py contiene el código necesario para realizar una conexión a la base de datos. En el cliente, ejecutar el archivo conecta.py

(19)

Se abrirá una terminal y se le pedirá identificarse, a continuación deberá especificar la dirección IP del servidor y la base de datos a la cual quiere conectarse.

Si los datos ingresados son correctos se le presentará una pantalla, indicando que se ha conectado a la base de datos exitosamente y como muestra, aparecerá en pantalla el resultado de una consulta.

(20)

Si al ingresar los datos en el cliente hubiera un error, ya sea una contraseña incorrecta, un usuario invalido o una dirección IP no correspondiente se le mostrará un mensaje, indicando el fracaso de la conexión.

(21)

2.4.2 Código del programa

#!/usr/bin/python # Indica la ubicacion del ejecutable de python en la maquina cliente print ("Para conectarse al servidor debe identificarse...")

from pg import DB #Sentencia que importa la libreria DB para poder realizar la conexion. userDesc='' #Variable que almacenara el nombre del usuario desencriptado

pasDes='' #Variable que almacenara el valor de la contraseña desencriptada

user='' #Variable que almacenara el nombre del usuario, de manera temporal

cont='' #Variable que almacenara el valor de la contraseña de la base de datos, de manera temporal

userEn='' #Variable que almacenara el nombre de usuario, pero encriptado pasEn='' #Variable que almacenara la contraseña encriptada

ip='' #Variable que almacenara la direccion IP del servidor nombreDB='' #Variable que almacenara el nombre de la base de datos

def cifraUser(userDesc): #Funcion que cifra lo que haya en 'user' y lo guarda en 'userEn' for c in userDesc:

global userEn

userEn+=chr(ord(c)^83) return userEn

(22)

def cifraPass(pasDes): #Funcion que cifra lo que haya en 'cont' y lo guarda en 'pasEn' for c in pasDes:

global pasEn

pasEn+=chr(ord(c)^97) return pasEn

def descifraUser(userEnc): #Funcion que descifra lo que hay en 'userEn' y lo guarda en 'userDesc' for c in userEnc:

global userDesc

userDesc+=chr(ord(c)^83) return userDesc

def descifraPass(passEnc): #Funcion que descifra lo que hay en 'PasEn' y lo guarda en 'pasDes' for c in passEnc:

global pasDes

pasDes+=chr(ord(c)^97) return pasDes

(23)

def captura(): #Funcion que pide al usuario ingresar los datos indicados global user

global cont global ip

user= raw_input('Teclee su usuario: ') cont= raw_input('Teclee su password: ')

ip= raw_input('Teclee la direccion ip del servidor: ')

nombreDB= raw_input('Teclee el nombre de la base de datos a acceder: ')

captura() #Invocacion a la funcion captura() para obtener los datos iniciales cifraUser(user) #Invocacion a la funcion cifraUser() para cifrar el valor de 'user' cifraPass(cont) #Invocacion a la funcion cifraPas() para cifrar el valor de 'cont'

#Las siguientes lineas de codigo se encierran en un bloque try-except, para cachar las excepciones posibles try:

db=DB( nombreBD,ip,5432,'','',descifraUser(userEn),descifraPass(pasEn)) #Se realiza la conexion, con los parametros indicados print ('Conexion con el servidor exitosa!')

print ('')

x=db.query("SELECT *from canciones") #Realiza una consulta en la base de datos para demostrar la conexion exitosa print x

print ("---") except:

print ('La conexion con el servidor no pudo establecerse, por favor verifique sus datos') raw_input()

(24)

2.4.3 Funcionamiento de la aplicación

El objetivo del programa es cifrar los datos que el usuario entrega, en este caso esto se logra aplicando un XOR al valor que se desea cifrar. Se usan 3 funciones principalmente:

captura() Permite capturar los datos del usuario, desde teclado cifraUser() Cifra el user que el usuario ha de ingresar

cifraPass() Cifra la contraseña que el usuario ingresa

DescifraUser() Desencripta el campo del usuario, para permitir la conexión a la base de datos DescifraPass() Desencripta el campo de la contraseña

El usuario ejecuta el programa, el programa entonces pedirá al usuario que ingrese sus datos. Recibidos los datos, el programa de manera interna aplicará un algoritmo de cifrado para el usuario y la contraseña ingresados. Posteriormente aplicará el mismo algoritmo y desencriptará los datos, para realizar como siguiente paso la conexión a la base de datos.

Establecida la conexión, se realiza una consulta internamente y se muestran los datos de una tabla existente en la base de datos.

(25)

3 C

ONCLUSIONES

La seguridad de nuestra información es un aspecto muy importante a cuidar, el nivel de seguridad va creciendo de acuerdo a la importancia de los datos que se trata de asegurar.

Las grandes empresas manejan una enorme cantidad de información que no pueden dejar de cuidar, pues dependen de ella. Toda grande empresa, es decir, toda empresa debe tener en cuenta lo valiosa que es la información que maneja dentro y fuera de sus instalaciones. Las infiltraciones en el sistema de una empresa pueden tener repercusiones terribles, dependiendo de las intenciones que tenga el infiltrado. Uno de los puntos más atacados son las Bases de Datos de las empresas, lo que se almacena en ellas es un tesoro y también un peligro si no se le protege como debe ser. Es por ello que una manera de cuidar toda esta información es la encriptación, existen varios métodos posibles de usarse.

En este trabajo usamos la encriptación de un usuario y la contraseña como punto de partida, puesto que es muy dado que los infiltrados se hagan pasar por empleados de las empresas para robar información, por supuesto siguen habiendo más y mejores maneras de lograr la aseguración de los datos de una empresa, este fue solo un ejemplo.

Referencias

Documento similar

El usuario tendrá la opción de crear nuevas rutas o visualizar las ya existentes, además de modificar o eliminar alguna de las que se encuentran almacenadas en la base de

2.1 El sistema muestra la interfaz que permite adicionar un servidor, donde el usuario debe introducir el nombre de la base de datos, el IP, especificar si el servidor réplica, y

El componente desarrollado debe dar la posibilidad al usuario de generar su par de claves, donde la clave pública se guardará en una base de datos para ser accedida por otros

Esta función le permite agrupar objetos en uno solo para facilitar la selección, las acciones de movimiento, la rotación y la modificación de dimensiones de varios objetos incluidos

Como maestros o profesores tenemos dos opciones, la Public (Gratis y con sólo posibilidad de hacer presentaciones publicas) o la de Licencias para estudiantes

Esta base de datos servirá para que cuando el usuario solicite información sobre su posición, se le proporcione (esto implica la ubicación del usuario concerniente a un punto

En el caso de realizar una análisis estructural dinámico lineal de un edificio en particular, se necesita disponer de la información correspondiente a las dimensiones en planta y

Conexión a una Base de Datos: Al seleccionar la opción para conectarse a una base de datos determinada, se interpreta la información introducida por el usuario