Análisis Seguridad de bases de datos PostgreSQL

postgresql

postgresql

A lo largo de nuestra carrera como DBA,  La cual requiere del buen uso de muchas técnicas para el manejo de la información, con el fin de no redundar, de mantener integridad, mantener disponibilidad, entre muchas otras funcionalidades,  que  demuestra la importancia de la excelente gestión de la información,  es por eso que se hace necesario estudiar la seguridad con que este recurso tan valioso será resguardado.

 INTEGRIDAD

La integridad referencial es una  función  que está presente en las bases de datos relacionales que garantiza la coherencia de los datos entre relaciones aparejadas. Sin duda alguna es una  de  las  características  más  importantes que una  base de datos nos puede  proporcionar  y siempre se  debería  usar para garantizar la integridad de los datos almacenados. La integridad  referencial se define con el uso combinado de  claves primarias (primary keys) ó claves candidatas (candidate key) y clave foráneas (foreign key). Ambas claves  están  formadas por valores  únicos  y las claves o llaves foráneas solo pueden estar asociadas a una primaria con el fin de garantizar la existencia de un solo dato valido y correcto. Se hace necesario contar con una base de datos normalizada para el uso de estas funciones y obtener beneficios como:

  • Evitar redundancia en los datos almacenados.
  • Evitar problemas de actualización de los datos en las tablas.
  • Proteger la integridad de los datos.

Veamos un ejemplo:

ACCEDIENDO A LA BASE DE DATOS

Luego de que la base de datos es  creada se puede acceder a ella de varias maneras según sea la necesidad y el tipo de usuario veamos:

  • Ejecutando el programa monitor de terminal de  Postgres  (psql) que le permite introducir, editar y ejecutar órdenes SQL de un modo interactivo.
  • Ejecutando  el PGADMIN con el cual podemos establecer conexión con el servidor y manipular las bases de datos.
  • Desarrollando un software en alguno de los muchos lenguajes de programación existentes, el cual tenga las instrucciones necesarias para conectarse con la base de datos.
  • Utilizando herramientas reporteadoras para conectarnos a la base de datos y extraer datos para su posterior análisis.

CONTROL DE ACCESO

Postgres  proporciona mecanismos para permitir a los usuarios limitar el acceso que otros usuarios tendrán a sus datos.

SUPERUSUARIOS DE LA BASE DE DATOS

Los SuperUsuarios de la base de datos (aquellos que tienen el campo pg_user.usesuper activado) ignoran todos los controles de acceso descritos anteriormente con dos excepciones: las actualizaciones del catálogo del sistema no están permitidas si el usuario no tiene el campo pg_user.usecatupd activado, y nunca se permite la destrucción del catálogo del sistema (o la modificación de sus estructuras).

PRIVILEGIOS DE ACCESO

El uso de los privilegios de acceso para limitar la lectura, escritura y la puesta de reglas a las clases se trata en grant/revoke(l).

BORRADO DE CLASES Y MODIFICACIÓN DE ESTRUCTURAS.

Los comandos que borran o modifican la estructura de una clase, como alter,  drop table, y  drop index, solo funcionan con el propietario de la clase. Como hemos dicho antes, estas operaciones no están permitidas nunca en los catálogos del sistema.

LA SEGURIDAD DE LA BASE DE DATOS ESTA IMPLEMENTADA EN VARIOS

NIVELES:

  • Protección de los ficheros de la base de datos. Todos los ficheros almacenados en la base de datos están protegidos contra escritura por cualquier cuenta que no sea la del supe usuario de Postgres.
  • Las conexiones de los clientes al servidor de la base de  datos están permitidas, por defecto, únicamente mediante sockets Unix locales y no mediante sockets TCP/IP. Ha de arrancarse el demonio con la opción  -i para permitir la conexión de clientes no locales.
  • Las conexiones de los clientes se pueden restringir  por dirección IP y/o por nombre de usuario mediante el fichero pg_hba.conf situado en PG_DATA.
  • Las conexiones de los clientes pueden ser autentificadas mediante otros paquetes externos.
  • A cada usuario de  Postgres  se le asigna un nombre de usuario y (opcionalmente) una contraseña. Por defecto, los usuarios no tienen permiso de escritura a bases de datos que no hayan creado.
  • Los usuarios pueden ser incluidos en grupos, y el acceso a las tablas puede restringirse en base a esos grupos.

AUTENTICACIÓN DE USUARIOS

La autenticación es el proceso mediante el cual el servidor de la base de datos y el postmaster  se aseguran de que el  usuario  que está solicitando acceso a la base de datos es en realidad quien dice ser. Todos los  usuarios  que quieren utilizar Postgres  se comprueban en la tabla  pg_user  para asegurarse que están autorizados a hacerlo. Actualmente, la verificación de la identidad del usuario se realiza de distintas formas:

DESDE LA SHELL DEL USUARIO

Un demonio  (servicio)  que se lanza desde la  shell del usuario anota el id original del usuario antes de realizar un  setuid  al id del usuario postgres. El id original del usuario se emplea como base para todo tipo de comprobaciones.

DESDE LA RED

Si  Postgres  se instala como distribuido, el acceso al  puerto TCP del postmaster  está disponible para todo el mundo. El ABD configura el fichero pg_hba.conf situado en el directorio PG_DATA especificando el sistema de autenticación  a utilizar en base al equipo que realiza la conexión y la base de datos a la que se conecta.

COPIA DE SEGURIDAD Y RESTAURACIÓN

Deben realizarse copias de seguridad de las bases de datos regularmente. Dado que Postgres  gestiona sus propios ficheros en el sistema, no se recomienda confiar en los sistemas de copia de seguridad del sistema para las copias de respaldo de las bases de datos; no hay garantía de que los  ficheros estén en un estado consistente que permita su us o después de la restauración.

Postgres proporciona dos utilidades para realizar las copias de seguridad de su sistema: pg_dump para copias de seguridad de bases de datos individuales y pg_dumpall para realizar copias de seguridad de toda la instalación de una sola vez. La copia de seguridad de una sola base de datos puede realizarse usando la siguiente orden:

% pg_dump nombredb > nombredb.pgdump

y puede ser restaurada usando

cat nombredb.pgdump | psql nombredb

Esta técnica puede usarse para mover bases  de datos a una nueva localización y para renombrar bases de datos existentes

¡Suscríbete a mi canal, para acceder a más contenidos gratuitos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *