首页 文章

Glassfish将JDBC池从localhost更改为127.0.0.1 [重复]

提问于
浏览
-1

这个问题在这里已有答案:

这是我的JDBC连接池配置:

<jdbc-connection-pool max-pool-size="300" steady-pool-size="3" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="teDS" wrap-jdbc-objects="false" connection-validation-method="auto-commit" res-type="javax.sql.DataSource">
  <property name="URL" value="jdbc:mysql://localhost:3306/db"></property>
  <property name="port" value="3306"></property>
  <property name="DatabaseName" value="db"></property>
  <property name="serverName" value="localhost"></property>
  <property name="password" value="XXX"></property>
  <property name="url" value="jdbc:mysql://localhost:3306/db"></property>
  <property name="user" value="user"></property>
</jdbc-connection-pool>

请帮我

但我PING连接有这个错误:

teDS发生错误Ping连接池失败 . 无法分配连接,因为:用户拒绝访问'user' @' 127.0.0.1 '(使用密码:是)请查看server.log以获取更多详细信息 .

Ping ERROR

1 回答

  • 1

    MySQL中的用户由用户名和主机标识 .

    为了允许连接,我们需要在MySQL中创建一个具有匹配用户名和主机的用户 . 要创建完全匹配的用户:

    GRANT USAGE ON *.* TO 'user'@'127.0.0.1' IDENTIFIED BY 'supersecretpassword' ;
     GRANT SELECT, INSERT, UPDATE, DELETE ON somedatabase.* TO 'user'@'127.0.0.1' ;
    

    要复制现有用户的权限,我们可以使用SHOW GRANTS语句为其他用户提取权限

    SHOW GRANTS FOR 'user'@'localhost'
    

    我们可以复制该输出,并将其用作新用户的GRANT语句的基础,将'localhost'替换为'127.0.0.1' .

    作为另一种选择,也可以为主机名创建一个带有'%'通配符的用户,而不是'127.0.0.1' . 这将允许来自任何IP地址的连接 .


    如果用户存在,则密码可能错误 . 验证池配置使用的密码是否与mysql.user表中存储的密码相匹配 .

    SELECT password FROM mysql.user WHERE user = 'user' and host = '127.0.0.1';
    
    SELECT PASSWORD('supersecretpassword') ;
    

    并比较哈希值 .

    正在返回的错误消息看起来像是来自MySQL服务器:

    用户'user'@'127.0.0.1'拒绝访问(使用密码:是)

    这表明通过端口3306发生了成功的TCP握手,并且MySQL服务器正在尝试进行身份验证:user ='user',host ='127.0.0.1',password = PASSWORD('XXX') .

    用户不存在于mysql.user表中,密码不正确,或者(可能)用户没有database ='db'的权限 .

    (如果将DML更改应用于mysql数据库中的特权表,则发出FLUSH特权以使这些更改生效 . (如果使用GRANT和REVOKE语法应用更改,则不需要FLUSH PRIVILEGES,仅在使用INSERT应用更改时才需要FLUSH PRIVILEGES ,更新,删除 . )

相关问题