15, octubre - 2018

Administración de usuarios y privilegios en MySQL

Administración de usuarios y privilegios en MySQL

Cada vez un usuario quiere trabajar, o mejor dicho, conectarse al servidor de MySQL. Ha de hacerlo con unas credenciales de identificación. Estas credenciales son, el host (el equipo desde el que desea conectar), el usuario (el nombre de usuario establecido) y password (la clave de acceso).

A esta identificación o login. Se le asocian una serie de privilegios sobre bases de datos concretas, columnas, tablas o rutinas u órdenes que podrán realizar o no.

Nota: Esta identificación es totalmente independiente de cualquier otra del mismo sistema o máquina, de esa forma. Si cambiamos la contraseña de acceso al servidor de bases de datos de MySQL, el resto de claves del equipo seguirán siendo las mismas. Funcionará únicamente en el acceso o conexión con nuestro servidor de bases de datos MySQL

Accesos predeterminados del sistema tras su instalación

En versiones de MySQL hasta la 5.1. Una vez hayamos instalado el servidor, tendremos dos usuarios predeterminados para poder acceder al sistema desde nuestro propio equipo como localhost.
Uno es el usuario ‘root’, o superusuario, con ese nombre de acceso (a no ser que lo hayamos cambiado en la instalación). El otro usuario es anónimo, sin identificación definida. Éste tendrá acceso únicamente a la base de datos ‘test’ (base de datos para realizar pruebas) y a todas las bases de datos que comiencen con la palabra ‘test’.

Nota: Una de las primeras operaciones que debemos llevar a cabo (si no se ha hecho en la propia instalación). Es la de cambiar tanto el nombre de usuario del root, como su contraseña de acceso. Esto lo podemos realizar en la página de administración PHPMyadmin, o desde la consola de comandos de MySQL.

Conexión con MySQL desde la consola de comandos de Linux o Windows

Para conectarnos con el servidor de bases de datos desde la consola de comandos debemos utilizar una de las siguientes frases programadas:

shell> mysql -h hostname -u username -p
Enter password: ********
shell>mysql -host=hostname -user=username -password=mypassword

Siendo la primera, la más sencilla y utilizada a la hora de conectar con las bases de datos.

Nota: Si no especificamos los parámetros de host, usuario o password. El sistema pondrá por defecto, como host, el localhost (la máquina local), como usuario (el mismo que estemos utilizando en Linux en ese momento) y como password ninguna, si coinciden nos dará acceso aunque no estén definidos, lo indicamos porque es mucho más cómodo que estar escribiendo las credenciales cada vez que deseemos conectar con nuestra base de datos desde le mismo equipo en el que esté instalada.

Cambio de contraseñas en MySQL

Ya que hemos mencionado que lo primero que hay que hacer en el sistema es cambiar (o poner) una contraseña al usuario root del servidor de bases de datos. Vamos a ver cómo podemos hacerlo.

Cada usuario, menos los usuarios anónimos del sistema. Puede cambiar su contraseña de acceso o conexión a las bases de datos, y si tiene permisos, también las contraseñas de los demás usuarios. MySQL guarda las contraseñas cifradas en formato MD5, esto quiere decir, que una vez encriptadas no tienen forma de desencriptar, o lo que es lo mismo, que una vez adjudicadas, no vamos a poder ver cual era la contraseña original, únicamente podremos ver la cadena que forma la contraseña cifrada. Esto es una medida o capa extra de protección. El sistema lo que hace cuando escribimos la contraseña de acceso, es encriptarla también y comparar ambas cadenas ya formateadas a MD5, si coinciden nos dará acceso, sino nos revocará o denegará el acceso a las bases de datos.

Vamos a recomendar dos formas de cambiar la contraseña desde la consola de comandos, una el comando SET PASSWORD, y otra el programa de administración mysqladmin.

Usando el comando SET PASSWORD para cambiar la contraseña de acceso

mysql> SET PASSWORD FOR root@localhost=PASSWORD('123456789');

Nos fijamos que estamos usando la función PASSWORD la cual, encripta la contraseña que le pasamos entre paréntesis y comillado simple.

Usando el programa mysqladmin para cambiar la contraseña de acceso

shell> mysqladmin -u root newpassword
Enter password:

Observamos que esta segunda forma se realiza fuera de la administración de mysql, directamente desde la consola de comandos de Linux.

Almacenamiento de usuarios y privilegios

MySQL utiliza una tabla dentro de la base de datos preestablecida mysql para guardar a los usuarios de las bases de datos y sus privilegios. Esta tabla es la denominada user, además de las tablas db, host, tables_priv y columns_priv para administrar los privilegios de los usuarios dentro del sistema. Se pueden ver dichas tablas y base de datos con las siguientes consultas SQL.

mysql> use mysql;

Para seleccionar la base de datos mysql y…

mysql> show tables;

Para ver el listado de tablas de la base de datos de administración del sistema.

Administración de privilegios con comandos GRANT y REVOKE

MySQL dispone de dos comandos específicos para actuar sobre los privilegios de los usuarios registrados en la base de datos mysql. Estos son el comando GRANT y el comando REVOKE.
Gracias al primero, vamos a poder crear usuarios y otorgarles privilegios específicos, con el segundo, vamos a poder revocar dichos privilegios.

Comando MySQL GRANT

Gracias a este comando vamos a poder crear usuarios del sistema y además otorgarles listas específicas de privilegios. Puede ser un comando realmente complejo ya que gracias a él, podemos otorgar privilegios sobre bases de datos, tablas y columnas por separado. Además de poder indicar también, si el usuario que estemos creando tiene la opción de conceder privilegios a otros usuarios del sistema.

De momento vamos a poner algunos ejemplos sencillos de creación de usuarios sin otorgarles privilegios específicos para que sea más sencillo su aprendizaje.
Por ejemplo, vamos a crear un usuario ‘userone’ con contraseña de acceso ‘userone001’, que pueda conectarse desde el servidor local, osea, desde la propia máquina u ordenador donde está instalada la base de datos, y además pueda utilizar cualquier base de datos que esté creada. Lo haríamos de la siguiente manera.

mysql> GRANT usage ON *.* TO userone@localhost IDENTIFIED BY 'userone001';

Esto nos crea dicho usuario y nos devuelve la consulta como Query Ok. Podemos ver las palabras claves usage, el comodín *.* (cualquier base de datos) y la @ haciendo referencia al host desde el que se va a poder conectar, en este caso desde localhost. Como no hemos listado ningún privilegio específico lo único que este usuario podrá hacer será conectarse a la base de datos, sin poder realizar ningún tipo de consulta en ella. Es solo un ejemplo de su uso.

Comando MySQL Revoke

Al igual que sucede con el comando GRANT, con REVOKE podemos revocar privilegios y decidir a qué partes específicas queremos hacer referencia. Podemos aplicarlo sobre una base de datos, sobre todas, sobre columnas específicas, así como listar los privilegios que deseamos en este caso revocar. Vamos a ver un sencillo ejemplo de su uso.

mysql> REVOKE all ON *.* FROM userone@localhost;

Hemos revocado cualquier privilegio al usuario ‘userone’ que pudiera tener, como no los tenía no hemos hecho nada en realidad, solo mostrar un ejemplo de su uso.

Listado de privilegios disponibles en MySQL

Ahora que hemos visto qué comandos hay que usar para administrar los privilegios. Vamos a ver la lista completa de éstos. MySQL permite guardar la mayor parte de los privilegios existentes en la tabla user. En esta tabla se guardan los privilegios globales de cada uno de los usuarios, los privilegios que se aplican a todas las bases de datos y al propio servidor.

Normalmente este tipo de privilegios se aplican únicamente a administradores del sistema que sepan bien lo que hacen y sean de la máxima confianza, ya que, con ellos se puede administrar por completo el servidor de bases de datos y un error podría ser fatal para el mismo. Aún así, vamos a verlos.

La lista completa de privilegios tabla user

mysql> use mysql;
mysql> describe user;

Todos los campos que nos interesan son de tipo booleano, (YES / NO) siendo su valor predeterminado el de NO.
Describimos uno a uno para ver lo que significan:

  • Select_priv
    Privilegio para poder leer datos
  • Insert_priv
    Privilegio para poder insertar datos
  • Update_priv
    Privilegio para poder actualizar datos
  • Delete_priv
    Privilegio para poder borrar datos
  • Create_priv
    Privilegio para poder crear nuevas bases de datos y tablas
  • Drop_priv
    Privilegio para poder borrar bases de datos y tablas
  • Reload_priv
    Privilegio para poder utilizar el comando FLUSH (indicador de recarga)
  • Shutdown_priv
    Privilegio para detener o apagar el servidor de bases de datos
  • Process_priv
    Privilegio para poder listar los procesos en curso del sistema
  • File_priv
    Privilegio para cargar datos o exportar éstos desde un archivo o desde la base de datos
  • Grant_priv
    Privilegio para poder asignar otros permisos a usuarios distintos y al propio
  • References_priv
    Privilegio para poder referenciar bases de datos
  • Index_priv
    Privilegio para poder crear o borrar índices en columnas de las bases de datos
  • Alter_priv
    Privilegio para alterar las estructuras de tablas
  • Show_db_priv
    Privilegio para listar las bases de datos existentes
  • Create_tmp_table_priv
    Privilegio para poder crear tablas temporales de MySQL
  • Lock_tables_priv
    Privilegio para poder bloquear tablas en consultas
  • Execute_priv
    Privilegio para poder ejecutar procedimientos programados o vistas también programadas
  • Repl_slave_priv
    Privilegios relacionados con las replicaciones de bases de datos
  • Repl_client_priv
    Privilegios relacionados con las replicaciones de bases de datos
  • Create_view_priv
    Privilegio para poder crear vistas personalizadas o programadas en MySQL
  • Show_view_priv
    Privilegio para poder listar las vistas programadas
  • Create_routine_priv
    Privilegio para crear rutinas o procedimientos programados de MySQL
  • Alter_routine_priv
    Privilegio para poder alterar rutinas
  • Create_user_priv
    Privilegio para poder crear nuevos usuarios del sistema

Ahora que ya conocemos la lista completa de privilegios del sistema podríamos invocar distintas llamadas con GRANT y REVOKE para asignar o revocar los permisos. Pero diremos la forma más sencilla de hacerlo y también la más segura. Es desde la interface del sistema PHPMyAdmin que cualquier hosting nos va a ofrecer. Además desde ahí vamos poder asignar éstos a distintas bases de datos o columnas sin liarnos. Ya tendremos tiempo de seguir administrando MySQL desde la consola de comandos, algo que por otra parte, nos encanta.
Vemos la interface que de la que hablamos.

Con esto damos por concluida la lección sobre la Administración de usuarios y privilegios en MySQL.
Como siempre gracias por la lectura y esperamos vuestros comentarios.

¿Te ha parecido interesante este contenido..?
En ese caso, te pedimos por favor que nos des tu valoración graicas a esto podemos mejorar nuestras lecciones. Gracias.
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Social Media

  • YouTube

    Suscríbete a nuestro canal de YouTube para ver todos nuestros vídeos sobre programación

  • Twitter

    Síguenos en Twitter e infórmanos de ello, es muy probable que también te sigamos

  • Facebook

    Estamos pensando si abrir una página de Facebook o no...

  • LinkedIn

    En breve...

  • Instagram

    En breve...

  • Github

    En breve...

A %d blogueros les gusta esto: