【问题标题】:Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost'无法创建 PoolableConnectionFactory(用户“@'localhost' 的访问被拒绝”
【发布时间】:2011-04-16 11:33:33
【问题描述】:

过去几天我一直在尝试为 Web 应用程序设置 DatabaseConnectionPool,但没有成功。我已经阅读了 Tomcat 文档的相关部分以及有关该主题的大量内容,并认为我做的一切都是正确的,但显然不是因为我不断收到以下错误:

Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES))

我在启动 Tomcat 运行时没有收到错误,但是当我尝试运行以下 servlet 时:

package twittersearch.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import twittersearch.model.*;
public class ConPoolTest extends HttpServlet {

    public void doGet(HttpServletRequest request,
                  HttpServletResponse response) 
                  throws IOException, ServletException {
        Context ctx = null;
        DataSource ds = null;
        Connection conn = null;
        try {
            ctx = new InitialContext();
            ds = (DataSource)ctx.lookup("java:comp/env/jdbc/twittersearchdb");
            conn = ds.getConnection();
            if(conn != null) {
                System.out.println("have a connection from the pool");
            }
        } catch(SQLException e) {
            e.printStackTrace();
        } catch(NamingException e) {
            e.printStackTrace();
        } finally {
            try {
                if(conn!=null) {
                    conn.close();
                }
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

webapp 的上下文是:

<?xml version='1.0' encoding='utf-8'?>
<Context>

    <!-- Configure a JDBC DataSource for the user database -->
 <Resource name="jdbc/twittersearchdb" 
           type="javax.sql.DataSource" 
     auth="Container" 
     user="root" 
     password="mypwd" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/twitter" 
     maxActive="8" 
     maxIdle="4"/>


</Context>

我真正不明白的是,为什么当我指定那是用户时,错误并没有说明对“root”@“localhost”的访问被拒绝。

我尝试过的:

我是否有重复的 context.xml?不,我删除了 Tomcat 6.0/conf 中的默认设置。我尝试将 context.xml 放在 [mywebappname]/META-INF/context.xml 中,但这不仅不起作用,而且导致创建了一个名为 TwitterSearch.xml 的文件,该文件是自动生成的并放入 Tomcat 6.0/conf /Catalina/localhost 目录。所以现在我只是在编辑那个,那是我唯一的一个。

是Tomcat的版本吗?好吧,我完全重新安装了最新版本的Tomcat 6.0,所以我认为不是那样。

我们是否缺少一些罐子?我有 tomcat-dbcp.jar、jconnector.jar 以及我认为应该在 Tomcat 6.0/lib 目录中拥有的所有其他文件。

当我查看 MySQL 数据库中的密码时,它们似乎已出于安全目的被编码为一个长字母数字字符串。这是正常的吗?我应该在我的 context.xml 中使用它还是只使用普通密码?

我真的不知道如何解决这个问题,非常感谢一些专家的建议。

非常感谢。

【问题讨论】:

    标签: mysql datasource tomcat6 mysql-error-1045


    【解决方案1】:

    您的设置看起来不错。这看起来纯粹是权限问题。

    您需要在 mysql 中授予该用户访问权限。虽然 Java 将连接到 localhost,但它会使用 tcp/ip 进行连接 - 但是在 mysql 中 localhost 和 127.0.0.1 具有不同的含义。发出这个 SQL 应该可以解决问题。

    grant all on twitter.* to 'root'@'127.0.0.1' identified by 'mypwd';
    

    假设 Java 将“localhost”解析为 127.0.0.1,如果仍然无法正常工作,您可以尝试将连接字符串更改为“jdbc:mysql://127.0.0.1:3306/twitter”

    我应该在我的 context.xml 中有这个吗 还是普通密码?

    正如你现在所拥有的,明文密码。

    【讨论】:

    • 您好,谢谢您的回复。我玩弄了您提供的 GRANT ALL 语句。出于某种原因,唯一有效的就是当我;
    • 在 twitter 上全部授予。* TO ''@'localhost' IDENTIFIED BY 'mypwd';
    • 我已经删除了 root 用户,所以唯一的用户是 ''@'localhost' 并且它可以工作。虽然我很高兴它的工作,但仍然有问题,因为我在我的应用程序 context.xml 中指定用户是'root'所以我想知道为什么''会工作,实际上是我的错误消息获得之前总是拒绝访问''@'localhost'而不是'root'@'localhost'。你知道为什么会这样吗?
    • @Joe 您是否发现错误消息中未使用用户名的原因?我想尝试授权命令,但不想删除 root 用户或类似的东西..
    【解决方案2】:

    在 webapp 的配置 context.xml 中,您必须将 user="root" 更改为 username="root"

    【讨论】:

      【解决方案3】:

      在我的情况下(MySql v.5.7)由于通过 GRANT 命令创建用户而出现此错误:

      GRANT ALL PRIVILEGES ON *.* TO myuser@localhost IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
      

      改用 CREATE 命令,解决了上述错误:

      CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
      GRANT ALL PRIVILEGES ON *.* TO myuser@localhost WITH GRANT OPTION;
      

      希望对某人有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-01
        • 1970-01-01
        • 2018-05-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 2023-03-20
        • 2021-07-11
        相关资源
        最近更新 更多