![Como posso permitir conexão remota do MySQL via HTTP/PHP?](https://rvso.com/image/697399/Como%20posso%20permitir%20conex%C3%A3o%20remota%20do%20MySQL%20via%20HTTP%2FPHP%3F.png)
Estou executando o CentOS 7 em todos os servidores mencionados abaixo.
Estou testando em um ambiente de desenvolvimento local para configurar banco de dados e servidor web separados.
Esses servidores são duas instâncias do VirtualBox conectadas via Bridged Mode na rede local para que possam se ver sem problemas.
Quero poder que o servidor WEB se conecte ao MySQL no servidor de banco de dados usando a restrição de IP apenas do servidor WEB.
Li alguns tópicos de discussão, mas nenhum deles ajuda a resolver meu problema, como muitos deles são firewall
ou selinux
estão relacionados.
Desativei ambos firewalld
e selinux
então esses não são os fatores no momento.
IP do servidor de banco de dados: 192.168.1.167 IP do servidor WEB: 192.168.1.168
Estou usando o seguinte script para teste,http://192.168.1.168/connect.php
<?php
$servername = "192.168.1.167";
$username = "demouser";
$password = "password";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
Estou recebendo Connection failed: Permission denied
um erro ao executar:
wget http://192.168.1.168/connect.php
no console do terminal 192.168.1.168http://192.168.1.168/connect.php
nas janelas do meu navegador também está me dando o mesmo erro.
(1) No entanto, consigo me conectar com sucesso via linha de comando usando mysql -u demouser -p -h 192.168.1.167
192.168.1.168 (servidor WEB)
(2) Também recebo Connected successfully
ao executar diretamente php connect.php
no console do terminal 192.168.1.168 (servidor WEB)
Só posso confirmar que a conexão remota do MySQL via SSH está funcionando e via PHP o módulo MySQL está funcionando.
Aqui está o privilégio de acesso em 192.168.1.167 (servidor DB)
+---------------------------------------------------------------------------------------------------------------+
| Grants for demouser@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'demouser'@'localhost' IDENTIFIED BY PASSWORD '*DB17DD535D122AED147A61C30CD5D01FB3BC5433' |
| GRANT ALL PRIVILEGES ON `demodb`.* TO 'demouser'@'localhost' |
+---------------------------------------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected] |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'demouser'@'192.168.1.168' IDENTIFIED BY PASSWORD '*DB17DD535D122AED147A61C30CD5D01FB3BC5433' |
| GRANT ALL PRIVILEGES ON `demodb`.* TO 'demouser'@'192.168.1.168' |
+-------------------------------------------------------------------------------------------------------------------+
netstat
em 192.168.1.167 está mostrando:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2892/mysqld
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1704/master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1053/sshd
Como posso permitir a conexão remota do MySQL via HTTP/PHP, mas apenas para solicitações iniciadas no servidor WEB mencionado acima?
Responder1
Consegui identificar que essa SELinux
foi a causa da falha de conexão.
Conforme mencionado no tópico original, desativei o SELinux
Firewall noBDservidor, que eu acreditava estar bloqueando a conexão remota doREDEservidor.
O que está causando o problema de conexão estava SELinux
noREDEservidor.
Desativei-o temporariamente usando setenforce 0
para colocá-lo no permissive
modo.
Tudo funciona.
Eu reativei SELinux
o Firewall noBDservidor. Ainda posso fazer conexão remota com o banco de dados através do script PHP noREDEservidor.
Posso agora confirmar que a questão estava noREDEservidor iniciando a conexão.
Eu reativei SELinux
noREDEservidor e use o seguinte comando para definir o booleano SELinux
noREDEservidor.
setsebool -P httpd_can_network_connect_db 1
Atualmente estou SELinux
ativo em ambosREDE&BDservidores no enforcing
modo, e a conexão remota do MySQL ainda pode ser realizada com sucesso.
O que li em outros tópicos de discussão que não acompanhei foi: qual servidor configurar os SELinux
booleanos.
Espero que este tópico possa ajudar qualquer pessoa que esteja enfrentando o mesmo problema que eu a economizar tempo.