Solucionado (ver solução)
Solucionado
(ver solução)
28
respostas

java.sql.SQLException: Access denied for user 'root'@'localhost'

Bom dia pessoal, não estou conseguindo conectar com meu banco, alguém poderia me auxiliar? Detalhe, estou utilizando Linux Mint. java.sql.SQLException: Access denied for user 'root'@'localhost'

28 respostas

Olá, Emerson.

Você consegue conectar ao MySQL através do terminal?

Sim, já estou com banco criado e tudo.

O problema é quando eu rodo aplicação para criar as tabelas.

mysql> use livrariadb Database changed mysql>

Você observou se no seu arquivo persistence.xml, as configurações de conexão com o MySQL estão corretas?

Configuração esta assim:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="livraria" transaction-type="RESOURCE_LOCAL">

           <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>br.com.caelum.livraria.modelo.Livro</class>
        <class>br.com.caelum.livraria.modelo.Autor</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>
    </persistence-unit>

</persistence>

No seu ambiente, o login de root no MySQL tem senha?

Não, o mesmo esta sem senha.

Na linha do url, experimenta adicionar a porta do MySQL - :3306 - caso não tenha personalizado.

<property name="javax.persistence.jdbc.url"value="jdbc:mysql://localhost:3306/livrariadb" />

Continua mesmo problema: Access denied for user 'root'@'localhost'

<properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>

Cola a sua stack trace para nós.

java.sql.SQLException: Access denied for user 'root'@'localhost'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193)
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:194)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:503)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at br.com.caelum.livraria.dao.JPAUtil.<clinit>(JPAUtil.java:10)
    at br.com.caelum.livraria.dao.PopulaBanco.main(PopulaBanco.java:17)

Experimenta reforçar as permissões ao root do MySQL:

1) mysql -u root

2) grant all privileges on *.* to root@localhost identified by suaSenhaAqui

3) flush privileges

4) exit

Depois restarta o MySQL:

5) sudo /etc/init.d/mysql restart

6) Tenta novamente.

Esse linha de comando pedindo senha, é do banco, se for não tem senha, não executei ainda os comandos, só tirando essa dúvida antes. grant all privileges on . to root@localhost identified by suaSenhaAqui

Está corretíssimo, Emerson. Olha novamente cada linha, pois eu editei. Quando postei alguns caracteres não apareciam.

Fiz dessa forma, mas não rolou.

mysql> grant all privileges on *.* to root@localhost;
Query OK, 0 rows affected (0,04 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0,27 sec)
sudo /etc/init.d/mysql restart
[ ok ] Restarting mysql (via systemctl): mysql.service.

Faltou a parte do identified by:

grant all privileges on *.* to root@localhost identified by

Da erro de sintaxe quando coloco identified by.

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Cria uma senha para este usuário root:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'novaSenha';

E tenta novamente.

Emerson beleza mano? Qual a versão do seu hibernate? Está usando maven? Se estiver abre o pom.xml e ve a versão do hibernate, se nao ve nas lib a versão

Problema continua, como coloquei senha para acesso ao banco adicionei a mesma no persistece.xml, mas deu mesma Exception, tá tenso, kkkkkkk.

java.sql.SQLException: Access denied for user 'root'@'localhost'
<properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="admin" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>
java.sql.SQLException: Access denied for user 'root'@'localhost'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193)
    at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:194)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:503)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at br.com.caelum.livraria.dao.JPAUtil.<clinit>(JPAUtil.java:10)
    at br.com.caelum.livraria.dao.PopulaBanco.main(PopulaBanco.java:17)
solução!

Emerson, cria um novo usuário no MySQL.

Após logar no MySQL:

CREATE USER 'novoUsuario'@'localhost' IDENTIFIED BY 'senhaDoUsuario';

GRANT ALL PRIVILEGES ON *.* TO 'novoUsuario'@'localhost' WITH GRANT OPTION;

Atualiza as credenciais no persistence.xml e tenta novamente.

Agora eu acho que foi, sabe como faz para acessar esse novo usuário com a senha no mysql agora? O root eu entrava sem a senha.

INFO: HHH000232: Schema update complete
Hibernate: insert into Autor (nome) values (?)
Hibernate: insert into Autor (nome) values (?)
Hibernate: insert into Autor (nome) values (?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro (dataLancamento, isbn, preco, titulo) values (?, ?, ?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)
Hibernate: insert into Livro_Autor (Livro_id, autores_id) values (?, ?)

Que bom. {:

Experimenta:

ALTER USER 'seuNovoUsuario'@'localhost' IDENTIFIED BY ''; (vazio entre as aspas simples).

Eu aconselharia utilizar sempre com senha.

Valeu Bruno, deu tudo certo, eu só ainda não entendi poque a necessidade de criar um novo usuário para o banco, mas pelo menos esta funcionando.

Database changed
mysql> show tables;
+----------------------+
| Tables_in_livrariadb |
+----------------------+
| Autor                |
| Livro                |
| Livro_Autor          |
+----------------------+
3 rows in set (0,00 sec)

mysql> select * from Autor;
+----+------------------+
| id | nome             |
+----+------------------+
|  1 | Machado de Assis |
|  2 | Jorge Amado      |
|  3 | Paulo Coelho     |
+----+------------------+
3 rows in set (0,00 sec)

Emerson, para sabermos de fato o que estava causando... apenas debugando o log do MySQL. Isto é assunto para uma outra conversa, :D.

Caso este workaround tenha solucionado o seu problema, não esquece de marcar a resposta e fechar o tópico para auxiliar outros usuários. (8

Obrigado pela credibilidade.

[]'s.