HikariCP配置非root用户连接MariaDB却提示root@localhost访问被拒绝
排查解决步骤
配置被覆盖排查
很多框架(比如Spring Boot)会优先读取外部配置文件(application.yml/application.properties)、环境变量、启动参数中的数据源配置,覆盖代码中硬编码的属性。你可以在初始化HikariDataSource前加一行日志打印配置的用户名,确认是否生效:System.out.println("配置的用户名:" + hikariConfig.getUsername());如果打印结果为
root,直接全局搜索项目中所有datasource.username、hikari.username相关的配置项,删除多余的root配置即可。如果是Spring Boot项目,还要确认你自定义的数据源配置是否加了@Primary注解,或者是否排除了自带的DataSourceAutoConfiguration自动配置类,避免框架自动初始化默认数据源。MariaDB用户授权规则排查
如果你打印出的用户名确实是你配置的notroot,说明是MariaDB侧的用户识别逻辑导致的报错:- 先在本地命令行执行以下命令验证用户是否能正常登录:
输入密码后如果登录失败,说明授权不全。MariaDB默认对localhost的连接走Unix Socket认证,如果你只给mysql -unotroot -p -hlocalhost'notroot'@'%'授予了权限,%不会匹配localhost的socket连接,需要额外给本地地址授权:
登录MariaDB命令行执行以下语句:GRANT ALL PRIVILEGES ON `database`.* TO 'notroot'@'localhost' IDENTIFIED BY '你的实际密码'; FLUSH PRIVILEGES; - 也可以直接把JDBC URL修改为用IP连接,跳过Unix Socket认证逻辑:
jdbc:mariadb://127.0.0.1:3306/database - 你还可以把用户名密码直接写在JDBC URL中,优先级最高,避免驱动读取配置异常:
jdbc:mariadb://localhost:3306/database?user=notroot&password=你的实际密码
- 先在本地命令行执行以下命令验证用户是否能正常登录:
驱动版本适配排查
检查你项目中引入的mariadb-java-client驱动版本,确保和你本地安装的MariaDB服务器版本适配:MariaDB 10.4及以上版本建议使用3.x版本的驱动,10.3及以下可以用2.7.x稳定版,避免老版本驱动存在的参数读取bug。
内容的提问来源于stack exchange,提问作者MathWellan
相关产品推荐
相关产品推荐

