Administrar usuarios

Categories:

Al instalar MySQL se crea un usuario predeterminado – root -. Este usuario puede realizar cualquier acción sobre cualquier base de datos que se encuentre en el sistema.

Para el ambiente de desarrollo resulta muy práctico utilizar este usuario – nos evitamos la creación de un usuario y asignación de permisos – pero cuando pasamos a producción, por cuestiones de seguridad, es conveniente crear otros usuarios – generalmente se recomienda un usuario asociado a una base de datos – .

MySQL cuenta con un modelo se seguridad, capaz de controlar prácticamente cada acción que realicen los usuarios. El rango abarca desde los comandos que puede ejecutar cada usuario hasta el número de consultas que puede realizar en una hora. Este modelo trabaja en una secuencia de dos pasos:

Autenticación

Se examina el servidor, nombre de usuario y contraseña. Si concuerda con la tabla de privilegios de MySQL, el usuario es autenticado y pasa a la sección de autorización. De otra forma se niega el intento de conexión.

Autorización

Una vez autenticado, el comando solicitado por el usuario se examina y se compara con los privilegios definidos para el usuario. Si el usuario tiene suficientes privilegios, el comando se ejecuta. De otra forma se niega la ejecución del comando.

La manera más fácil de crear una cuenta de usuario es con GRANT *.

* GRANT crea al usuario y asigna los permisos al mismo tiempo. También se puede crear un usuario con CREATE USER y posteriormente se asignan los permisos con GRANT.

mysql> GRANT privilegio1, privilegio2, privilegioN ON mi_base_de_datos.*
        -> TO ‘usuario’@’host’ IDENTIFIED BY ‘password’;

mysql> GRANT SELECT, INSERT, UPDATE ON mi_base_de_datos.*
        -> TO ‘usuario’@’localhost’ IDENTIFIED BY ‘pwd_secreto’;

Para permitir todos los privilegios en todas las bases de datos – no es lo recomendable pero es posible -, utilizar *.* en lugar del nombre de la base de datos y ALL PRIVILEGES en lugar de una lista de privilegios separada por comas.

mysql> GRANT ALL PRIVILEGES ON *.*
     > TO ‘usuario’@’localhost’ IDENTIFIED BY ‘pwd_secreto’;

Para eliminar un usuario completamente del sistema, quitándo todos los privilegios y borrando su cuenta de acceso se utiliza el comando DROP USER.

mysql> DROP USER ‘usuario’@’host’;

mysql> DROP USER ‘usuario’@’localhost’;

Para conceder privilegios adicionales a un usuario también se utiliza el comando GRANT como se utilizó para la creación del usuario. MySQL reconocerá que existe el usuario y solo modificará los privilegios.

mysql> GRANT privilegio1, privilegio2, privilegioN ON mi_base_de_datos.*
        -> TO ‘usuario’@’host’;

mysql> GRANT DELETE ON mi_base_de_datos.* TO ‘usuario’@’localhost’;

Para remover – quitar – privilegios a un usuario se utiliza el comando REVOKE.

mysql> REVOKE privilegio1, privilegio2, privilegioN ON mi_base_de_datos.*
        -> FROM ‘usuario’@’host’;

mysql> REVOKE DELETE, UPDATE ON mi_base_de_datos.*  FROM ‘usuario’@’localhost’;

Los mismos comandos GRANT y REVOKE pueden ser utilizados para administrar los privilegios de los usuarios a nivel tabla y columna.

mysql> GRANT INSERT ON mi_base_de_datos.usuarios TO
        -> ‘usuario’@’localhost’;

mysql> GRANT INSERT (estatus), SELECT (estatus)  ON mi_base_de_datos.usuarios
        -> TO ‘usuario’@’localhost’;

Para renombrar un usuario existente se utiliza el comando RENAME USER

mysql> RENAME USER ‘usuario’@’host’ TO ‘usuario_uno’@’host’;

mysql> RENAME USER ‘usuario_uno’@’localhost’ TO ‘usuario_dos’@’localhost’;

La configuración de privilegios puede resultar un poco confusa, una manera de facilitarnos la administración es habilitar todos los permisos pero limitarlos a una base de datos. De esta manera, en el caso de existir una vulnerabilidad en nuestra aplicación, el alcance del ataque estaría limitado a una base de datos.

GRANT ALL PRIVILEGES ON mi_base_de_datos.*
     > TO ‘usuario’@’localhost’ IDENTIFIED BY ‘pwd_secreto’;