Você está na página 1de 4

Causas dos Erros de Accesso Negado MySql

Se você encontrar erros de Accesso Negado (Access denied) quando tentar conectar-se ao servidor MySQL, a lista
abaixo indica alguns caminhos que você pode seguir para corrigir o problema:

 Depois de instalar o MySQL, você executou o script mysql_install_db para configurar o conteúdo inicial
das tabelas de permissões ? Se não, faça isto. See Secção 4.4.4, “Configurando os Privilégios Iniciais do
MySQL”. Testes os privilégios iniciais executando este comando:
 shell> mysql -u root test

O servidor deve deixar você conectar sem erros. Você também deve assegurar que exista o arquivo
user.MYD no diretório do banco de dados do MySQL. Normalmente ele fica em
CAMINHO/var/mysql/user.MYD. onde CAMINHO é o caminho para a raiz da instalação do MySQL.

 Depois de terminar uma instalação, você deve conectar ao servidor e configurar seus usuários e suas
permissões de acesso.
 shell> mysql -u root mysql

O servidor deve permitir a conexão pois o usuário root MySQL vem inicialmente configurado sem senha.
Isto também é um risco de segurança, portanto configurar a senha do usuário root é algo que deve ser feito
enquanto você configura os outros usuários do MySQL.

Se você tentar se conectar como root e obter este erro:

Access denied for user: '@unknown' to database mysql

isto significa que você não possui um registro na tabela user com o valor 'root' no campo User e que o
mysqld não pode resolver o nome de máquina do cliente. Neste caso, você deve reiniciar o servidor com a
opção --skip-grant-tables e editar seu arquivo /etc/hosts ou o \Windows\hosts para adicionar uma
entrada para sua máquina.

 Se você obter um erro como o seguinte:


 shell> mysqladmin -u root -pxxxx ver
 Access denied for user: 'root@localhost' (Using password: YES)

Significa que você está usando uma senha incorreta. See Secção 4.4.8, “Configurando Senhas”.

Se você esqueceu a senha de root, você pode reiniciar o mysqld com a opção --skip-grant-tables para
alterar a senha. See Secção A.4.2, “Como Recuperar uma Senha de Root Esquecida” .

Se você obter o erro acima mesmo se não tiver configurado uma senha, significa que você tem algum
arquivo my.ini configurado para passar alguma senha incorreta. See Secção 4.1.2, “Arquivo de Opções
my.cnf”. Você pode evitar o uso de arquivos de opções com a opção --no-defaults, como a seguir:

shell> mysqladmin --no-defaults -u root ver

 Se você atualizou uma instalação existente do MySQL de um versão anterior à versão 3.22.11 para a Versão
3.22.11 ou posterior, você executou o script mysql_fix_privilege_tabels ? Se não faça isto. A estrutura
das tabelas de permissões alteraram com a Versão 3.22.11 do MySQL quando a instrução GRANT se tornou
funcional. See Secção 2.5.6, “Atualizando a Tabela de Permissões”.
 Se os seus privilégios parecerem alterados no meio de uma sessão, pode ser que o superusuário os alterou.
A recarga das tabelas de permissões afeta novas conexões dos clientes, mas ela também afeta conexões
existentes como indicado em Secção 4.4.3, “Quando as Alterações nos Privilégios tem Efeito” .
 Se você não consegue fazer a sua senha funcionar, lembre-se que você deve usar a função PASSWORD() se
você configurar a senha com instruções INSERT, UPDATE ou SET PASSWORD. A função PASSWORD() é
desnecessária se você especificar a senha usando a instrução GRANT ... IDENTIFIED BY ou o comando
mysqladmin password. See Secção 4.4.8, “Configurando Senhas”.
 localhost é um sinônimo para seu nome de máquina local, e é também a máquina padrão em que clientes
tentam se conectar se você não especificar explicitamente o nome da máquina. Entretanto, conexões para
localhost não funcionam se você estiver executando em um sistema que utilize MIT-pthreads (conexões
localhost são feitas utilizando sockets Unix, que não são suportadas pelas MIT-pthreads). Para evitar este
problema nestes sistemas, você deve utilizar a opção --host para nomear explicitamente o servidor. Isto
fará uma conexão TCP/IP ao servidor myssqld. Neste caso, você deve ter seu nome de máquina real nos
registros da tabela user no servidor. (Isto é verdadeiro mesmo se você estiver executando um programa
cliente na mesma máquina que o servidor.)
 Se você obter o erro Access denied quando tentando conectar ao banco de dados com mysql -u
nome_usuário _nome_bd, você pode ter um problema com a tabela user. Verifique isto executando mysql
-u root mysql e usando esta sentença SQL:
 mysql> SELECT * FROM user;

O resultado deve incluir uma entrada com as colunas Host e User combinando com o nome de seu
computador e seu nome de usuário no MySQL.

 A mensagem de erro Access denied irá dizer a você com qual usuário você está tentando se logar, a
máquina que está tentando conectar e se você está utilizando uma senha ou não. Normalmente, você deve
ter um registro na tabela user que combine exatamente com o nome de máquina e o nome de usuário que
forem fornecidos na mensagem de erro. Por exemplo, se você obter uma mensagem de erro que contenha
Using password: NO, isto significa que você está tentando se conectar sem uma senha.
 Se você obter o seguinte erro quando estiver tentando conectar de uma máquina diferente da que o servidor
MySQL estiver executando, então não deve existir um registro na tabela user que combine com esta
máquina:
 Host ... is not allowed to connect to this MySQL server

Você pode corrigir isto utilizando a ferramenta de linha de comando mysql (no servidor!) para adicionar um
registro à tabela user, db ou host para coincidir com o usuário e nome de máquina de onde você está
tentando conectar, depois execute o comando mysqladmin flush-privileges. Se você não estiver
executando o MySQL Versão 3.22 e você não sabe o número IP ou o nome da máquina da qual estiver
conectando, você deve colocar uma entrada com o valor '%' na coluna Host da tabela user e reiniciar o
mysqld com a opção --log na máquina onde é executado o servidor. Depois tente conectar a partir da
máquina cliente, a informação no log do MySQL irá indicar como você está realmente conectando. (Então
troque o '%' na tabela user com o nome da máquina mostrado pelo log. De outra forma você teria um
sistema que seria inseguro.)

Outra razão para este erro no Linux pode ser porque você está utilizando uma versão binária do MySQL que
é compilada com uma versão diferente da glibc que você está usando. Neste caso você deve atualizar seu
SO/Glibc ou fazer o download da versão fonte do MySQL e compilá-la. Um RPM fonte é, normalmente, fácil
de compilar e instalar, logo, isto não é um grande problema.

 Se você obter uma mensagem de erro onde o nome da máquina não é exibido ou, no lugar do nome da
máquina existir um IP, mesmo se você tenta a conexão com um nome de máquina:
 shell> mysqladmin -u root -pxxxx -h some-hostname ver
 Access denied for user: 'root@' (Using password: YES)
Isto significa que o MySQL obteve algum erro quando tentava resolver o IP para um nome de maquina.
Neste caso você pode executar mysqladmin flush-hosts para zerar o cache DNS interno. See
Secção 5.5.5, “Como o MySQL Utiliza o DNS”.

Algumas soluções permanentes são:

o Tente descobrir o que está errado com seu servidor DNS e corrija os erros.
o Especifique números IPs no lugar de nomes nas tabelas de privilégios do MySQL.
o Inicie o mysqld com --skip-name-resolve.
o Inicie o mysqld com --skip-host-cache.
o Conecte à localhost se você estiver executando o servidor e o cliente na mesma máquina.
o Coloque os nomes das máquinas clientes em /etc/hosts.
 Se mysql -u root test funciona mas mysql -h nome_servidor -u root test resultar em
Access denied, então você pode não ter o nome correto para a sua máquina na tabela user. Um
problema comum é quando o valor de Host na entrada da tabela user especifica um nome de
máquina não qualificado, mas as rotinas de resolução de nomes de seu sistema retornam um nome
qualificado completo do domínio (ou vice-versa). Por exemplo, se você tem uma entrada com o nome
'tcx' na tabela user, mas seu DNS diz ao MySQL que o nome da máquina é 'tcx.subnet.se', a
entrada não irá funcionar. Tente adicionar um registro à tabela user que contenha o número IP de
sua máquina como o valor da coluna Host. (Uma alternativa, seria adicionar um registro à tabela
user com o valor de Host contendo um metacaracter, por exemplo, 'tcx.%'. Entretanto, o uso de
nomes de máquinas terminando com ‘%’ é inseguro e não é recomendado!)
 Se mysql -u nome_usuário test funciona mas mysql -u nome_usuário outro_bd não
funconar, você não possui uma entrada para outro_bd listado na tabela db.
 Se mysql -u nome_usuário nome_bd funciona quando executado no próprio servidor, mas mysql
-u nome_máquina -u nome_usuário nome_bd não funciona quando executado em outra
máquina cliente, você não possui o nome da máquina cliente listado na tabela user ou na tabela db.
 Se você não estiver entendendo porque obtem Access denied, remova da tabela user todas as
entradas da coluna Host que contenham meta caracteres (entradas que contenham ‘$’ ou ‘_’). Um
erro muito comum é inserir uma nova entrada com Host='%' e User='algum usuário', pensando
que isto irá permitir a você especificar localhost para conectar da mesma máquina. A razão disto
não funcionar é que os privilégios padrões incluem uma entrada com Host='localhost' e
User=''. Como esta entrada tem o valor 'localhost' em Host que é mais específica que '%',
ela é usada no lugar da nova entrada quando se conectar de localhost! O procedimento correto é
inserir uma segunda entrada com Host='localhost' e User='algum_usuário', ou remover a
entrada com Host='localhost' e User= ''.
 Se você obter o seguinte erro, você pode ter um problema com a tabela db ou a tabela host:
 Access to database denied

Se a entrada selecionada da tabela db tiver um valor vazio na coluna Host, tenha certeza que exista uma ou
mais entradas correspondentes na tabela host especificando quais máquinas aplicam-se à tabela db.

Se você obter o erro quando estiver utilizando comandos SQL SELECT ... INTO OUTFILE ou LOAD DATA
INFILE, a entrada na tabela user provavelmente não tem o privilégio file habilitado.

 Lembre-se que programas clientes irão usar parâmetros de conexões especificados em arquivos de
configuração ou variáveis ambientais. See Apêndice  F, Variáveis de Ambientes do MySQL. Se
parecer que algum cliente está enviando parâmetros errados para a conexão e você não os
especificou na linha de comando, verifique seu ambiente e o arquivo .my.cnf no seu diretório home.
Você pode também conferir os arquivos de configurações do servidor MySQL, apesar de não ser
interessante gravar configurações de cliente nestes arquivos. See Secção 4.1.2, “Arquivo de Opções
my.cnf”. Se você obter a mensagem de acesso negado (Access denied) quando estiver
executando um cliente sem opções, tenha certeza que você não especificou uma senha antiga em
nenhum de seus arquivos de opções! See Secção 4.1.2, “Arquivo de Opções my.cnf”.
 Se você fizer alterações para as tabelas de permissões diretamente (utilizando uma instrução
INSERT ou UPDATE) e suas alterações parecem ser ignoradas, lembre que você deve usar uma
instrução FLUSH PRIVILEGES ou executar um comando mysqladmin flush-privileges para o
servidor ler novamente as tabelas com os privilégios. De outra forma, suas alterações não farão
efeito até que o servidor seja reiniciado. Lembre-se que depois de configurar a senha de root com
um comando UPDATE, não será necessário especificar a senha até que você atualize os privilégios,
pois o servidor ainda não saberá que você alterou a senha.
 Se você tiver problemas de acesso com Perl, PHP, Python ou um programa ODBC, tente conectar
ao servidor com mysql -u nome_usuário nome_bd ou mysql -u nome_usuário -psua_senha
nome_bd. Se você consegue conectar com o cliente mysql, existe algum problema com seu
programa e não o acesso aos privilégios (Note que não espaço entre -p e a senha; você também
pode utilizar a sintaxe --password=sua_senha para especificar a senha. Se você utilizar a opção
-p sozinha, o MySQL irá lhe solicitar a senha.)
 Para testar, iniciae o daemon mysqld com a opção --skip-grant-tables. Então você pode alterar
as tabelas de permissões do MySQL e utilizar o script mysqlaccess para conferir se suas
modificações fizeram o não o efeito desejado. Quando você estiver satisfeito com suas alterações,
execute mysqladmin flush-privileges para dizer ao servidor mysqld para iniciar utilizando as
novas tabelas com os privilégios. Nota: Recarregar as tabelas de permissões sobrescreve a opção
--skip-grant-tables. Isto lhe permite dizer ao servidor para começar a utilizar as tabelas de
permissões novamente sem reiniciá-lo.
 Se tudo mais falhar, inicie o servidor mysqld com uma opção de depuração (por exemplo,
--debug=d,general,query). Isto irá imprimir informações de máquinas e usuários sobre tentativas
de conexões, e também informações sobre cada comando disparado. See Secção E.1.2, “Criando
Arquivos Trace (Rastreamento)”.
 Se você tiver outros problemas com as tabelas de permissões do MySQL e sente que deve enviar o
problema para a lista de discussão, sempre forneça um descarga das tabelas de permissões do seu
MySQL. Você pode descarregar as tabelas com o comando mysqldump mysql. Como sempre,
envie seus problemas utilizando o script mysqlbug. See Secção 1.7.1.3, “Como relatar erros ou
problemas”. Em alguns casos você pode precisar reiniciar o mysqld com a opção --skip-grant-
tables para executar o mysqldump.

Você também pode gostar