Herramienta para ejecutar consultas SQL en la base de datos de producción

Escrito por picodotdev el .
software-libre programacion
Enlace permanente Comentarios

No siempre las aplicaciones proporcionan los datos que se necesitan. A veces para obtener cierta información de forma puntual o para corregir un dato que no se puede hacer desde la aplicación es necesario lanzar una consulta SQL a la base de datos relacional. Esto no es lo ideal, simplemente en ocasiones es lo más simple y rápido. Por otro lado, para tareas de análisis algunos usuarios necesitan una forma de tener acceso a los datos y obtener gráficas para analizarlos. En el artículo comento varias herramientas para tener acceso a las diferentes bases de datos ya sean de producción o del entorno de QA.

Sí, es cierto, lanzar consultas SQL directamente en la base de datos de producción o una réplica no es lo ideal ni debería ser habitual, sin embargo, a veces tener acceso a los datos de la base de datos de producción es la forma más rápida y sencilla de obtener información para resolver un bug del que ni siquiera un sistema centralizado de almacenamiento de trazas como ELK proporciona información relevante o simplemente porque alguien del departamento financiero, marketing u otro departamento solicita una información que necesita.

En ambos casos del bug o de alguien que necesita información en ocasiones tienen la mala costumbre de necesitar ser atendidos con rapidez. Si para obtener la información se necesita un proceso que involucra a varias personas, cada una con sus propias tareas y prioridades, el proceso es lento y el demandante de esa información acabará poco contento quejándose del departamento de IT. El proceso también será lento si es complicado o sólo determinadas personas tienen los permisos necesarios pare realizarlo o con riesgos si las herramientas que se usan otorgan gran poder pero requieren gran responsabilidad.

Proporcionando una herramienta a modo de sírvete tú mismo uno se sorprende de las consultas que alguien del departamento financiero o de marketing son capaces de hacer ellos mismos para obtener la información que necesitan si tienen el interés de aprender algo de SQL. Lo cual es beneficioso en varios sentidos, ellos son más autónomos en su trabajo y las personas de IT no se ven interrumpidas para atender este tipo de tareas, sólo cuando la consulta tiene cierta dificultad.

Si además como en los microservicios hay múltiples bases de datos para varios de ellos tener acceso a todas las bases de datos es más complicado de gestionar. Por otro lado, al decir la base de datos de producción también es válido para tener acceso a las bases de datos del entorno de QA.

Herramienta para obtener y modificar datos de una base de datos relacional

SQLPad es una pequeña herramienta que actúa como cliente de una base de datos relacional con la que es posible lanzar consultas SQL mediante una interfaz web. Esta herramienta hace muy sencillo el acceso a la base de datos de producción, entorno de QA o a una de sus réplicas, dado que utiliza una interfaz web no es necesario instalar ni configurar ninguna herramienta adicional, solo requiere un navegador web que todo ordenador ya posee.

Simplemente es necesario seleccionar la base de datos de la que se quieren los datos y ejecutar la consulta SQL deseada para obtener los datos como resultado. Permite explorar los esquemas de la base de datos, las tablas, los campos y cuales son sus tipos.

SQLPad tiene una licencia de software libre y soporta las bases de datos relacionales más populares como Postgres, MySQL, SQL Server, Cassandra, Google BigQuery, SQLite entre otras.

SQLPad

SQLPad

Otra funcionalidad habitual es poder exportar los datos en formato CSV o xlsx para procesarlos con algún comando o programa en el equipo en local o simplemente para hacer algún tipo de tratamiento con el programa ofimático de hoja de cálculo.

1
2
3
4
id,name
1,one
2,two
3,two
data.csv

OnlyOffice CSV

OnlyOffice CSV

Aunque SQLPad no ofrece la potencia de otras herramientas específicas para la tarea permite visualizar los datos de forma básica en gráficas. Por ejemplo obtener un gráfico de barras de una agrupación de datos.

1
2
$ docker-compose up

docker-compose-up.sh

SQLPad Visualization SQLPad Visualization

SQLPad Visualization

Permite además guardar las consultas que sirve para compartir entre diferentes miembros de un equipo aquellas que son habituales o proporcionarles a personas que no saben SQL la consulta que deben ejecutar para obtener los datos que necesitan de forma periódica.

Consultas compartidas en SQLPad

Consultas compartidas en SQLPad

Una herramienta que proporciona acceso a los datos de producción requiere autenticación y permisos para otorgar únicamente el acceso a las bases de datos o conceder acceso de solo lectura a los datos. Los usuarios con el rol de administrador puede crear conexiones a bases de datos, crear usuarios y definir qué conexiones pueden utilizar cada usuario con una fecha de expiración para cada usuario. Para crear una conexión de solo lectura hay que crear un usuario en la base de datos que únicamente tenga permisos de solo lectura, posteriormente en SQLPad para definir una conexión de solo lectura se usa este usuario. Del mismo modo con los permisos del usuario de conexión de la base de datos es posible limitar las tablas a las que se tienen acceso u otros permisos que permita la base de datos.

SQLPad ofrece un contenedor de Docker y un archivo de Docker Compose con el que iniciar la herramienta. El siguiente archivo de Docker Compose define un contenedor con una base de datos PostgreSQL a la que se conecta e inicializa el contenedor de SQLPad. Los archivos del código fuente completo del ejemplo incluye algunos adicionales, SQLPad se accede con la siguiente URL http://localhost:3000/ que solicita una credenciales admin@sqlpad.com/admin.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: '3'
services:
  postgres:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: sqlpad
      POSTGRES_PASSWORD: sqlpad
    volumes:
      - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d

  sqlpad:
    # To use Dockerfile at root of this project, use build instead of image
    # build: ../../
    image: sqlpad/sqlpad:5
    hostname: 'sqlpad'
    ports:
      - '3000:3000'
    environment:
      SQLPAD_ADMIN: 'admin@sqlpad.com'
      SQLPAD_ADMIN_PASSWORD: 'admin'
      SQLPAD_APP_LOG_LEVEL: debug
      SQLPAD_WEB_LOG_LEVEL: warn
      SQLPAD_SEED_DATA_PATH: /etc/sqlpad/seed-data
      SQLPAD_CONNECTIONS__pgdemo__name: Postgres demo
      SQLPAD_CONNECTIONS__pgdemo__driver: postgres
      SQLPAD_CONNECTIONS__pgdemo__host: postgres
      SQLPAD_CONNECTIONS__pgdemo__database: sqlpad
      SQLPAD_CONNECTIONS__pgdemo__username: sqlpad
      SQLPAD_CONNECTIONS__pgdemo__password: sqlpad
      SQLPAD_CONNECTIONS__pgdemo__multiStatementTransactionEnabled: 'true'
      SQLPAD_CONNECTIONS__pgdemo__idleTimeoutSeconds: 86400
    volumes:
      - ./seed-data:/etc/sqlpad/seed-data
docker-compose.yml
1
2
$ docker-compose up

docker-compose-up.sh

Herramientas para visualizar datos

Obtener los datos y descargarlos en formato csv o xlsx permite extraer información, para comprender mejor un gran volumen de datos se utilizan diferentes tipos de gráficas.

SQLPad tiene una funcionalidad básica para representar los datos en formato gráfico pero no es una herramienta especializada en esta tarea.

Redash, Metabase, Apache Superset son herramientas dedicadas a construir gráficas a partir de datos de la categoría inteligencia empresarial o business intelligence. Permiten crear paneles de control con la información que se desee y ver la evolución y tendencia de los datos. Esta información sirve como apoyo para tomar decisiones basadas en los datos.

Algunas herramientas tienen un coste si se usan con el hosting que ofrecen pero son gratuitas si se hospeda en infraestructura propia.

Redash Metabase Apache Superset

Redash, Metabase y Apache Superset

Cómo proteger los datos

Además de limitar a que bases de datos tiene permisos de acceso cada usuario algunos datos almacenados son sensibles, por motivos de seguridad si se tratan de contraseñas si no se utiliza una forma correcta de guardar contraseñas con salted-password-hashing en la base de datos, datos personales protegidos por leyes que de no custodiar correctamente los datos en caso de filtración suponen sanciones como importantes multas económicas o datos de tarjetas de crédito, códigos de seguridad, fechas de expiración o cuentas bancarias.

Una forma de proteger los datos aún teniendo acceso a ellos es cifrarlos es utilizando Vault con su funcionalidad de protección de datos. Vault permite actuar como servicio para cifrar los datos a guardar en la base de datos y descifrar los datos al recuperarlos de modo que aún teniendo acceso a la base de datos no supone ningún problema de seguridad. Aún así siempre es recomendable otorgar a los usuarios los permisos mínimos que necesiten o limitar únicamente a ciertos usuarios los permisos.

Vault Encryption

Vault Encryption
Comparte el artículo: