JDBC Hibernate - Mysql Connection Error

2019-04-11 02:26发布

I have a local mysql server on my Ubuntu 11.10 desktop. The hostname = localhost; username = root; password = root; database name = CBS. I am really confused because when I access mysql using terminal, mysql administrator, and mysql query browser I use those authentication I mentioned above and everything is OK. My problem is when I configure my jdbc.properties in my Java App I'm getting this error:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [28000]; error code [1045]; Access denied for user 'root '@'localhost' (using password: YES); nested exception is java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)

My configuration file, jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/CBS
jdbc.username=root  
jdbc.password=root

By the way, the reason I will be using local server because our main server shutdown so I have to use my local mysql to continue with my project. Please help me... Thanks in advance.

2条回答
仙女界的扛把子
2楼-- · 2019-04-11 02:38

You might have to GRANT permissions to access the database.

Look at the MySQL docs for something that looks like this:

create database pmt;
create user pmt identified by 'pmt';
grant all on pmt.* to 'pmt'@'%';

"pmt" is just an example above. I happened to make the name of the database, username, and password all the same. I don't recommend that as a best practice. It's just something I did for some local development.

I personally don't like GRANTing root access to any application. I would not use root username and password in even a toy application. It doesn't take much effort to create a new user and GRANT appropriate permissions.

查看更多
在下西门庆
3楼-- · 2019-04-11 02:46

More than likely your framework is logging into your local database as 127.0.0.1. Which will create a login problem in MySQL if you have not defined an appropriate domain scoped credential. Try this to verify:

mysql -uroot -proot
SELECT * from mysql.user WHERE user = 'root';

If there is no 'root'@'127.0.0.1' then have found the problem and to remedy it, do one of two things:

  1. Define a domain scoped credential for 'root', at '127.0.0.1'.
  2. Define a wildcard domain scoped credential for 'root', so you can login to your MySQL with those credentials from multiple locations.

Here's an example of the second:

mysql -uroot -proot

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

On a side note, I would definitely recommend using something more creative for your user id and password. Especially if you have TCP sockets enabled for your server.

查看更多
登录 后发表回答