2013-07-28 197 views
1

我试图从数据库中提取记录。但我面临这个拒绝访问的问题。我尝试了堆栈溢出中提到的其他解决方案,如授予用户权限..但没有工作。访问被拒绝用户'root'@'localhost'

代码,用于访问数据库:错误的

public void service(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{ 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    out.println("<html>"); 
    out.println("<head><title>Servlet JDBC</title></head>"); 
    out.println("<body>"); 
    out.println("<h1>Servlet JDBC</h1>"); 
    out.println("</body></html>"); 
    // connecting to database 
    Connection con = null; 
    Statement stmt = null; 
    ResultSet rs = null; 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/employees","root","root"); 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery("SELECT * FROM employee"); 
     // displaying records 
     while(rs.next()){ 
     out.print(rs.getObject(1).toString()); 
     out.print("\t\t\t"); 
     out.print(rs.getObject(2).toString()); 
     out.print("<br>"); 
    } 
    } catch (SQLException e) { 
     throw new ServletException("Servlet Could not display records.", e); 
    } catch (ClassNotFoundException e) { 
     throw new ServletException("JDBC Driver not found.", e); 
    } finally { 
     try { 
      if(rs != null) { 
       rs.close(); 
       rs = null; 
      } 
      if(stmt != null) { 
       stmt.close(); 
       stmt = null; 
      } 
      if(con != null) { 
       con.close(); 
       con = null; 
      } 
     } catch (SQLException e) {} 
    } 
    out.close(); 
    } 

堆栈跟踪:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
    com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) 
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) 
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:927) 
    com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4686) 
    com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1304) 
    com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2483) 
    com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2516) 
    com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2301) 
    com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834) 
    com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    java.lang.reflect.Constructor.newInstance(Unknown Source) 
    com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416) 
    com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) 
    java.sql.DriverManager.getConnection(Unknown Source) 
    java.sql.DriverManager.getConnection(Unknown Source) 
    WebAppAss.DatabaseAccess.service(DatabaseAccess.java:36) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

什么能在这种情况下的问题。我试图创建一个新的数据库,但这并不起作用。

+0

密码可能是错误的。 –

+0

no it isnt ..我使用相同的密码在mysql中登录 –

+0

您能告诉我们您用来授予访问权限的命令吗? – Claudio

回答

1

的问题的权限授予根information.schema表。 'root'@'%'没有任何权限。而且,因为我使用的是127.0.0.1作为我的连接地址,所以它给出访问被拒绝的错误。%是ip地址的通配符。因此mysql将[email protected]视为任何其他ip地址,但不包括localhost。所以只是授予它的权限解决了我的问题..尝试使用一些像SQLYog等Mysql客户端。它很容易授予权限,并且也可以查看用户的权限。

+0

我有相同的错误,甚至在添加用户'root'@'%'后,授予它所有权限也会出现相同的错误。访问拒绝'root'@'localhost'(使用密码(是)) – kavita

+0

您尝试将root @ localhost添加到information.schema吗? –

3

在控制台中启动mysql客户端并执行此查询:select Host, User from mysql.user;。你必须有一排这样的:

 
+----------------+------------------+ 
| Host   | User    | 
+----------------+------------------+ 
| localhost  | root    | 
+----------------+------------------+ 

一排“本地主机”,在主机和“根”在用户。如果你没有,那是你的问题的原因(用户

如果你没有这样的行,添加一个新用户与此:

CREATE USER 'appUser'@'localhost' IDENTIFIED BY 'appPassword'; 

改变“APPUSER”的“根”,如果你想要的,但我强烈建议使用其他用户。然后,通过在MySQL客户端执行此权限添加到您的新用户:

GRANT ALL PRIVILEGES ON employees.* TO 'appUser'@'localhost'; 

(再次,变“APPUSER”的“根”,如果你想)

+0

我已经在用户的根用户...我创建了一个新用户,但是您提到的授予权限的命令给出了以下错误: 错误1064(42000):您在SQL语法中有错误;请检查与您的MySQL服务器版本相对应的手册,以便在'previliges on employees。* 到'dbUser'@'localhost''在第1行附近使用正确的语法。 –

+0

您有一个错字:“previliges”而不是“privileges” – morgano

+0

该命令运行成功..但仍然是相同的错误..我创建的新用户名为'dbUser',但仍然当我运行我的应用程序时,它给出同样的错误,即使当我改变时,拒绝访问'root'的访问连接字符串中的dbUser的名称 –

1

试试:

mysql --no-defaults --force --user=root --host=localhost --database=mysql 

更改新密码:

UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root'; 
FLUSH PRIVILEGES; 
+0

谢谢古斯塔沃。上述查询帮助我刷新根的权限。 – ankit

相关问题