Não é possível criar ou excluir banco de dados no servidor Plesk

Não é possível criar ou excluir banco de dados no servidor Plesk

Hoje percebi que não posso adicionar ou excluir nenhum banco de dados que pertence a nenhum dos meus clientes no meu servidor Plesk.

Eu estava recebendo este erro:

Erro: não é possível remover alguns dos bancos de dados selecionados. O usuário especificado como definidor ('root'@'localhost') não existe

Então eu encontrei e executei esta correção:

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

Agora, ao tentar adicionar ou remover um banco de dados, recebo um novo erro:

Erro: Falha na conexão com o servidor de banco de dados: a visualização 'mysql.user' faz referência a tabelas ou colunas ou funções inválidas ou o definidor/invocador da visualização não tem direitos para usá-los

(Não tenho certeza se está relacionado ou não, mas atualizei o MariaDB há alguns dias. Tenho certeza de que criei um novo banco de dados depois de fazer isso).

CentOS Linux 7.7.1908 (Core) Plesk Onyx Versão 17.8.11 Atualização #80 mysql 10.4.11-1.el7.centos 10.4.11-MariaDB Servidor MariaDB

Responder1

Um pouco tarde, mas pode ser útil para outra pessoa.

Há um bug relatado do MariaDB em que a instalação segura exigida pelo Plesk não está funcionando corretamente.

A partir da versão 10.4, mysql_secure_installation trava logo no início da execução se o banco de dados não tiver root@localhost e o script for executado sob outro superusuário.

Isso resulta na impossibilidade de mudar o definidor de 'root' para outro usuário (admin como é exigido pelo Plesk)

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

Você não tem usuário root porque ele foi renomeado na instalação inicial do Plesk para o usuário admin

Portanto, como resultado disso, o Plesk não conseguiu se conectar ao banco de dados, porque o definidor não foi alterado de root para admin devido a falha na instalação segura durante a instalação ou atualização

E qualquer ação falha com este erro:

[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

A solução para isso é criar um usuário root@localhost:

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

Para não receber este erro:

Erro: Falha na conexão com o servidor de banco de dados: a visualização 'mysql.user' faz referência a tabelas ou colunas ou funções inválidas ou o definidor/invocador da visualização não tem direitos para usá-los

Conceder privilégios:

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 disso as operações do banco de dados estarão funcionando no Plesk. Mas é bom remover um usuário desnecessário com acesso total ao banco de dados (bom para segurança), você precisa alterar o DEFINER de volta para admin (eu fiz isso manualmente no arquivo, mas você pode fazer isso via ALTER VIEW no 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

Liberar tabelas para aplicar alterações:
MariaDB [psa]> FLUSH TABLES;

Query OK, 0 rows affected (0.003 sec)

Depois disso, certifique-se de que o definidor foi alterado:

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

E remova o usuário raiz do banco de dados:

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 as ações do Plesk DB e certifique-se de que todas estão funcionando bem.

informação relacionada