【问题标题】:java.sql.SQLException: Access denied for user 'test'@'localhost' (using password: YES)java.sql.SQLException:用户'test'@'localhost'的访问被拒绝(使用密码:是)
【发布时间】:2020-09-02 21:07:44
【问题描述】:

我检查了多个具有类似问题的链接,但没有一个适用于我的案例。

我正在尝试从我的 Spring Boot 代码访问 MySQL,但我看到了这个错误。

Caused by: java.sql.SQLException: Access denied for user 'abcd'@'localhost' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207) ~[mysql-connector-java-8.0.13.jar:8.0.13]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.2.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354) ~[HikariCP-3.4.2.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) ~[HikariCP-3.4.2.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473) ~[HikariCP-3.4.2.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554) ~[HikariCP-3.4.2.jar:na]
    ... 88 common frames omitted

Application.properties:

spring.datasource.url=jdbc:mysql://127.0.0.1/test
spring.datasource.username=abcd
spring.datasource.password=password 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update
logging.level.web=debug
logging.level.org.hibernate.SQL=debug

我尝试更改网址、用户名、密码

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=password

我也试过直接给

spring.datasource.url=jdbc:mysql://localhost:3306/test?user=root&password=password

我有一个如下配置类。

TestDataRepositoryConfig.java

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@EnableTransactionManagement
public class TestDataRepositoryConfig {

    /**
     * Logger
     */
    private static final Logger LOG = LoggerFactory.getLogger(TestDataRepositoryConfig.class);


    @Value("${spring.datasource.driver-class-name}")
    private String driverClass;

    @Value("${spring.datasource.url}")
    private String jdbcUrl;

    @Value("${spring.datasource.username}")
    private String jdbcUserName;

    @Value("${spring.datasource.password}")
    private String jdbcPassword;

    @Bean
    public DataSource dataSource() {
        LOG.info("Repository Config ");
        HikariConfig dataSourceConfig = new HikariConfig();
        dataSourceConfig.setDriverClassName(driverClass);
        dataSourceConfig.setJdbcUrl(jdbcUrl);
        dataSourceConfig.setUsername(jdbcUserName);
        dataSourceConfig.setPassword(jdbcPassword);
        return new HikariDataSource(dataSourceConfig);
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);

        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("com.project.db.entities");
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();

        return factory.getObject();
    }

    @Bean
    public PlatformTransactionManager transactionManager1(EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

我没有我的机器的管理员权限,无法检查服务。但是我能够使用 mySQL 工作台以 root 和“abcd”用户连接到 mySQL 服务器。

【问题讨论】:

  • 除了问题之外,请确保您使用的是正确的方言。我怀疑MySQL5Dialect 太旧了,无法使用。

标签: java mysql spring-boot spring-mvc spring-data-jpa


【解决方案1】:

我能够使用 mySQL 工作台以 root 和“abcd”用户连接到 mySQL 服务器。

我对 mySQL 工作台不是很熟悉,但是您应该能够以“root”身份连接到数据库并检查您尝试使用的帐户是否已正确创建。例如,运行

SELECT host, user FROM mysql.user WHERE user = 'root';

查看为哪些主机范围创建了root 帐户。请注意,主机localhost% 通常应该有单独的user 行。 MySQL 访问控制系统不允许您验证来自非本地 IP 地址的 localhost 帐户或来自本地 IP 地址的 % 帐户。

该表中还有许多其他列...如果您知道如何解释它们。

MySQL 8.0 手册参考:

需要检查的其他事项:

  • 是否已将 MySQL 设置为使用其他一些身份验证机制。例如 Linux 系统上的 PAM 身份验证。
  • MySQL 是否设置了密码过期?
  • 您尝试使用的帐户/主机是否已被锁定?

如果您在您的机器上没有管理员访问权限,我猜 MySQL 设置是由管理员提供/配置的。我建议你向>>他们

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 2014-09-10
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多