Escolar Documentos
Profissional Documentos
Cultura Documentos
En esta parte se vera cómo gestionar usuarios MySQL desde la línea de comandos/shell de MySQL. Lo más
básico que debemos saber al respecto es crear, borrar y modificar los usuarios así como saber el modo de
manejar y asignar o revocar los privilegios que cada usuario va a tener respecto a las bases de datos
instaladas en el servidor.
La gestión de usuarios también se puede realizar desde herramientas gráficas y aplicaciones web como por
ejemplo phpMyAdmin o el administrador gráfico de MySQL, en este caso vamos a lo que siempre
tendremos a mano, la shell de MySQL.
Lo primero que debemos hacer es acceder a la shell de MySQL con un usuario que tenga privilegios de
administración, en este caso lo hacemos como root y desde el propio host por línea de comandos:
# mysql -u root -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Crear usuario MySQL con CREATE USER
El comando “CREATE USER” de MySQL nos va a permitir crear usuarios y asignarles una contraseña con el
parámetro “IDENTIFIED BY“. Más adelante veremos que este paso lo podemos evitar utilizando
directamente el comando “GRANT” para la creación del usuario y asignación de privilegios en un único
paso.
La sintaxis es la siguiente:
Así pues, si quisiéramos crear un usuario llamado “foo” y con clave “mipassword” ejecutaríamos el siguiente
comando:
Tenemos la opción de especificar la contraseña con su valor en hash. Este valor debe ser generado
anteriormente con la función PASSWORD() de MySQL:
Cuando creamos un usuario utilizando CREATE USER, efectivamente la creación es satisfactoria, pero el
usuario únicamente puede conectarse y visualizar ciertos parámetros del servidor. La verdad es que
podemos crear directamente los usuarios con el comando GRANT y a la vez asignar los privilegios que
queramos respecto a las bases de datos del sistema. Básicamente GRANT asigna privilegios al usuario
indicado, y si no existe lo crea.
En el siguiente ejemplo, asignamos todos los privilegios posibles al usuario “foo” (si no existe se crea) sobre
todas las bases de datos y tablas, para conexiones desde localhost únicamente y además le concedemos el
permiso GRANT para que tenga la opción de asignar permisos a otros usuarios:
ALL PRIVILEGES, ALTER, ALTER ROUTINE, CREATE TABLE, CREATE ROUTINE, CREATE TEMPORARY
TABLES, CREATE USER (Permite utilizar CREATE USER, DROP USER, RENAME USER, y REVOKE ALL
PRIVILEGES), CREATE VIEW, DELETE, DROP, EXECUTE, FILE, INDEX, INSERT, LOCK TABLES,
PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SELECT, SHOW DATABASES, SHOW
VIEW, SHUTDOWN, SUPER, UPDATE, USAGE, GRANT OPTION.
Recordar que el comando HELP de la shell de MySQL os mostrará la ayuda relativa a cada comando. Para
encontrar ayuda de GRANT usamos HELP GRANT y vemos que además de la información relativa al
comando aparecen varios ejemplos de uso:
Como puede observar, cuando los privilegios hacen referencia a bases de datos, tablas o hosts distintos se
ejecuta un comando por cada uno de ellos, no se puede englobar todo en una única ejecución ya que se
almacena en registros distintos dentro de la tabla de privilegios.
Si quisieramos asignar privilegios a un usuario que va a conectar desde distintos hosts, lo haríamos de modo
individual, es decir:
mysql> GRANT ALL ON db1.* TO 'foo'@'host1';
mysql> GRANT ALL ON db1.* TO 'foo'@'host2';
Para asignar un “wildcard” de hosts utilizamos el carácter %. Es decir, de este modo el usuario puede
conectar a MySQL desde cualquier host:
El comando SHOW GRANTS sirve para visualizar en la salida estándar de la shell de MySQL los privilegios
asignados a un usuario:
La opción “GRANT OPTION” sólo es necesaria si el usuario ha sido configurado con el privilegio “WITH
GRANT OPTION”.
Al igual que a la hora de asignar los privilegios se realiza de forma individual por base de datos, host, tabla,
etc. A la hora de revocar es lo mismo:
Una vez visualizados los privilegios con el comando SHOW GRANTS, eliminamos los que estimemos
oportuno:
mysql> REVOKE SELECT ON test.* FROM 'foo'@'localhost';
En el caso de ‘foo’@’localhost’ vemos que tiene todos los privilegios para todas las bases de datos, en lugar
de eliminar completamente esa entrada de privilegios podemos hacerla más restrictiva, por ejemplo
manteniendo todos los permisos excepto INSERT:
+---------------------------------------------------------------------------+
| Grants for foo@localhost |
+---------------------------------------------------------------------------+
| GRANT SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS,
FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER,
CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE,
REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE,
CREATE USER, EVENT, TRIGGER ON *.* TO 'foo'@'localhost' IDENTIFIED BY PASSWORD
'*CEE870801502ACAD44FA46CA2CA4F58C2B721A67' |
+---------------------------------------------------------------------------+
FLUSH PRIVILEGES
El comando “FLUSH PRIVILEGES” sirve para recargar la tabla de privilegios pero sólo es necesario cuando
se manipulan directamente las tablas de privilegios ejecutando INSERT, DELETE, etc. en lugar de usar los
comandos GRANT y REVOKE:
Es decir, en los casos que he especificado en este artículo no es necesario utilizar este modo de recargar los
privilegios, sólo sería necesario si crearamos o eliminaramos los usuarios “a mano” directamente sin los
comandos específicos para ello de MySQL: