CONEXIÓN Y
ENCRIPTACION DE UNA
BASE DE DATOS
PYTHON-POSTGRESQL
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
2 C
IFRANDO LA CONEXIÓN A UNA BASE DE DATOS
P
OSTGRE
SQL
2.1 R
EQUISITOSPara 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.
Asignamos la memoria RAM para la máquina virtual.
Hacemos clic en crear (disco duro virtual)
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.
Elegimos la opción de instalación, en la siguiente pantalla elegimos SKIP
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
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
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
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.
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:
2.2 C
REACIÓN DE LA BASE DE DATOSDespues 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
2.3 C
ONECTAR CON LA BASE DE DATOS LOCALMENTE 2.3.1 Conectar con la base de datos localmentePara 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.
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
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’ )
2.4 P
ROGRAMA DE ENCRIPTACIÓN DE USUARIO Y CONTRASEÑAEl 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
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.
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.
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
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
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()
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.
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.