Cómo crear un nuevo usuario y otorgarle permisos en MySQL
Introducción
MySQL es un sistema de gestión de bases de datos relacionales de código abierto. Se utiliza comúnmente como parte del stack LAMP (que significa Linux, Apache, MySQL y PHP) y, al momento de escribir este texto, es la base de datos de código abierto más popular del mundo.
Esta guía explica cómo crear un nuevo usuario de MySQL y otorgarle los permisos necesarios para realizar diversas acciones.
Requisitos previos
Para seguir esta guía, necesitará acceso a una base de datos MySQL. Esta guía asume que la base de datos está instalada en un servidor virtual privado con Ubuntu 20.04, aunque los principios que se describen son aplicables independientemente de cómo acceda a su base de datos.
Si no tienes acceso a una base de datos MySQL y quieres configurarla tú mismo, puedes seguir una de nuestras guías sobre cómo instalar MySQL. De nuevo, independientemente del sistema operativo de tu servidor, los procedimientos para crear un nuevo usuario de MySQL y otorgarle permisos suelen ser los mismos.
Crear un nuevo usuario
Tras la instalación, MySQL crea una cuenta de usuario. raíz Crea un usuario que puedes utilizar para administrar tu base de datos. Este usuario tiene privilegios completos en el servidor MySQL, lo que significa que tiene control total sobre cada base de datos, tabla, usuario, etc. Por esta razón, es mejor evitar usar esta cuenta fuera de las funciones administrativas. Este paso explica cómo usar el usuario root de MySQL para crear una nueva cuenta de usuario y otorgarle privilegios.
En sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se autentica por defecto mediante el plugin `auth_socket`, en lugar de una contraseña. Este plugin requiere que el nombre de usuario del sistema operativo que invoca el cliente MySQL coincida con el nombre de usuario de MySQL especificado en el comando. Esto significa que, para acceder al usuario root de MySQL, debe anteponer `sudo` al comando `mysql` para invocarlo con los privilegios del usuario root de Ubuntu.
$ sudo mysqlNota: Si su usuario root de MySQL está configurado para autenticación por contraseña, deberá usar un comando diferente para acceder a la consola de MySQL. El siguiente comando ejecutará su cliente MySQL con privilegios de usuario normales, y obtendrá privilegios de administrador en la base de datos simplemente autenticándose con la contraseña correcta:
$ mysql -u root -pUna vez que tengas acceso a la consola de MySQL, puedes crear un nuevo usuario con la instrucción CREATE USER. Estas siguen esta sintaxis general:
mysql> CREAR USUARIO 'username'@'host' IDENTIFICADO CON authentication_plugin POR 'password';Tras ejecutar CREATE USER, se especifica un nombre de usuario. A continuación, se añade el símbolo @ y el nombre del host desde el que se conectará este usuario. Si solo se va a acceder a este usuario localmente desde el servidor Ubuntu, se puede especificar localhost. No siempre es necesario poner el nombre de usuario y el nombre del host entre comillas, pero hacerlo puede ayudar a prevenir errores.
Al elegir un plugin de autenticación de usuarios, tiene varias opciones. El plugin auth_socket, mencionado anteriormente, puede resultar conveniente, ya que proporciona una seguridad robusta sin requerir que los usuarios autenticados introduzcan una contraseña para acceder a la base de datos. Sin embargo, también impide las conexiones remotas, lo que puede complicar las cosas cuando aplicaciones externas necesitan interactuar con MySQL.
Como alternativa, puede omitir por completo la parte `WITH authentication_plugin` de la sintaxis para que el usuario se autentique con el plugin predeterminado de MySQL, llamado `caching_sha2_password`. La documentación de MySQL recomienda este plugin para usuarios que deseen iniciar sesión con contraseña debido a sus sólidas características de seguridad.
Para crear un usuario que se autentique con `caching_sha2_password`, ejecute el siguiente comando. Asegúrese de que Sammy como nombre de usuario y contraseña Elige una contraseña segura de tu elección:
mysql> CREAR USUARIO 'sammy'@'localhost' IDENTIFICADO POR 'contraseña';Nota: Existe un problema conocido en algunas versiones de PHP que provoca que `caching_sha2_password` falle. Si planea usar esta base de datos con una aplicación PHP (por ejemplo, phpMyAdmin), le conviene crear un usuario que se autentique con la extensión `mysql_native_password`, una extensión antigua pero aún segura.
mysql> CREAR USUARIO 'sammy'@'localhost' IDENTIFICADO CON mysql_native_password POR 'contraseña';Si no estás seguro, siempre puedes crear un usuario que se autentique con caching_sha2_plugin y luego cambiarlo con este comando:
mysql> ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';Después de crear el nuevo usuario, puede otorgarle los privilegios adecuados.
Concesión de permisos de usuario
La sintaxis general para otorgar privilegios de usuario es la siguiente:
mysql> GRANT PRIVILEGE ON database.table TO 'username'@'host';El valor PRIVILEGE en esta sintaxis de ejemplo especifica las acciones que el usuario puede realizar en la base de datos y la tabla especificadas. Puede otorgar varios privilegios a un usuario en una sola instrucción separándolos con comas. También puede otorgar privilegios globales a un usuario introduciendo un asterisco (*) en lugar del nombre de la base de datos y la tabla. En SQL, los asteriscos son caracteres especiales que se utilizan para representar “todo”"Se utilizan bases de datos o tablas.".
Para ilustrarlo, el siguiente comando otorga al usuario privilegios globales para crear, modificar y eliminar bases de datos, tablas y usuarios, así como la capacidad de insertar, actualizar y eliminar datos de cualquier tabla del servidor. También le permite consultar datos con SELECT, crear claves externas con la palabra clave REFERENCES y realizar operaciones FLUSH con el privilegio RELOAD. Sin embargo, solo debe otorgar a los usuarios los permisos que necesitan, por lo que puede ajustar sus privilegios de usuario según sea necesario.
Puedes encontrar la lista completa de privilegios disponibles en la documentación oficial de MySQL.
Ejecute esta instrucción GRANT, y Sammy Reemplaza con tu nombre de usuario de MySQL para otorgar estos privilegios a tu usuario:
mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;Tenga en cuenta que esta instrucción también incluye la opción WITH GRANT. Esto permite que su usuario de MySQL otorgue los permisos que tiene a otros usuarios del sistema.
Advertencia: Algunos usuarios pueden querer otorgar a su usuario de MySQL TODOS LOS PRIVILEGIOS, lo que les confiere amplios privilegios de superusuario similares a los de un usuario root, tales como:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;No se deben otorgar privilegios tan amplios a la ligera, ya que cualquier persona con acceso a este usuario de MySQL tendrá control total sobre todas las bases de datos del servidor.
Muchas guías recomiendan ejecutar el comando FLUSH PRIVILEGES inmediatamente después de una instrucción CREATE USER o GRANT para recargar las tablas de concesión y asegurar que se apliquen los nuevos privilegios:
mysql> FLUSH PRIVILEGES;Sin embargo, según la documentación oficial de MySQL, al modificar las tablas de privilegios indirectamente con una instrucción de administración de cuentas como GRANT, la base de datos carga dichas tablas en memoria inmediatamente, lo que significa que el comando FLUSH PRIVILEGES no es necesario en este caso. Por otro lado, su ejecución no tendrá ningún impacto negativo en el sistema.
Si necesita revocar una licencia, la estructura es prácticamente la misma que para otorgarla:
mysql> REVOKE tipo_de_permiso ON nombre_de_base_de_datos.nombre_de_tabla FROM 'usuario'@'host';Tenga en cuenta que al revocar permisos, la sintaxis requiere que utilice FROM en lugar de TO, que fue lo que utilizó al otorgar permisos.
Puedes comprobar los permisos actuales de un usuario ejecutando el comando SHOW GRANTS:
mysql> MOSTRAR CONCESIONES PARA 'username'@'host';Del mismo modo que se pueden eliminar bases de datos con DROP, también se puede usar DROP para eliminar un usuario:
mysql> DROP USER 'username'@'localhost';Después de crear el usuario de MySQL y otorgarle privilegios, puede salir del entorno de usuario de MySQL:
mysql> salirEn el futuro, para iniciar sesión como el nuevo usuario de MySQL, utilizará un comando como el siguiente:
$ mysql -u sammy -pLa opción -p hace que el cliente MySQL le solicite la contraseña de usuario de MySQL para la autenticación.
Resultado
Siguiendo este tutorial, aprendió a agregar nuevos usuarios y otorgarles diversos permisos en una base de datos MySQL. A partir de aquí, puede continuar explorando y experimentando con diferentes configuraciones de permisos para su usuario de MySQL, o bien, puede obtener más información sobre algunas de las configuraciones avanzadas de MySQL.









