【发布时间】:2017-03-09 14:05:42
【问题描述】:
我有一个只读用户,当我尝试启动我的 Spring Boot 应用程序时出现异常(使用密码是)。
用户权限:
mysql> show grants;
+---------------------------------------------------------------+
| Grants for myuser@% |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mydb'@'%' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT SELECT ON `mydb`.* TO 'myuser'@'%' |
+---------------------------------------------------------------+
2 rows in set (0,00 sec)
类数据库配置:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "mydbEntityManagerFactory",
basePackages = {"co.com.xxx.persistence.telemercadeo"}
)
public class DatabaseConfig {
/**
* Logger to register events.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseConfig.class);
/**
* Returns a data source for database connection (source).
*
* @return {@link DataSource}. Database connection representation.
*/
@Bean(name = "mydbDataSource")
@ConfigurationProperties(prefix = "mydb.jdbc")
public DataSource sourceDataSource() {
LOGGER.info("Loading data source for source");
return DataSourceBuilder.create().build();
}
@Bean(name = "mydbEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("mydbDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("co.com.xxx.model.telemercadeo")
.persistenceUnit("mydb")
.build();
}
@Bean(name = "mydbTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("mydbEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
我的 application.properties:
mydb.jdbc.url=jdbc:mysql://192.168.200.5:3306/mydb
mydb.jdbc.username=myuser
mydb.jdbc.password=mypass
mydb.jdbc.driverClassName=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
当我启动应用程序时,我会得到下一个跟踪:
2017-03-09 08:34:34.635 [main] INFO c.c.n.c.e.c.DatabaseConfig - Loading data source for source
2017-03-09 08:34:34.678 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'mydb
2017-03-09 08:34:34.678 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [
name: mydb
...]
2017-03-09 08:34:34.740 [main] ERROR o.a.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool.
java.sql.SQLException: Access denied for user 'myuser'@'SUBDOMAIN.MYDOMAIN.COM' (using password: YES)
2017-03-09 10:02:26.926 [main] WARN o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata : Access denied for user 'myuser'@'SUBDOMAIN.MYDOMAIN.COM' (using password: YES)
我的怀疑:
- 无法连接到只读用户的数据库。
- 拒绝用户 'myuser'@'SUBDOMAIN.MYDOMAIN.COM' 的访问。为什么会出现域名?
拥有所有权限的用户没有问题。但我需要连接只读用户。
Mysql版本:5.1
编辑
使用参数--skip-name-resolve true(如@wangyuntao建议的那样)重新启动mysql服务器后,异常更改为:
java.sql.SQLException: Access denied for user 'myuser'@'192.168.200.1' (using password: YES)
如果db的ip是192.168.200.5,为什么用户'myuser'@'192.168.200.1'的访问被拒绝(使用密码:YES)?
【问题讨论】:
标签: java mysql spring-boot dns spring-data-jpa