Bases de datos: Conceptos básicos de SQL

Structured Query Language (SQL) es, según Wikipedia “un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en éstas. Una de sus características es el manejo del álgebra y el cálculo relacional permitiendo efectuar consultas con el fin de recuperar -de una forma sencilla- información de interés de una base de datos, así como también hacer cambios sobre ella.”

SQL es utilizado a diario por millones de personas en todo el mundo, que administran bases de datos en cualquier empresa u organización, haciendo más fácil la búsqueda de información, así como también la adición y modificación de la misma. La sintaxis de SQL no es para nada difícil si se le pone un poco de empeño en aprender. Los comandos básicos pronto son dominados y a partir de allí se puede empezar a crear de a poco estructuras más complicadas para búsquedas mucho más personalizadas.

Apuntes básicos de SQL es una muy buena guía publicada por Unai Estébanez (unai@unainet.net) que se convierte en una gran opción de aprendizaje del SQL práticamente desde cero.  La guía contiene los principales conceptos, sentencias, ejemplos y referencias del SQL, pretendiendo que todos los que estén interesados en este mundo puedan tener muy claro al final de la lectura lo que es SQL y como debe ser usado.

Descargar Guía – Conceptos Básicos del SQL

Para usuarios más avanzados, recomiendo leer este artículo donde se habla de la seguridad en las BD MySQL.

Cómo revisar la Seguridad en MySQL

MySQL es una de las bases de datos más extendidas entre los sistemas de información de producción en las organizaciones. Es por ello que se ha convertido desde hace tiempo en blanco de hackers y atacantes en busca de información de interés.

Desde el punto de vista técnico existen distintos puntos de revisión de una base de datos MySQL, fundamentalmente:

  • Asignación de privilegios
  • Fichero de configuración
  • Cuentas de usuario
  • Acceso remoto

Una de las primeras acciones de revisión se debe centrar en la revisión de las cuentas por defecto, en este caso root. Para ello se puede comprobar si existe la cuenta y contiene contraseña en blanco:

SELECT User, Host

FROM user

WHERE User=’root’;

El acceso remoto (puerto 3306) a la base de datos debe ser monitorizado y controlado. Es muy común que el servidor de aplicaciones resida en la misma máquina que la base de datos, por lo que se podría limitar las conexiones a la base de datos desde fuera de localhost. Para ello se puede configurar esta opción en el fichero my.cnf añadiendo:

MYSQLD_OPTIONS=”–skip-networking”

Adicionalmente existen algunos parámetros de configuración o arranque de la base de datos interesantes desde el punto de vista de la seguridad:

  • skip-grant-tables: Arrancar el sistema con esta parámetro supone una grave brecha de seguridad, ya que supone que cualquier usuario tiene privilegios para hacer cualquier cosa sobre la base de datos. En algún caso puede ser útil para recuperar la contraseña de root.
  • safe-show-database: Permite mostrar solamente aquellas bases de datos sobre las que un usuario tiene algún tipo de privilegio
  •  safe-user-create: permite determinar si un usuario puede crear nuevos usuarios siempre y cuando no tenga privilegios de INSERT sobre la tabla mysql.user

Finalmente, y partiendo de la base de asignación del mínimo privilegio necesario, uno de los aspectos de seguridad a revisar son los privilegios asignados en la base de datos:

Select * from user where

Select_priv  = 'Y' or Insert_priv  = 'Y'
or Update_priv = 'Y' or Delete_priv  = 'Y'
or Create_priv = 'Y' or Drop_priv    = 'Y'
or Reload_priv = 'Y' or Shutdown_priv = 'Y'
or Process_priv = 'Y' or File_priv    = 'Y'
or Grant_priv   = 'Y' or References_priv = ‘Y'
or Index_priv = 'Y' or Alter_priv = 'Y';

Select * from host
where Select_priv  = 'Y' or Insert_priv  = 'Y'
or Create_priv = 'Y' or Drop_priv    = 'Y'
or Index_priv = 'Y' or Alter_priv = 'Y';
or Grant_priv   = 'Y' or References_priv = ‘Y'
or Update_priv = 'Y' or Delete_priv  = 'Y'

Select * from db
where Select_priv  = 'Y' or Insert_priv  = 'Y'
or Grant_priv   = 'Y' or References_priv = ‘Y'
or Update_priv = 'Y' or Delete_priv  = 'Y'
or Create_priv = 'Y' or Drop_priv    = 'Y'
or Index_priv = 'Y' or Alter_priv = 'Y';

Áudea Seguridad de la Información

Antonio Martínez

Departamento de Gestión

www.audea.com