Tag: MYSQL

Comments

April 27, 2025

Cómo instalar MySQL en Ubuntu 22.04

Introducción

MySQL es un sistema de gestión de bases de datos de código abierto, comúnmente instalado como parte de la popular pila LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Implementa el modelo relacional y utiliza el Lenguaje de Consulta Estructurado (más conocido como SQL) para gestionar sus datos.

Este tutorial explicará cómo instalar MySQL versión 8.0 en un servidor Ubuntu 22.04. Al completarlo, dispondrá de una base de datos relacional funcional que podrá usar para crear su próximo sitio web o aplicación.

Implemente una base de datos MySQL con un solo clic usando las bases de datos administradas de IsnHosting . Deje que DigitalOcean se encargue del escalado, el mantenimiento y las actualizaciones de su base de datos.

Prerrequisitos

Para seguir este tutorial, necesitarás:

Paso 1: Instalación de MySQL

En Ubuntu 22.04, puedes instalar MySQL usando el repositorio de paquetes APT. Al momento de escribir este artículo, la versión de MySQL disponible en el repositorio predeterminado de Ubuntu es la 8.0.28.

Para instalarlo, actualice el índice de paquetes en su servidor si no lo ha hecho recientemente:

sudo apt update

Luego instala el mysql-serverpaquete:

sudo apt install mysql-server

Asegúrese de que el servidor se esté ejecutando mediante el systemctl startcomando:

sudo systemctl start mysql.service

Estos comandos instalarán e iniciarán MySQL, pero no le solicitarán que establezca una contraseña ni realice ningún otro cambio de configuración. Dado que esto hace que su instalación de MySQL sea insegura, abordaremos este tema a continuación.

Paso 2: Configuración de MySQL

Para nuevas instalaciones de MySQL, deberá ejecutar el script de seguridad incluido en el sistema de gestión de bases de datos. Este script modifica algunas de las opciones predeterminadas menos seguras, como impedir el inicio de sesión remoto como root y eliminar usuarios de muestra.

Advertencia : A partir de julio de 2022, se producirá un error al ejecutar el mysql_secure_installationscript sin ninguna configuración adicional. Esto se debe a que este script intentará establecer una contraseña para la cuenta raíz de MySQL de la instalación, pero, por defecto en las instalaciones de Ubuntu, esta cuenta no está configurada para conectarse con contraseña.

Antes de julio de 2022, este script fallaba silenciosamente tras intentar establecer la contraseña de la cuenta raíz y continuar con el resto de las indicaciones. Sin embargo, al momento de escribir este artículo, el script devolverá el siguiente error después de ingresar y confirmar una contraseña:

Output ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

New password:

Esto llevará al script a un bucle recursivo del que sólo podrás salir cerrando la ventana de tu terminal.

Dado que el mysql_secure_installationscript realiza otras acciones útiles para mantener la seguridad de su instalación de MySQL, se recomienda ejecutarlo antes de empezar a usar MySQL para administrar sus datos. Sin embargo, para evitar este bucle recursivo, primero deberá ajustar la autenticación de su usuario root de MySQL.

Primero, abra el indicador de MySQL:

sudo mysql

A continuación, ejecute el siguiente ALTER USERcomando para cambiar el método de autenticación del usuario root a uno que utilice contraseña. El siguiente ejemplo cambia el método de autenticación a mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Después de realizar este cambio, salga del indicador de MySQL:

exit

Después de esto, puedes ejecutar el mysql_secure_installationscript sin problemas.

Ejecute el script de seguridad con sudo:

sudo mysql_secure_installation

Esto le guiará a través de una serie de indicaciones donde podrá realizar cambios en las opciones de seguridad de su instalación de MySQL. La primera le preguntará si desea configurar el complemento Validar contraseña, que permite comprobar la seguridad de las contraseñas de los nuevos usuarios de MySQL antes de considerarlas válidas.

Si elige configurar el complemento Validar contraseña, cualquier usuario de MySQL que cree que se autentique con una contraseña deberá tener una contraseña que cumpla con la política que seleccione:

OutputSecuring the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
 2

Independientemente de si decide configurar el complemento Validar contraseña, el siguiente paso será establecer una contraseña para el usuario root de MySQL . Ingrese y confirme una contraseña segura de su elección:

OutputPlease set the password for root here.


New password:

Re-enter new password:

Tenga en cuenta que aunque haya establecido una contraseña para el usuario root de MySQL, este usuario no está configurado actualmente para autenticarse con una contraseña al conectarse al shell de MySQL.

Si usaste el complemento Validar contraseña, recibirás información sobre la seguridad de tu nueva contraseña. El script te preguntará si deseas continuar con la contraseña que acabas de ingresar o si deseas ingresar una nueva. Si estás satisfecho con la seguridad de la contraseña que acabas de ingresar, presiona Enter Ypara continuar con el script:

OutputEstimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

Desde allí, puede presionar Yy luego ENTERaceptar los valores predeterminados para todas las preguntas subsiguientes. Esto eliminará algunos usuarios anónimos y la base de datos de prueba, deshabilitará los inicios de sesión remotos como root y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios realizados.

Nota: Una vez completado el script de seguridad, puede volver a abrir MySQL y cambiar el método de autenticación del usuario root al predeterminado. auth_socketPara autenticarse como usuario root de MySQL con una contraseña, ejecute este comando:

mysql -u root -p

Luego vuelva a utilizar el método de autenticación predeterminado usando este comando:

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;

Esto significará que podrás volver a conectarte a MySQL como tu usuario root usando el sudo mysqlcomando.

Una vez completado el script, su instalación de MySQL estará protegida. Ahora puede crear un usuario de base de datos dedicado con el cliente MySQL.

Paso 3: Creación de un usuario MySQL dedicado y concesión de privilegios

Tras la instalación, MySQL crea una cuenta de usuario root 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. Por ello, se recomienda evitar usar esta cuenta fuera de las funciones administrativas. Este paso describe 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 mediante el auth_socketcomplemento por defecto, en lugar de una contraseña. Este complemento requiere que el nombre del usuario del sistema operativo que invoca el cliente MySQL coincida con el nombre del usuario MySQL especificado en el comando, por lo que debe invocarlo mysqlcon sudoprivilegios para acceder al usuario root de MySQL:

sudo mysql

Nota: Si instaló MySQL con otro tutorial y habilitó la autenticación con contraseña para root , deberá usar un comando diferente para acceder al shell de MySQL. El siguiente comando ejecutará su cliente MySQL con privilegios de usuario normales, y solo obtendrá privilegios de administrador en la base de datos al autenticarse:

mysql -u root -p

Una vez que tenga acceso al prompt de MySQL, puede crear un nuevo usuario con una CREATE USERinstrucción. Estas instrucciones siguen la siguiente sintaxis general:

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

Después de CREATE USER, se especifica un nombre de usuario. A esto le sigue inmediatamente un @signo y el nombre de host desde el que se conectará este usuario. Si solo planea acceder a este usuario localmente desde su servidor Ubuntu, puede especificar localhost. No siempre es necesario escribir el nombre de usuario y el host entre comillas simples, pero esto puede ayudar a prevenir errores.

Tiene varias opciones para elegir el plugin de autenticación de usuario. El auth_socketplugin mencionado anteriormente puede ser práctico, ya que proporciona una seguridad sólida sin requerir que los usuarios válidos introduzcan una contraseña para acceder a la base de datos. Sin embargo, también impide las conexiones remotas, lo que puede complicar la interacción de programas externos con MySQL.

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

Ejecute el siguiente comando para crear un usuario que se autentique con [ nombre de usuario caching_sha2_password]. Asegúrese de usar sammysu nombre de usuario preferido y passworduna contraseña segura de su elección:

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

Nota : Existe un problema conocido con algunas versiones de PHP que causa problemas con caching_sha2_password. Si planea usar esta base de datos con una aplicación PHP (por ejemplo, phpMyAdmin), le recomendamos crear un usuario que se autentique con el complemento anterior, aunque aún seguro mysql_native_password:

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_pluginy luego ALTERmás tarde con este comando:

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

Tras crear el nuevo usuario, puede otorgarle los privilegios correspondientes. La sintaxis general para otorgar privilegios de usuario es la siguiente:

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

El valor en esta sintaxis de ejemplo define las acciones que el usuario puede realizar en el `and` especificado . Puede otorgar varios privilegios al mismo usuario en un solo comando separándolos con una coma. También puede otorgar privilegios globales a un usuario introduciendo asteriscos ( ) PRIVILEGEen lugar de los nombres de las bases de datos y las tablas. En SQL, los asteriscos son caracteres especiales que se utilizan para representar “todas” las bases de datos o tablas.databasetable*

A modo de ejemplo, el siguiente comando otorga a un usuario privilegios globales sobre CREATE, ALTER, y DROPbases de datos, tablas y usuarios, así como la capacidad de acceder a INSERT, UPDATEy DELETEdatos de cualquier tabla del servidor. También le otorga la capacidad de consultar datos con SELECT, crear claves foráneas con la REFERENCESpalabra clave y realizar FLUSHoperaciones con el RELOADprivilegio . Sin embargo, solo debe otorgar a los usuarios los permisos que necesiten, así que puede ajustar los privilegios de sus usuarios según sea necesario.

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

Ejecute esta GRANTdeclaración, reemplazándola sammycon el nombre de su propio usuario MySQL, para otorgarle estos privilegios a su usuario:

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX, 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 permitirá que su usuario de MySQL otorgue los permisos que tenga a otros usuarios del sistema.

Advertencia : algunos usuarios pueden querer otorgarle a su usuario MySQL el ALL PRIVILEGESprivilegio que les proporcionará amplios privilegios de superusuario similares a los privilegios del usuario root , de la siguiente manera:

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

No se deben conceder privilegios tan amplios , ya que cualquiera con acceso a este usuario MySQL tendrá control total sobre todas las bases de datos del servidor.

A continuación, se recomienda ejecutar el FLUSH PRIVILEGEScomando. Esto liberará la memoria almacenada en caché por el servidor como resultado de las CREATE USERinstrucciones anteriores GRANT:

FLUSH PRIVILEGES;

Luego puedes salir del cliente MySQL:

exit

En el futuro, para iniciar sesión como su nuevo usuario MySQL, deberá utilizar un comando como el siguiente:

mysql -u sammy -p

La -pbandera hará que el cliente MySQL le solicite la contraseña de su usuario MySQL para poder autenticarse.

Por último, probemos la instalación de MySQL.

Paso 4: Prueba de MySQL

Independientemente de cómo lo hayas instalado, MySQL debería haberse iniciado automáticamente. Para comprobarlo, comprueba su estado.

systemctl status mysql.service

La salida será similar a la siguiente:

Output● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-04-11 16:04:39 UTC; 2h 36min ago
    Process: 2593 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 2601 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1119)
     Memory: 354.3M
        CPU: 19.944s
     CGroup: /system.slice/mysql.service
             └─2601 /usr/sbin/mysqld

Si MySQL no se está ejecutando, puedes iniciarlo con sudo systemctl start mysql.

Para una comprobación adicional, puede intentar conectarse a la base de datos mediante la mysqladminherramienta, que es un cliente que permite ejecutar comandos administrativos. Por ejemplo, este comando indica que debe conectarse con el usuario MySQL llamado sammy ( ), solicitar una contraseña ( ) y devolver la versión. Asegúrese de cambiar el nombre de su usuario MySQL dedicado e introducir su contraseña cuando se le solicite:-u sammy-psammy

sudo mysqladmin -p -u sammy version

A continuación se muestra un ejemplo de la salida:

Outputmysqladmin  Ver 8.0.28-0ubuntu4 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          8.0.28-0ubuntu4
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 2 hours 31 min 57 sec

Threads: 2  Questions: 25  Slow queries: 0  Opens: 160  Flush tables: 3  Open tables: 79  Queries per second avg: 0.000

Esto significa que MySQL está en funcionamiento.

Conclusión

Ya tiene una configuración básica de MySQL instalada en su servidor. Aquí tiene algunos ejemplos de los pasos a seguir:

  • Configurar una pila LAMP o una pila LEMP
  • Practique la ejecución de consultas con SQL
  • Administre su instalación de MySQL con phpMyAdmin

Stephen Dove
Comments

March 17, 2025

Cómo instalar y proteger phpMyAdmin en Ubuntu

Introducción

Si bien muchos usuarios necesitan la funcionalidad de un sistema de administración de bases de datos como MySQL, es posible que no se sientan cómodos interactuando con el sistema únicamente desde el indicador de MySQL.

phpMyAdmin se creó para que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, explicaremos cómo instalar y proteger phpMyAdmin para que pueda usarlo de forma segura para administrar sus bases de datos en un sistema Ubuntu.

Cómo instalar y proteger phpMyAdmin en Ubuntu

  1. Instalación de phpMyAdmin
  2. Ajuste de la autenticación y los privilegios del usuario
  3. Cómo proteger su instancia de phpMyAdmin

Prerrequisitos

Para completar esta guía, necesitarás:

  • Un servidor Ubuntu. Este servidor debe tener un usuario no root con privilegios administrativos y un firewall configurado con [nombre del servidor] ufw. Para configurarlo, siga nuestra guía de configuración inicial de servidores para Ubuntu .
  • Una pila LAMP (Linux, Apache, MySQL y PHP) instalada en su servidor Ubuntu. Si aún no lo ha hecho, puede seguir esta guía sobre cómo instalar una pila LAMP en Ubuntu .

Además, hay consideraciones de seguridad importantes al utilizar software como phpMyAdmin, ya que:

  • Se comunica directamente con su instalación de MySQL
  • Maneja la autenticación usando credenciales MySQL
  • Ejecuta y devuelve resultados para consultas SQL arbitrarias

Por estos motivos, y debido a que es una aplicación PHP ampliamente utilizada que frecuentemente es blanco de ataques, nunca debe ejecutar phpMyAdmin en sistemas remotos a través de una conexión HTTP simple.

Si no tiene un dominio configurado con un certificado SSL/TLS, puede seguir esta guía sobre cómo proteger Apache con Let’s Encrypt en Ubuntu . Para ello, deberá registrar un nombre de dominio , crear registros DNS para su servidor y configurar un host virtual Apache .

Paso 1 — Instalación de phpMyAdmin

Puede utilizar APT para instalar phpMyAdmin desde los repositorios predeterminados de Ubuntu.

Como usuario sudo no root, actualice el índice de paquetes de su servidor si no lo ha hecho recientemente:

sudo apt update

A continuación, puede instalar el phpmyadminpaquete. Además, la documentación oficial recomienda instalar algunas extensiones PHP en su servidor para habilitar ciertas funcionalidades y mejorar el rendimiento.

Si siguió el tutorial de la pila LAMP ( requisitos) , varios de estos módulos se habrán instalado junto con el phppaquete. Sin embargo, se recomienda instalar también estos paquetes:

  • php-mbstring:Un módulo para gestionar cadenas que no sean ASCII y convertir cadenas a diferentes codificaciones
  • php-zip:Esta extensión admite la carga de .ziparchivos a phpMyAdmin
  • php-gd:Habilita la compatibilidad con la biblioteca de gráficos GD
  • php-json:Proporciona a PHP soporte para la serialización JSON
  • php-curl: Permite que PHP interactúe con diferentes tipos de servidores utilizando diferentes protocolos

Ejecute el siguiente comando para instalar estos paquetes en su sistema. Tenga en cuenta que el proceso de instalación requiere que realice algunas acciones para configurar phpMyAdmin correctamente. A continuación, explicaremos estas opciones:

sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Estas son las opciones que debes elegir cuando se te solicite para configurar tu instalación correctamente:

  • Para la selección del servidor, elijaapache2

Advertencia: Cuando aparece el mensaje, “apache2” aparece resaltado, pero no seleccionado. Si no pulsa SPACEpara seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación. Pulse SPACE, TABy luego ENTERpara seleccionar Apache.

  • Seleccione Yescuando se le pregunte si desea utilizar dbconfig-commonpara configurar la base de datos
  • Luego se le pedirá que elija y confirme una contraseña de aplicación MySQL para phpMyAdmin.

Nota : Si instaló MySQL siguiendo el paso 2 del tutorial de la pila LAMP , es posible que haya decidido habilitar el complemento Validar contraseña. Al momento de escribir este artículo, habilitar este componente generará un error al intentar establecer una contraseña para el usuario phpmyadmin :

Error de validación de contraseña de phpMyAdmin

Para solucionar esto, seleccione la opción de cancelar para detener el proceso de instalación. A continuación, abra el símbolo del sistema de MySQL:

sudo mysql

O bien, si habilitó la autenticación de contraseña para el usuario root de MySQL, ejecute este comando y luego ingrese su contraseña cuando se le solicite:

mysql -u root -p

Desde el símbolo del sistema, ejecute el siguiente comando para deshabilitar el componente Validar contraseña. Tenga en cuenta que esto no lo desinstalará, sino que simplemente impedirá que se cargue en su servidor MySQL:

UNINSTALL COMPONENT "file://component_validate_password";

A continuación, puedes cerrar el cliente MySQL:

exit

Luego intenta instalar el phpmyadminpaquete nuevamente y funcionará como se espera:

sudo apt install phpmyadmin

Una vez instalado phpMyAdmin, puede abrir el indicador de MySQL nuevamente con sudo mysqlo mysql -u root -py luego ejecutar el siguiente comando para volver a habilitar el componente Validar contraseña:

INSTALL COMPONENT "file://component_validate_password";

El proceso de instalación agrega el archivo de configuración de Apache de phpMyAdmin al /etc/apache2/conf-enabled/directorio, donde se lee automáticamente. Para finalizar la configuración de Apache y PHP para que funcionen con phpMyAdmin, la única tarea pendiente en esta sección del tutorial es habilitar explícitamente la mbstringextensión de PHP, lo cual puede hacer escribiendo:

sudo phpenmod mbstring

Luego reinicie Apache para que sus cambios sean reconocidos:

sudo systemctl restart apache2

phpMyAdmin ya está instalado y configurado para funcionar con Apache. Sin embargo, antes de iniciar sesión y empezar a interactuar con sus bases de datos MySQL, deberá asegurarse de que sus usuarios MySQL tengan los privilegios necesarios para interactuar con el programa.

Paso 2: Ajuste de la autenticación y los privilegios del usuario

Al instalar phpMyAdmin en su servidor, se crea automáticamente un usuario de base de datos llamado phpmyadmin , que realiza ciertas tareas básicas del programa. En lugar de iniciar sesión con este usuario y la contraseña administrativa que configuró durante la instalación, se recomienda iniciar sesión como usuario root de MySQL o como un usuario dedicado a administrar bases de datos a través de la interfaz de phpMyAdmin.

Configuración del acceso con contraseña para la cuenta raíz de MySQL

En sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se autentica mediante el auth_socketcomplemento por defecto, en lugar de una contraseña. Esto ofrece mayor seguridad y usabilidad en muchos casos, pero también puede complicar las cosas cuando se necesita permitir que un programa externo, como phpMyAdmin, acceda al usuario.

Para iniciar sesión en phpMyAdmin como usuario root de MySQL, deberá cambiar su método de autenticación auth_socketa uno con contraseña, si aún no lo ha hecho. Para ello, abra el prompt de MySQL desde su terminal:

sudo mysql

A continuación, verifique qué método de autenticación utiliza cada una de sus cuentas de usuario de MySQL con el siguiente comando:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Este ejemplo de salida indica que el usuario root se autentica mediante el auth_socketcomplemento. Para configurar la cuenta root para que se autentique con una contraseña, ejecute el siguiente ALTER USERcomando. Asegúrese de usar passworduna contraseña segura de su elección:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

NotaALTER USER : La declaración anterior establece que el usuario root de MySQL se autentique con el caching_sha2_passwordcomplemento. Según la documentación oficial de MySQL , caching_sha2_passwordes el complemento de autenticación preferido de MySQL, ya que proporciona un cifrado de contraseñas más seguro que el anterior, pero aún ampliamente utilizado, mysql_native_password.

Sin embargo, algunas versiones de PHP no funcionan correctamente con [ nombre de usuario caching_sha2_password]. PHP ha informado que este problema se solucionó a partir de PHP 7.4 , pero si encuentra un error al intentar iniciar sesión en phpMyAdmin más adelante, le recomendamos configurar root para que se autentique con mysql_native_password[nombre de usuario].

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Luego, verifique nuevamente los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que root ya no se autentica usando el auth_socketcomplemento:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Este resultado muestra que el usuario root se autenticará con una contraseña. Ahora puede iniciar sesión en la interfaz de phpMyAdmin como usuario root con la contraseña que haya configurado aquí.

Configuración del acceso con contraseña para un usuario dedicado de MySQL

Como alternativa, algunos usuarios podrían encontrar más conveniente conectarse a phpMyAdmin con un usuario dedicado. Para ello, abra de nuevo la consola MySQL:

sudo mysql

Si tiene habilitada la autenticación de contraseña para su usuario root , como se describe en la sección anterior, deberá ejecutar el siguiente comando e ingresar su contraseña cuando se le solicite para poder conectarse:

mysql -u root -p

Desde allí, crea un nuevo usuario y asígnale una contraseña segura:

CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Nota : Nuevamente, dependiendo de qué versión de PHP tenga instalada, es posible que desee configurar su nuevo usuario para que se autentique con mysql_native_passworden lugar de caching_sha2_password:

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

Luego, otorgue al nuevo usuario los privilegios correspondientes. Por ejemplo, podría otorgarle privilegios para todas las tablas de la base de datos, así como la posibilidad de agregar, modificar y eliminar privilegios de usuario, con este comando:

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

A continuación, salga del shell MySQL:

exit

Ahora puede acceder a la interfaz web visitando el nombre de dominio o la dirección IP pública de su servidor seguido de /phpmyadmin:

https://your_domain_or_IP/phpmyadmin
Pantalla de inicio de sesión de phpMyAdmin

Inicie sesión en la interfaz, ya sea como root o con el nuevo nombre de usuario y contraseña que acaba de configurar.

Cuando inicie sesión, será llevado a la interfaz de usuario de phpMyAdmin:

Interfaz de usuario de phpMyAdmin

Ahora que puede conectarse e interactuar con phpMyAdmin, todo lo que queda por hacer es reforzar la seguridad de su sistema para protegerlo de los atacantes.

Paso 3: Protección de su instancia phpMyAdmin

Debido a su ubicuidad, phpMyAdmin es un objetivo común para los atacantes, por lo que se recomienda extremar las precauciones para evitar el acceso no autorizado. Una forma de lograrlo es colocar una puerta de enlace frente a toda la aplicación mediante las funcionalidades integradas de .htaccessautenticación y autorización de Apache.

Para ello, primero debe habilitar el uso de .htaccessanulaciones de archivos editando el archivo de configuración de Apache de su instalación de phpMyAdmin.

Utilice su editor de texto preferido para editar el phpmyadmin.confarchivo ubicado en el directorio de configuración de Apache. Aquí usaremos nano:

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Agregue una AllowOverride Alldirectiva dentro de la <Directory /usr/share/phpmyadmin>sección del archivo de configuración, como esta: /etc/apache2/conf-available/phpmyadmin.conf

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

Una vez agregada esta línea, guarde y cierre el archivo. Si solía nanoeditarlo, hágalo presionando CTRL + X, Yy luego ENTER.

Para implementar los cambios realizados, reinicie Apache:

sudo systemctl restart apache2

Ahora que ha habilitado el uso de .htaccessarchivos para su aplicación, necesita crear uno para implementar cierta seguridad.

Para que esto funcione correctamente, el archivo debe crearse en el directorio de la aplicación. Puede crear el archivo necesario y abrirlo en su editor de texto con privilegios de root escribiendo:

sudo nano /usr/share/phpmyadmin/.htaccess

Dentro de este archivo, ingrese la siguiente información: /usr/share/phpmyadmin/.htaccess

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Esto es lo que significa cada una de estas líneas:

  • AuthType BasicEsta línea especifica el tipo de autenticación que se está implementando. Este tipo implementará la autenticación por contraseña mediante un archivo de contraseñas.
  • AuthName: Esto configura el mensaje del cuadro de diálogo de autenticación. Debe ser genérico para que usuarios no autorizados no obtengan información sobre lo que se está protegiendo.
  • AuthUserFile: Esto establece la ubicación del archivo de contraseñas que se usará para la autenticación. Debe estar fuera de los directorios que se sirven. Lo crearemos en breve.
  • Require valid-userEsto especifica que solo los usuarios autenticados deben tener acceso a este recurso. Esto es lo que impide el acceso de usuarios no autorizados.

Cuando haya terminado, guarde y cierre el archivo.

La ubicación que seleccionó para su archivo de contraseñas era [nombre del archivo] /etc/phpmyadmin/.htpasswd. Ahora puede crear este archivo y asignarle un usuario inicial con la htpasswdutilidad:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

Se le pedirá que seleccione y confirme una contraseña para el usuario que está creando. Después, se creará el archivo con la contraseña cifrada que ingresó.

Si deseas ingresar un usuario adicional, debes hacerlo sin la -cbandera, de la siguiente manera:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Luego reinicie Apache para que .htaccessla autenticación surta efecto:

sudo systemctl restart apache2

Ahora, cuando acceda a su subdirectorio phpMyAdmin, se le solicitará el nombre de cuenta y la contraseña adicionales que acaba de configurar:

https://domain_name_or_IP/phpmyadmin
Contraseña de Apache en phpMyAdmin

Tras introducir la autenticación de Apache, accederá a la página de autenticación habitual de phpMyAdmin para introducir sus credenciales de MySQL. Al añadir un conjunto adicional de credenciales que no sean de MySQL, proporciona a su base de datos una capa adicional de seguridad. Esto es conveniente, ya que phpMyAdmin ha sido vulnerable a amenazas de seguridad en el pasado.

Conclusión

Ya debería tener phpMyAdmin configurado y listo para usar en su servidor Ubuntu. Con esta interfaz, puede crear bases de datos, usuarios y tablas, así como realizar operaciones habituales como eliminar y modificar estructuras y datos.

Stephen Dove