Acesso Negado (usando a senha: NO) da tentativa de login do site remoto por meio do nome do host quando a senha é fornecida

1

Estou no processo de executar um script php em um servidor da Web em um site remoto (eu chamarei o SiteB) que se conecta a um servidor MySql em um local remoto (eu chamarei o Site A). Agora, o servidor SQL no Site A tem 2 usuários, um chamado 'usr'@'192.168.1.%' para acesso de dentro da rede interna no Site A e um chamado 'usr'@'client.siteB.com' .

O servidor no Site A está atrás de um roteador e tem todo o tráfego TCP e UDP na porta 3306 encaminhado para 192.168.1.12 (o IP local do servidor MySQL no Site A). O site A tem um IP dinâmico, todas as referências ao servidor SQL são iniciadas por meio do nome do host (chamaremos server.siteA.com). O Site B tem um IP externo estático, mas todas as conexões SQL que estão chegando são referenciadas apenas pelo nome do host, portanto, por que o usuário do SQL é 'usr' @ 'client.siteB.com'.

O problema que estou tendo é que sempre que eu executo o script php do servidor web no site B, recebo o seguinte erro:

Access denied for user 'usr'@'client.siteB.com' (using password: NO)

Também faz referência a uma linha, que é:

$this->MCdbConnection = mysql_connect($this->MySQLhost, $this->MySQLuser, $this->MySQLpassword);

Então, como você pode ver, estou passando uma senha. A parte mais estranha é que, ao executar o mesmo script na rede local no Site A e alterar nada além da variável $ MySQLhost de server.siteA.com para 192.168.1.7, o script funciona bem e conecta e seleciona e insere os dados bem.

Um erro como esse geralmente me faz pensar que é um problema de nome de usuário, mas ambos os usuários do MySQL ('usr'@'192.168.1.%' e 'usr'@'client.siteB.com') são completamente idênticos, e ambos têm a mesma senha e privilégios (somente SELECT, INSERT e UPDATE).

Eu também tenho o mesmo erro ao tentar conectar via MySQL Workbench e o cliente de linha de comando de outra máquina na rede local no Site A quando eu deixei o usuário 'usr'@'192.168.1.%'. Todos os sinais apontam para um usuário faltando, ruim ou sub-autenticado, mas eu sei que o usuário está lá e tem as permissões adequadas, a única coisa que me faz desconfiar é que ele usa um nome de host em vez de um endereço IP.

Também verifiquei que tenho o seguinte conjunto de regras do IPTables no servidor MySQL no SiteA:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

Eu também posso e tenho executado conexões mysql similares via PHP no mesmo servidor no Site B, mas todas elas se conectam ao localhost.

Além disso, para uma boa medida, o SQL Server no my.cnf do SiteA:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
general-log
expire_logs_days = 60

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Eu também tentei alterar o host de 'usr'@'client.siteB.com' para '%', mas ainda estou recebendo o mesmo erro. Além disso, estou executando o servidor MySQL no Fedora e tenho o selinux configurado como permissivo.

Além disso, tentei alterar o nome do host para o ip do Site B no host do usuário do MySQL, mas ainda recebo o mesmo erro. No entanto, todo o erro que eu vi para ele se referia a ele como "client.siteB.com", mesmo quando eu faço um tcpdump no SiteA eu vejo o tráfego vindo da fonte "client.siteB.com"

Eu sei que os erros do SQL Access Denied são muito comuns e têm uma infinidade de problemas de root, mas nenhum dos tópicos que vi até agora sobre SF parecem resolver este problema e estou completamente perplexo. Além disso, meu google-fu falhou comigo desta vez. : (

    
por Ballistic Buddha 14.08.2011 / 08:51

2 respostas

1

Então, eu descobri o problema, e foi um erro muito óbvio no meu script php. Portanto, no servidor da Web no SiteB, o script usa variáveis que armazenam informações de conexão de um arquivo separado, e esse arquivo originalmente teve colisões com os nomes das variáveis em meu script depois que fiz uma inclusão. Esse arquivo não existe no meu ambiente de teste no SiteA, portanto Todas as variáveis para usuário, esquema, host e senha estavam sendo substituídas por outras informações de conexão que eu estava armazenando no mesmo arquivo para uma conexão SQL com localhost que usa um senha diferente. Então, eu tive que mudar os nomes das variáveis dentro do script e eu perdi uma variável (a senha um), então basicamente estava usando a outra senha quando estava no SiteB mas usava a senha correta quando estava no siteA.

Então, sim, depois de corrigir esse nome de variável, a conexão agora está sendo estabelecida e agora está sendo autenticada corretamente. Estou tendo erros ao selecionar o esquema padrão por algum motivo, mas isso parece ser um problema não relacionado. Obrigado pela ajuda para aqueles que deram entrada embora.

    
por 14.08.2011 / 23:35
2

Esse erro não é o que sai de mysql_connect , na minha experiência; é aquele que vem do cliente de linha de comando mysql . Seu script PHP está sendo enviado para a linha de comando em algum momento?

    
por 14.08.2011 / 09:06

Tags