No se puede crear ni eliminar una base de datos en el servidor Plesk

No se puede crear ni eliminar una base de datos en el servidor Plesk

Hoy me di cuenta de que no puedo agregar ni eliminar ninguna de las bases de datos que pertenecen a ninguno de mis clientes en mi servidor Plesk.

Había estado recibiendo este error:

Error: No se pueden eliminar algunas de las bases de datos seleccionadas. El usuario especificado como definidor ('root'@'localhost') no existe

Entonces encontré y ejecuté esta solución:

# plesk db
# CREATE USER 'root'@'localhost' IDENTIFIED BY 'typepasswordhere';

Ahora al intentar agregar o eliminar una base de datos recibo un nuevo error:

Error: Falló la conexión al servidor de la base de datos: La vista 'mysql.user' hace referencia a tablas, columnas o funciones no válidas o el definidor/invocador de la vista carece de derechos para usarlas

(No estoy seguro de si está relacionado o no, pero actualicé MariaDB hace unos días. Aunque estoy bastante seguro de que creé una nueva base de datos después de hacerlo).

CentOS Linux 7.7.1908 (Core) Plesk Onyx Versión 17.8.11 Actualización #80 mysql 10.4.11-1.el7.centos 10.4.11-MariaDB Servidor MariaDB

Respuesta1

Un poco tarde, pero puede ser útil para alguien más.

Se ha informado de un error de MariaDB en el que la instalación segura que requiere Plesk no funciona correctamente.

A partir de 10.4, mysql_secure_installation se bloquea al comienzo de la ejecución si la base de datos no tiene root@localhost y el script se ejecuta con otro superusuario.

Resulta en la imposibilidad de cambiar el definidor de 'root' a otro usuario (administrador como lo requiere Plesk)

https://jira.mariadb.org/browse/MDEV-22486

No tiene ningún usuario root porque la instalación inicial de Plesk le cambió el nombre a usuario administrador.

Entonces, como resultado de esto, Plesk no pudo conectarse a la base de datos, porque el definidor no se cambió de root a admin debido a que la instalación segura falló durante la instalación o actualización.

Y cualquier acción falla con este error:

[root@hostname ~]# plesk db
...
MariaDB [psa]> SELECT User FROM mysql.user;
ERROR 1449 (HY000): The user specified as a definer ('root'@'localhost') does not exist

La solución para esto es crear un usuario root@localhost:

MariaDB [psa]> CREATE USER root@localhost IDENTIFIED VIA unix_socket USING 'invalid';
Query OK, 0 rows affected (0.015 sec)

Para no recibir este error:

Error: Falló la conexión al servidor de la base de datos: La vista 'mysql.user' hace referencia a tablas, columnas o funciones no válidas o el definidor/invocador de la vista carece de derechos para usarlas

Otorgar privilegios:

MariaDB [psa]> GRANT SELECT ON *.* TO root@localhost IDENTIFIED VIA unix_socket; Query OK, 0 rows affected (0.533 sec)simply grant privileges for the new user:

A partir de esto las operaciones de la base de datos estarán funcionando en Plesk. Pero es bueno eliminar un usuario innecesario con acceso completo a la base de datos (bueno para la seguridad). Necesita modificar DEFINER nuevamente a administrador (lo he hecho manualmente en el archivo, pero puede hacerlo a través de ALTER VIEW en MySQL):

[root@localhost]# grep root /var/lib/mysql/mysql/*.frm
user.frm:definer_user=root
>>>
[root@localhost]# grep root /var/lib/mysql/mysql/*.frm
user.frm:definer_user=admin

Vaciar tablas para aplicar cambios:
MariaDB [psa]> FLUSH TABLES;

Query OK, 0 rows affected (0.003 sec)

Después de eso, asegúrese de que se cambie el definidor:

MariaDB [psa]> SHOW CREATE VIEW mysql.user;
...
| user | CREATE ALGORITHM=UNDEFINED DEFINER=`admin`@`localhost` 

Y elimine el usuario raíz de la base de datos:

MariaDB [psa]> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'localhost';

Query OK, 0 rows affected (0.114 sec)



MariaDB [psa]> DROP USER 'root'@'localhost';

Query OK, 0 rows affected (0.025 sec)

Verifique las acciones de Plesk DB y asegúrese de que todas funcionen bien.

información relacionada