MYSQL: usuarios y permisos

( sistemas / sql )

Cuando creamos una BB.DD. por lo general crearemos uno o más usuarios con permisos para esa BB.DD. que acabamos de crear. El o los usuarios creados podremos darles acceso total o parcial a esa BB.DD. según lo que queramos que haga o pueda hacer, incluso dar diferentes permisos dependiendo desde donde se conecte.

Para crear un usuario usaremos CREATE USER donde especificaremos el nombre el host y la contraseña en este formato:

CREATE USER 'usuario'@'host' IDENTIFIED BY 'contraseña';

Si omitimos @'host' asumirá '%' que indica cualquier host, ya sea local o remoto.

Si omitimos IDENTIFIED BY 'contraseña' el usuario NO tendrá contraseña lo cual es MALA idea.

Si queremos especificar una contraseña cifrada con PASSWORD() deberemos añadir PASSWORD después de BY.

NOTA: Aunque a partir de la versión 5.0.2 de MySQL existe la sentencia para crear usuarios CREATE USER, en versiones anteriores se usa exclusivamente la sentencia GRANT para crearlos. En general es preferible usar GRANT, ya que si se crea un usuario mediante CREATE USER, posteriormente hay que usar una sentencia GRANT para concederle privilegios.

Para dar permisos a un usuario usaremos este formato:

GRANT tipo_permisos ON tabla(s) TO 'usuario'@'host' IDENTIFIED BY 'contraseña';

Por lo general daremos permisos totales al usuario de la BB.DD. creada de la siguiente forma:

GRANT ALL ON BBDD.* TO 'usuario'@'localhost';

Con esto permitimos a usuario acceder desde localhost a TODAS las tablas de BBDD.

IMPORTANTE: si el usuario no existe y lo queremos crear con GRANT debemos especificar una contraseña porque por defecto no tendrá:

GRANT ALL ON BBDD.* TO 'usuario'@'localhost' IDENTIFIED BY 'contraseña';

Si queremos que ese mismo usuario solo pueda hacer SELECTs cuando se conecta remotamente debemos usar otro GRANT adicional:

GRANT SELECT ON BBDD.* TO 'usuario'@'%';

Referencias:

Modificado el 18 Abril, 2015
Creado el 11 diciembre, 2011
   

Compartiendo conocimiento desde 1995 - I.M.D. I.M.D.