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'
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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'
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)
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.