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

Introducción

MySQL es un software de administración de bases de datos de código abierto que ayuda a los usuarios a almacenar, organizar y recuperar datos. Tiene diversas opciones para otorgar permisos matizados a usuarios específicos en las tablas y bases de datos. Este tutorial dará una breve descripción general de algunas de esas opciones.

¿Qué significan las secciones resaltadas?

En este tutorial, ¡cualquier línea que el usuario deba ingresar o personalizar estará resaltada! El resto será copiar y pegar en su mayoría.

Cómo crear un nuevo usuario

En la Parte 1 del Tutorial de MySQL, hicimos todas las ediciones en MySQL como usuario root con pleno acceso a todas las bases de datos. Sin embargo, en los casos en que se requieren más restricciones, existen formas de crear usuarios con permisos personalizados.

Comencemos creando un nuevo usuario en el shell de MySQL:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

 

Nota: Al añadir usuarios en el shell de MySQL en este tutorial, especificaremos el host del usuario como localhost, y no la dirección IP del servidor. localhost es un nombre de host que significa “este equipo”, y MySQL trata este nombre de host en particular de manera especial: cuando un usuario con ese host inicia sesión en MySQL, intentará conectarse al servidor local utilizando un archivo de socket de Unix. Por lo tanto, localhost se utiliza normalmente cuando planea conectarse implementando SSH a su servidor o cuando está ejecutando el cliente mysql local para conectarse al servidor MySQL local.

En este momento, newuser no tiene permisos para hacer nada con las bases de datos. De hecho, incluso si newuser intenta iniciar sesión (con la contraseña, password), no podrá acceder al shell de MySQL.

Por lo tanto, lo primero que se debe hacer es proporcionar al usuario acceso a la información que necesitará.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

 

Los asteriscos en este comando se refieren a la base de datos y la tabla (respectivamente) a los que pueden acceder. Este comando específico permite al usuario leer, editar, ejecutar y realizar todas las tareas en todas las bases de datos y tablas.

Tenga en cuenta que en este ejemplo estamos otorgando a newuser acceso de root completo a todo en nuestra base de datos. Si bien esto es útil para explicar algunos conceptos de MySQL, puede ser poco práctico para la mayoría de casos de uso y podría poner la seguridad de su base de datos en alto riesgo.

Una vez que haya finalizado los permisos que desea configurar para sus nuevos usuarios, asegúrese siempre de volver a cargar todos los privilegios.

FLUSH PRIVILEGES;

 

Sus cambios ahora estarán vigentes.

Cómo otorgar diferentes permisos de usuario

Aquí se incluye una breve lista de otros posibles permisos comunes que los usuarios pueden disfrutar.

  • ALL PRIVILEGES: Como vimos antes, esto le otorgaría a un usuario de MySQL acceso completo a una base de datos designada (o si no se selecciona ninguna base de datos, acceso global a todo el sistema).
  • CREATE: Permite crear nuevas tablas o bases de datos.
  • DROP: Permite eliminar tablas o bases de datos.
  • DELETE: Permite eliminar filas de las tablas.
  • INSERT: Permite insertar filas en las tablas.
  • SELECT: Les permite usar el comando SELECT para leer las bases de datos.
  • UPDATE: Permite actualizar las filas de las tablas.
  • GRANT OPTION: Permite otorgar o eliminar privilegios de otros usuarios.

Para proporcionar un permiso a un usuario específico, puede usar este marco:

GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';

 

Si desea darle a un usuario acceso a cualquier base de datos o a cualquier tabla, asegúrese de poner un asterisco (*) en el lugar del nombre de la base de datos o de la tabla.

Cada vez que actualice o cambie un permiso, asegúrese de usar el comando Flush Privileges.

Si necesita revocar un permiso, la estructura es casi la misma que para otorgar un permiso:

REVOKE type_of_permission ON database_name.table_name FROM 'username'@'localhost';

 

Tenga en cuenta que, cuando revoca permisos, la sintaxis requiere que utilice FROM en lugar de TO, como se utiliza para otorgar permisos.

Puede revisar los permisos actuales de un usuario ejecutando lo siguiente:

SHOW GRANTS FOR 'username'@'localhost';

 

Al igual que puede eliminar bases de datos con DROP, también puede usar DROP para eliminar un usuario por completo:

DROP USER 'username'@'localhost';

 

Para probar su nuevo usuario, cierre sesión escribiendo lo siguiente:

quit

 

y vuelva a iniciar sesión con este comando en el terminal:

mysql -u [username] -p

 

 

Conclusión

Después de completar este tutorial, debería tener una idea de cómo agregar nuevos usuarios y otorgarles diversos permisos en una base de datos de MySQL. Desde aquí, puede continuar explorando y experimentando con diferentes configuraciones de permisos para su base de datos, o posiblemente quiera aprender más sobre algunas configuraciones de MySQL de nivel superior.

Instalar servidor apache en Ubuntu

El servidor HTTP Apache es el más usado del mundo. Ofrece muchas características potentes, entre las que se incluyen módulos que se cargan de forma dinámica, una sólida compatibilidad con medios y amplia integración con otras herramientas de software populares.

En esta guía, explicaremos cómo instalar el servidor web Apache en su servidor de Ubuntu

Requisitos previos

Antes de comenzar a aplicar esta guía, debe tener un non-root user normal con privilegios sudo configurado en su servidor. Además, deberá habilitar un firewall básico para que bloquee los puertos que no sean esenciales. Para aprender a configurar una cuenta normal de usuario e instalar un firewall para su servidor, siga nuestra guía de Configuración inicial del servidor para Ubuntu

Cuando disponga de una cuenta, inicie sesión como non-root user para comenzar.

Paso 1: Instalar Apache

Apache está disponible en los repositorios de software predeterminados de Ubuntu, lo que permite instalarlo con las herramientas convencionales de administración de paquetes.

Comencemos actualizando el índice de paquetes locales para que reflejen los últimos cambios anteriores:

sudo apt update

A continuación, instale el paquete apache2:

sudo apt install apache2

Una vez confirmada la instalación, apt instalará Apache y todas las dependencias necesarias.

Paso 2: Ajustar el firewall

Antes de probar Apache, es necesario modificar los ajustes de firewall para permitir el acceso externo a los puertos web predeterminados. Suponiendo que siguió las instrucciones de los requisitos previos, debería tener un firewall UFW configurado para que restrinja el acceso a su servidor.

Durante la instalación, Apache se registra con UFW para proporcionar algunos perfiles de aplicación que pueden utilizarse para habilitar o deshabilitar el acceso a Apache a través del firewall.

Enumere los perfiles de aplicación ufw escribiendo lo siguiente:

sudo ufw app list

Obtendrá una lista de los perfiles de aplicación:

Output

Available applications:  Apache  Apache Full  Apache Secure  OpenSSH

Como lo indica el resultado, hay tres perfiles disponibles para Apache:

  • Apache: este perfil abre solo el puerto 80 (tráfico web normal no cifrado)
  • Apache Full: este perfil abre el puerto 80 (tráfico web normal no cifrado) y el puerto 443 (tráfico TLS/SSL cifrado)
  • Apache Secure: este perfil abre solo el puerto 443 (tráfico TLS/SSL cifrado)

Se recomienda habilitar el perfil más restrictivo, que de todos modos permitirá el tráfico que configuró. Debido a que en esta guía aún no configuramos SSL para nuestro servidor, solo deberemos permitir el tráfico en el puerto 80:

sudo ufw allow 'Apache'

Puede verificar el cambio escribiendo lo siguiente:

sudo ufw status

El resultado proporcionará una lista del tráfico de HTTP que se permite:

Output

Status: active To                         Action      From —                         ——      —- OpenSSH                    ALLOW       Anywhere                   Apache                     ALLOW       Anywhere                 OpenSSH (v6)               ALLOW       Anywhere (v6)             Apache (v6)                ALLOW       Anywhere (v6)

Como lo indica el resultado, el perfil se activó para permitir el acceso al servidor web Apache.

Paso 3: Comprobar su servidor web

Al final del proceso de instalación, Ubuntu 20.04 inicia Apache. El servidor web ya debería estar activo.

Realice una verificación con el sistema init systemd para saber si se encuentra en ejecución el servicio escribiendo lo siguiente:

sudo systemctl status apache2

Output

● apache2.service – The Apache HTTP Server     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)     Active: active (running) since Thu 2020-04-23 22:36:30 UTC; 20h ago       Docs: https://httpd.apache.org/docs/2.4/   Main PID: 29435 (apache2)      Tasks: 55 (limit: 1137)     Memory: 8.0M     CGroup: /system.slice/apache2.service             ├─29435 /usr/sbin/apache2 -k start             ├─29437 /usr/sbin/apache2 -k start             └─29438 /usr/sbin/apache2 -k start

Como lo confirma este resultado, el servicio se inició correctamente. Sin embargo, la mejor forma de comprobarlo es solicitar una página de Apache.

Puede acceder a la página de destino predeterminada de Apache para confirmar que el software funcione correctamente mediante su dirección IP: Si no conoce la dirección IP de su servidor, puede obtenerla de varias formas desde la línea de comandos.

Intente escribir esto en la línea de comandos de su servidor:

hostname -I

Obtendrá algunas direcciones separadas por espacios. Puede probar cada uno en el navegador web para determinar si funcionan.

Otra opción es utilizar la herramienta Icanhazip, que debería proporcionarle su dirección IP pública como aparece en otra ubicación en Internet:

curl -4 icanhazip.com

Cuando tenga la dirección IP de su servidor, introdúzcala en la barra de direcciones de su navegador:

http://your_server_ip

Debería ver la página web predeterminada de Apache en Ubuntu:

Esta página indica que Apache funciona correctamente. También incluye información básica sobre archivos y ubicaciones de directorios importantes de Apache.

Paso 4: Administrar el proceso de Apache

Ahora que el servidor web está listo y en funcionamiento, repasemos algunos comandos de administración básicos con systemctl.

Para detener su servidor web, escriba lo siguiente:

sudo systemctl stop apache2

Para iniciar el servidor web cuando no esté activo, escriba lo siguiente:

sudo systemctl start apache2

Para detener y luego iniciar el servicio de nuevo, escriba lo siguiente:

sudo systemctl restart apache2

Si solo realiza cambios de configuración, Apache a menudo puede recargarse sin cerrar conexiones. Para hacerlo, utilice este comando:

sudo systemctl reload apache2

Por defecto, Apache está configurado para iniciarse automáticamente cuando el servidor lo hace. Si no es lo que quiere, deshabilite este comportamiento escribiendo lo siguiente:

sudo systemctl disable apache2

Para volver a habilitar el servicio de modo que se cargue en el inicio, escriba lo siguiente:

sudo systemctl enable apache2

Ahora, Apache debería iniciarse de forma automática cuando el servidor lo haga de nuevo.

Paso 5: Configurar hosts virtuales (recomendado)

Al emplear el servidor web Apache, puede utilizar hosts virtuales (similares a bloques de servidor de Nginx) para encapsular detalles de configuración y alojar más de un dominio desde un único servidor. Configuraremos un dominio llamado your_domain, pero debería cambiarlo por su propio nombre de dominio. Si va a configurar un nombre de dominio con SitioZ, consulte nuestra Documentación de red.

Ubuntu 20.04 tiene habilitado un bloque de servidor por defecto, que está configurado para proporcionar documentos del directorio /var/www/html. Si bien esto funciona bien para un solo sitio, puede ser difícil de manejar si aloja varios. En vez de modificar /var/www/html, vamos a crear una estructura de directorios dentro de /var/www para un sitio your_domain y dejaremos /var/www/html como directorio predeterminado que se suministrará si una solicitud de cliente no coincide con otros sitios.

Cree el directorio para your_domain de la siguiente manera:

sudo mkdir /var/www/your_domain

A continuación, asigne la propiedad del directorio con la variable de entorno $USER:

sudo chown -R $USER:$USER /var/www/your_domain

Los permisos de los roots web deberían ser correctos si no modificó el valor umask, que establece permisos de archivos predeterminados. Para asegurarse de que sus permisos sean correctos y permitir al propietario leer, escribir y ejecutar los archivos, y a la vez conceder solo permisos de lectura y ejecución a los grupos y terceros, puede ingresar el siguiente comando:

sudo chmod -R 755 /var/www/your_domain

A continuación, cree una página de ejemplo index.html utilizando nano o su editor favorito:

sudo nano /var/www/your_domain/index.html

Dentro de ella, agregue el siguiente ejemplo de HTML:

/var/www/your_domain/index.html

Guarde y cierre el archivo cuando termine.

Para que Apache proporcione este contenido, es necesario crear un archivo de host virtual con las directivas correctas. En lugar de modificar el archivo de configuración predeterminado situado en /etc/apache2/sites-available/000-default.conf directamente, vamos a crear uno nuevo en /etc/apache2/sites-available/your_domain.conf:

sudo nano /etc/apache2/sites-available/your_domain.conf

Péguelo en el siguiente bloque de configuración, similar al predeterminado, pero actualizado para nuestro nuevo directorio y nombre de dominio:

/etc/apache2/sites-available/your_domain.conf ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined VirtualHost>

Tenga en cuenta que cambiamos DocumentRoot por nuestro nuevo directorio y ServerAdmin por un correo electrónico al que pueda acceder el administrador del sitio your_domain. También agregamos dos directivas: ServerName, que establece el dominio de base que debería coincidir para esta definición de host virtual, y ServerAlias, que define más nombres que deberían coincidir como si fuesen el nombre de base.

Guarde y cierre el archivo cuando termine.

Habilitaremos el archivo con la herramienta a2ensite:

sudo a2ensite your_domain.conf

Deshabilite el sitio predeterminado definido en 000-default.conf:

sudo a2dissite 000-default.conf

A continuación, realizaremos una prueba para ver que no haya errores de configuración:

sudo apache2ctl configtest

Debería obtener el siguiente resultado:

Output

Syntax OK

Reinicie Apache para implementar sus cambios:

sudo systemctl restart apache2

Con esto, Apache debería ser el servidor de su nombre de dominio. Puede probarlo visitando http://your_domain, donde debería ver algo como esto:

Paso 6: Familiarizarse con archivos y direcciones importantes de Apache

Ahora que sabe administrar el propio servicio de Apache, debe tomarse unos minutos para familiarizarse con algunos directorios y archivos importantes.

Contenido

  • /var/www/html: el contenido web real, que por defecto solo consta de la página predeterminada de Apache que vio antes, se proporciona desde el directorio /var/www/html. Esto se puede cambiar modificando los archivos de configuración de Apache.

Configuración del servidor

  • /etc/apache2: el directorio de configuración de Apache. En él se encuentran todos los archivos de configuración de Apache.
  • /etc/apache2/apache2.conf: el archivo principal de configuración de Apache. Esto se puede modificar para realizar cambios en la configuración general de Apache. Este archivo administra la carga de muchos de los demás archivos del directorio de configuración.
  • /etc/apache2/ports.conf: este archivo especifica los puertos en los que Apache escuchará. Por defecto, Apache escucha en el puerto 80. De forma adicional, lo hace en el 443 cuando se habilita un módulo que proporciona capacidades SSL.
  • /etc/apache2/sites-available/: el directorio en el que se pueden almacenar hosts por sitio. Apache no utilizará los archivos de configuración de este directorio a menos que estén vinculados al directorio sites-enabled. Normalmente, toda la configuración de bloques de servidor se realiza en este directorio y luego se habilita al vincularse al otro directorio con el comando a2ensite.
  • /etc/apache2/sites-enabled/: el directorio donde se almacenan hosts virtuales por sitio habilitados. Normalmente, se crean vinculando los archivos de configuración del directorio sites-available con a2ensite. Apache lee los archivos de configuración y los enlaces de este directorio cuando se inicia o se vuelve a cargar para compilar una configuración completa.
  • /etc/apache2/conf-available/ y /etc/apache2/conf-enabled/: estos directorios tienen la misma relación que los directorios sites-available y sites-enabled, pero se utilizan para almacenar fragmentos de configuración que no pertenecen a un host virtual. Los archivos del directorio conf-available pueden habilitarse con el comando a2enconf y deshabilitarse con el comando a2disconf.
  • /etc/apache2/mods-available/ y /etc/apache2/mods-enabled/: estos directorios contienen los módulos disponibles y habilitados, respectivamente. Los archivos que terminan en .load contienen fragmentos para cargar módulos específicos, mientras que los archivos que terminan en .conf contienen la configuración para esos módulos. Los módulos pueden habilitarse y deshabilitarse con los comandos a2enmod y a2dismod.

Registros del servidor

  • /var/log/apache2/access.log: por defecto, cada solicitud enviada a su servidor web se asienta en este archivo de registro a menos que Apache esté configurado para no hacerlo.
  • /var/log/apache2/error.log: por defecto, todos los errores se registran en este archivo. La directiva LogLevel de la configuración de Apache especifica el nivel de detalle de los registros de error.

Conclusión

Ahora que ha instaló su servidor web, dispone de varias opciones respecto del tipo de contenido que puede ofrecer y de las tecnologías que puede utilizar para crear una experiencia más completa.