用户 'root'@'localhost' 的访问被拒绝
Posted
技术标签:
【中文标题】用户 \'root\'@\'localhost\' 的访问被拒绝【英文标题】:Access denied for user 'root'@'localhost'用户 'root'@'localhost' 的访问被拒绝 【发布时间】:2013-07-28 07:30:00 【问题描述】:我正在尝试从数据库中获取记录。但我面临这个访问被拒绝的问题。我尝试了 Stack Overflow 上提到的其他解决方案,比如向用户授予权限......但没有一个奏效。
访问数据库的代码:
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)
在这种情况下可能是什么问题。我尝试创建一个新数据库,但也没有用。
【问题讨论】:
密码可能有误。 不,这不是..我使用相同的密码登录mysql 你能告诉我们你用来授予访问权限的命令吗? 你确定它使用的是 3306 端口吗? (是的,我知道这是默认端口号,但在我这里是 80 端口,因为我在 Apache 中使用它) 授予员工所有特权。* TO 'root'@'localhost' IDENTIFIED BY 'root' 【参考方案1】:在控制台启动mysql客户端并执行这个查询:select Host, User from mysql.user;
。你必须有这样的一行:
Host 中有“localhost”,User 中有“root”。如果你没有它,那是你的问题的原因(如果你在 User 中有其他带有“root”的行并不重要)
如果您没有这样的行,请添加一个新用户:
CREATE USER 'appUser'@'localhost' IDENTIFIED BY 'appPassword';
如果您愿意,可以将“appUser”更改为“root”,但我强烈建议使用其他用户。然后通过在 mysql 客户端中执行这个来为你的新用户添加权限:
GRANT ALL PRIVILEGES ON employees.* TO 'appUser'@'localhost';
(同样,如果需要,将 'appUser' 更改为 'root')
【讨论】:
我已经在 users 中有 root 用户...我创建了一个新用户,但是你提到的授予权限的命令给出了以下错误:错误 1064 (42000):你的 SQL 中有错误句法;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 'previliges on employees.* 到 'dbUser'@'localhost'' 附近使用 你有一个错字:“previliges”而不是“privileges” 命令运行成功..但仍然是同样的错误..我创建的新用户名为“dbUser”,但当我运行我的应用程序时,它给出了与拒绝访问相同的错误'root' 即使我在连接字符串中将名称更改为 dbUser【参考方案2】:问题出在information.schema
表中授予root 的权限。 'root'@'%' 没有任何权限.. 因为我使用127.0.0.1
作为我的连接地址,所以它给出了拒绝访问错误..%
是 IP 地址的通配符。所以mysql将root@127.0.0.1
视为任何其他IP地址,但不是localhost
。所以只是授予它权限解决了我的问题..尝试使用一些 Mysql 客户端,如SQLYog
等。授予权限很容易,也可以与用户一起查看权限。
【讨论】:
我遇到了同样的错误,即使在添加用户 'root'@'%' 后,授予它所有权限,同样的错误即将到来。 'root'@'localhost' 的访问被拒绝(使用密码(是)) 您是否尝试将 root@localhost 添加到 information.schema?【参考方案3】:试试看:
mysql --no-defaults --force --user=root --host=localhost --database=mysql
更改新密码:
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;
【讨论】:
感谢古斯塔沃。上面的查询帮助我刷新了 root 的权限。以上是关于用户 'root'@'localhost' 的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问
用户'root'@'localhost'的访问被拒绝(使用密码:YES)