domingo, 13 de junio de 2010

Crear o Eliminar un usuario en MySQL

CREAR UN USUARIO
---------------------


Existen 3 métodos pero aquí describiré los 2 mejores o principales, según mi criterio:

1.Con la sentencia GRANT

Utilizando la sentencia GRANT podemos crear un usuario a la par que otorgarle uno o varios privilegios sobre los objetos de una base de datos, o la base de datos completa.
Al encontrarse una sentencia de tipo GRANT, el motor de MySQL revisa si el usuario existe previamente para el contexto que estamos asignándole permisos, y si dicho usuario no está presente en el sistema, lo crea.
No entraré en detalles sobre todas las opciones que nos permite ejecutar la sentencia GRANT, sino solo en las que se refieren a la creación del usuario.
Pongamos un ejemplo, queremos crear el usuario adolfo para la base de datos test:

- Nos conectamos con un usuario que tenga privilegios, root, como propietario de la base de datos, los tiene.

$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.0.67 Source distribution


Nos conectamos utilizando -u para indicarle el usuario y si quisieramos indicarle un password, deberiamos poner -p (sin añadirle la contraseña), en este caso la cuenta root, al ser una máquina de desarrollo, está desprotegida.

- Lanzamos la sentencia GRANT, indicando los permisos que otorgamos, la base de datos y los objetos de la misma sobre los que estamos asignando privilegios, el nombre del usuario y el password:

mysql> GRANT SELECT, INSERT ON test.* TO 'hugo'@'localhost' IDENTIFIED BY 'escribir_pass';

En este ejemplo permitimos al usuario hugo que seleccione (SELECT) e inserte (INSERT) en todos los objetos (*) de la base de datos test, además indicamos que el contexto sea la máquina local de la base de datos (localhost), lo que impedirá que el usuario se conecte desde otras máquinas, y finalmente asignamos un password mediante IDENTIFIED BY.

Si quisieramos que el usuario no tuviera un password, deberemos omitir la cláusula IDENTIFIED BY.
En el caso de que el modo SQL del servidor estuviera en NO_AUTO_CREATE_USER, la creación de usuarios no estaría permitida a no ser que tuvieran asignado un password no vacío.

- Una vez hecho esto, podremos conectarnos con nuestro usuario y realizar las acciones para las que hemos asignado permisos:

$ mysql -u hugo -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.0.67 Source distribution
mysql> use test;
Database changed
mysql> select * from equipos;
+-------------------+------------+
| nombre | pais |
+-------------------+------------+
| Boca Juniors | Argentina |
| Real Madrid | España |
| Manchester United | Inglaterra |
+-------------------+------------+
3 rows in set (0,03 sec)


Más detalles sobre la sentencia GRANT y los privilegios disponibles en la documentación de mysql.

2.La sentencia CREATE USER

A partir de la versión MySQL 5.0.2 existe la posibilidad de crear usuarios sin necesidad de asignarles privilegios, utilizando la sentencia CREATE USER.

Por ejemplo, para crear el usuario fernando:

$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.0.67 Source distribution
mysql> CREATE USER 'carlos'@'localhost' IDENTIFIED BY 'pass_carlos';
Query OK, 0 rows affected (0,00 sec)


Al igual que con la sentencia GRANT, el contexto 'localhost' define que el usuario solamente se puede conectar desde el servidor de MySQL, y el IDENTIFIED BY define el password del usuario, se puede omitir, para un usuario sin password, siempre que el modo SQL no sea NO_AUTO_CREATE_USER.

Conexión con el usuario, utilizando la opción -p:

$ mysql -u carlos -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.0.67 Source distribution


Los privilegios necesarios para ejecutar la sentencia CREATE USER son CREATE USER o bien INSERT en la base de datos mysql.
El usuario recién creado no tiene privilegio alguno, por lo que deberemos asignarle permisos utilizando sentencias GRANT (esta vez sin la cláusula IDENTIFIED BY).

Más detalles sobre esta sentencia en la documentación de mysql.

ELIMINAR UN USUARIO
------------------------


Ejecutamos 2 lineas estando como root. Con la primera instrucción le quitamos todos los privilegios al usuario sobre la base de datos, y con la segunda instrucción lo eliminamos.
Por ejemplo, teniendo creado el usuario hugo, y ligado a la base de datos test:

mysql>revoke all on test.* from hugo@localhost;
mysql>drop user hugo@localhost;


Más detalles sobre esta sentencia en la documentación de mysql.


OTORGAR PRIVILEGIOS

--------------------
Si queremos otorgarle TODOS los permisos sobre una base de datos a un usuario existente, hacemos lo siguiente:

mysql> GRANT ALL ON nombre_base_datos.* TO 'usuario_base_datos'@'%';

En este caso el ámbito del usuario es %, por lo cual es accesible desde equipos remotos. Si deseamos que el acceso a la base de datos con el usuario sea en forma local reemplazamos % por localhost.

1 comentario: