Búsqueda de sitios web

Cómo crear un nuevo usuario y otorgar permisos en MySQL


Introducción

base de datos de código abierto más popular del mundo.

Esta guía describe cómo crear un nuevo usuario de MySQL y otorgarle los permisos necesarios para realizar una variedad de acciones.

requisitos previos

Para seguir esta guía, necesitará acceso a una base de datos MySQL. Esta guía asume que esta base de datos está instalada en un servidor privado virtual que ejecuta Ubuntu 20.04, aunque los principios que describe deberían ser aplicables independientemente de cómo acceda a su base de datos.

Si no tiene acceso a una base de datos MySQL y desea configurar una usted mismo, puede seguir una de nuestras guías sobre Cómo instalar MySQL. Nuevamente, independientemente del sistema operativo subyacente de su servidor, los métodos para crear un nuevo usuario de MySQL y otorgarle permisos generalmente serán los mismos.

Alternativamente, podría activar una base de datos MySQL administrada por un proveedor de la nube. Para obtener detalles sobre cómo activar una base de datos administrada de DigitalOcean, consulte la documentación de nuestro producto.

Tenga en cuenta que cualquier parte de los comandos de ejemplo que necesite cambiar o personalizar se resaltará así a lo largo de esta guía.

Crear un nuevo usuario

Tras la instalación, MySQL crea una cuenta de usuario raíz que puede usar para administrar su base de datos. Este usuario tiene privilegios completos sobre el servidor MySQL, lo que significa que tiene control total sobre cada base de datos, tabla, usuario, etc. Debido a esto, es mejor evitar usar esta cuenta fuera de las funciones administrativas. Este paso describe cómo usar el usuario raíz de MySQL para crear una nueva cuenta de usuario y otorgarle privilegios.

En los sistemas Ubuntu que ejecutan MySQL 5.7 (y versiones posteriores), el usuario raíz de MySQL está configurado para autenticarse mediante el complemento auth_socket de forma predeterminada en lugar de una contraseña. Este complemento requiere que el nombre del usuario del sistema operativo que invoca al cliente MySQL coincida con el nombre del usuario MySQL especificado en el comando. Esto significa que debe preceder el comando mysql con sudo para invocarlo con los privilegios del usuario raíz de Ubuntu para obtener acceso al usuario raíz de MySQL:

  1. sudo mysql

Nota: si su usuario raíz de MySQL está configurado para autenticarse con una contraseña, deberá usar un comando diferente para acceder al shell de MySQL. Lo siguiente ejecutará su cliente MySQL con privilegios de usuario regulares, y solo obtendrá privilegios de administrador dentro de la base de datos al autenticarse con la contraseña correcta:

  1. mysql -u root -p

Una vez que tenga acceso al indicador de MySQL, puede crear un nuevo usuario con una instrucción CREATE USER. Estos siguen esta sintaxis general:

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Después de CREATE USER, especifica un nombre de usuario. Esto es seguido inmediatamente por un signo @ y luego el nombre de host desde el cual se conectará este usuario. Si solo planea acceder a este usuario localmente desde su servidor Ubuntu, puede especificar localhost. No siempre es necesario envolver tanto el nombre de usuario como el host entre comillas simples, pero hacerlo puede ayudar a prevenir errores.

Tiene varias opciones cuando se trata de elegir el complemento de autenticación de su usuario. El complemento auth_socket mencionado anteriormente puede ser conveniente, ya que brinda una gran seguridad sin requerir que los usuarios válidos ingresen una contraseña para acceder a la base de datos. Pero también evita las conexiones remotas, lo que puede complicar las cosas cuando los programas externos necesitan interactuar con MySQL.

Como alternativa, puede omitir la parte WITH authentication_plugin de la sintaxis por completo para que el usuario se autentique con el complemento predeterminado de MySQL, caching_sha2_password. La documentación de MySQL recomienda este complemento para los usuarios que desean iniciar sesión con una contraseña debido a sus sólidas características de seguridad.

Ejecute el siguiente comando para crear un usuario que se autentique con caching_sha2_password. Asegúrese de cambiar sammy a su nombre de usuario preferido y password a una contraseña segura de su elección:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Nota: Hay un problema conocido con algunas versiones de PHP que provoca problemas con caching_sha2_password. Si planea usar esta base de datos con una aplicación PHP (por ejemplo, phpMyAdmin), es posible que desee crear un usuario que se autentique con el complemento mysql_native_password más antiguo, aunque todavía seguro:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Si no está seguro, siempre puede crear un usuario que se autentique con caching_sha2_plugin y luego ALTER más adelante con este comando:

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Después de crear su nuevo usuario, puede otorgarle los privilegios apropiados.

Concesión de permisos de usuario

La sintaxis general para otorgar privilegios de usuario es la siguiente:

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

El valor PRIVILEGE en esta sintaxis de ejemplo define qué acciones puede realizar el usuario en la base de datos y < código>tabla. Puede otorgar múltiples privilegios al mismo usuario en un solo comando separando cada uno con una coma. También puede otorgar privilegios de usuario globalmente ingresando asteriscos (*) en lugar de los nombres de la base de datos y la tabla. En SQL, los asteriscos son caracteres especiales que se utilizan para representar \todas las bases de datos o tablas.

Para ilustrar, el siguiente comando otorga a un usuario privilegios globales para CREATE, ALTER y DROP bases de datos, tablas y usuarios, así como también poder INSERTAR, ACTUALIZAR y ELIMINAR datos de cualquier tabla en el servidor. También otorga al usuario la capacidad de consultar datos con SELECT, crear claves externas con la palabra clave REFERENCES y realizar operaciones FLUSH con RECARGAR. Sin embargo, solo debe otorgar a los usuarios los permisos que necesitan, así que siéntase libre de ajustar sus propios privilegios de usuario según sea necesario.

Puede encontrar la lista completa de privilegios disponibles en la documentación oficial de MySQL.

Ejecute esta instrucción GRANT, reemplazando sammy con su propio nombre de usuario de MySQL, para otorgar estos privilegios a su usuario:

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Tenga en cuenta que esta declaración también incluye WITH GRANT OPTION. Esto le permitirá a su usuario de MySQL otorgar cualquier permiso que tenga a otros usuarios en el sistema.

Advertencia: Es posible que algunos usuarios deseen otorgar a su usuario de MySQL el privilegio TODOS LOS PRIVILEGIOS, que les proporcionará amplios privilegios de superusuario similares a los privilegios del usuario root, así:

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Estos amplios privilegios no deben otorgarse 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 sugieren ejecutar el comando FLUSH PRIVILEGES inmediatamente después de una instrucción CREATE USER o GRANT para volver a cargar las tablas de concesión y garantizar que los nuevos privilegios se ponen en vigor:

  1. FLUSH PRIVILEGES;

Sin embargo, de acuerdo con la documentación oficial de MySQL, cuando modifica las tablas de otorgamiento indirectamente con una declaración de administración de cuenta como GRANT, la base de datos recargará las tablas de otorgamiento inmediatamente en la memoria, lo que significa que FLUSH PRIVILEGES El comando no es necesario en nuestro caso. Por otro lado, ejecutarlo no tendrá ningún efecto negativo en el sistema.

Si necesita revocar un permiso, la estructura es casi idéntica a otorgarlo:

  1. REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

Tenga en cuenta que al revocar permisos, la sintaxis requiere que use FROM, en lugar de TO que usó al otorgar los permisos.

Puede revisar los permisos actuales de un usuario ejecutando el comando SHOW GRANTS:

  1. SHOW GRANTS FOR 'username'@'host';

Así como puede eliminar bases de datos con DROP, puede usar DROP para eliminar un usuario:

  1. DROP USER 'username'@'localhost';

Después de crear su usuario MySQL y otorgarle privilegios, puede salir del cliente MySQL:

  1. exit

En el futuro, para iniciar sesión como su nuevo usuario de MySQL, usaría un comando como el siguiente:

  1. mysql -u sammy -p

El indicador -p hará que el cliente de MySQL le solicite su contraseña de usuario de MySQL para autenticarse.

Conclusión

Al seguir este tutorial, aprendió cómo agregar nuevos usuarios y otorgarles una variedad de permisos en una base de datos MySQL. Desde aquí, puede continuar explorando y experimentando con diferentes configuraciones de permisos para su usuario de MySQL, o puede querer obtener más información sobre algunas configuraciones de MySQL de nivel superior.

Para obtener más información sobre los conceptos básicos de MySQL, puede consultar los siguientes tutoriales:

  • Cómo crear y administrar bases de datos en MySQL y MariaDB en un servidor en la nube
  • Cómo configurar la replicación en MySQL
  • Cómo configurar la replicación de grupos de MySQL en Ubuntu 20.04