2013-05-13 927 views
5

我想连接我的本地MYSQL数据库,它与XAMP服务器一起安装。我创建了一个新用户,即“NewUser”,密码是“password”。我将所有PRIVILEGES授予此用户。访问被拒绝用户'root'@'localhost'(使用密码:YES)

我使用用户“root”(该用户没有密码)编写与数据库连接的代码。 其连接。像波纹管..

return DriverManager.getConnection("jdbc:MySql://localhost/database_name","root",""); 

现在我写的代码由另一个用户即“NEWUSER”及其pasword“密码”

return DriverManager.getConnection("jdbc:MySql://localhost/database_name","NewUser","password"); 

,但它不是与连接相同的数据库进行连接。 在控制台中的错误是

java.sql.SQLException: Access denied for user 'NewUser'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925) 
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.GeneratedConstructorAccessor207.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317) 
    at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.createConnection(JDBCConnection.java:214) 
    at org.eclipse.datatools.connectivity.DriverConnectionBase.internalCreateConnection(DriverConnectionBase.java:105) 
    at org.eclipse.datatools.connectivity.DriverConnectionBase.open(DriverConnectionBase.java:54) 
    at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.open(JDBCConnection.java:73) 
    at org.eclipse.datatools.enablement.internal.mysql.connection.JDBCMySQLConnectionFactory.createConnection(JDBCMySQLConnectionFactory.java:28) 
    at org.eclipse.datatools.connectivity.internal.ConnectionFactoryProvider.createConnection(ConnectionFactoryProvider.java:83) 
    at org.eclipse.datatools.connectivity.internal.ConnectionProfile.createConnection(ConnectionProfile.java:359) 
    at org.eclipse.datatools.connectivity.ui.PingJob.createTestConnection(PingJob.java:76) 
    at org.eclipse.datatools.connectivity.ui.PingJob.run(PingJob.java:59) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) 

我给主机类型,同时提供特权给该用户,作为“任意主机的”,即,“%”。

如果我改变它为“本地主机”或“127.0.0.1”它的工作。

那么我如何使用我的数据库与“anyhost”特权给像“NewUser”这样的特定用户。

如果我在这里取得成功,然后我在连接到客户端实时数据的基础上成功..

感谢大家,请让我离开这一个.....

+0

你可以使用'mysql -u NewUser -h localhost -p'连接控制台吗? – Sal00m 2013-08-28 07:26:11

回答

0
  1. 您的网址是意思是全部小写 - `JDBC的:mysql://本地主机/数据库名称”
  2. 是您的数据库真的叫数据库名称
+0

他说,连接字符串适用于root用户,那么为什么应该为其他用户提供问题? – 2013-05-13 13:35:13

+0

雅,我给的数据库名称是“database_name”和URL是正确的。如果它错了,那么它在第一种情况下也会失败,但它不会.. – 2013-05-13 13:36:26

+2

用户是否已经[在mysql中创建](http://dev.mysql.com/doc/refman/5.1/en/create-user.html)并且所述用户[有权访问本地主机上的database_name](http://dev.mysql.com/doc/refman/5.1/en/grant.html)? – hd1 2013-05-13 13:39:09

0

请试试这个语法

return DriverManager.getConnection("jdbc:mysql://localhost/database_name?user=NewUser&password=your_password_here"); 

(只需更换密码的地方说:“your_password_here”)

编辑 - 第二次猜测: 它可能已通过阻断192.168.x.x范围防火墙自己。

我假设你运行的是windows。打开命令提示符,输入“ipconfig”按回车。看你的ipv4地址(应该是类似于192.168.1.x)

确保你的防病毒/防火墙程序允许从192.168.1.x(这是你自己)连接,然后尝试使用,而不是“%”或“localhost”

如果这样不起作用,请关闭所有的防火墙/防病毒软件,然后重试。

也可以尝试无论是重装特权:

  • 重启XAMPP
  • FLUSH PRIVILEGES;
+0

谢谢,但它仍然会产生相同的错误...“拒绝访问用户”@Sharky – 2013-05-13 13:53:27

1

由于第一个指定的代码工作,也基于报告的跟踪,我敢肯定问题是在数据库上,而不是代码语法。

基于MySQL的版本,请尝试以设置权限,而不指定基于Mysql documentation的任何主机(%)替代,

简单形式user_name是USER_NAME的同义词@“%”使用FLUSH PRIVILEGES;

只是为了确保一切正确后,立即

而且flush privileges的,也运行 SHOW GRANTS FOR NewUser;并检查NewUser是否出现在具有相应权限的列表中。

0

为了让用户能够访问您的数据库,您需要指定应允许其连接的主机。 但请注意:即使您使用通配符(%)作为主机名,用户也无法从本地主机连接。他们可以从任何主机连接,但不能从本地主机连接。 当从本地主机连接时,我假设你的mysql安装假设你是一个匿名用户。 为了允许用户从本地主机进行连接,您需要在主机字段中添加一个单独的具有“本地主机”的用户。

欲了解更多详情,请参阅账户MySQL documentation

两个具有蒙蒂的用户名和 密码some_pass。这两个帐户都是具有完全权限的超级用户帐户 可以做任何事情。只有当从本地主机连接 时,才能使用'monty'@'localhost'帐户。 'monty'@'%'帐户使用'%' 通配符作为主机部分,所以它可以用于从任何 主机连接。

有必要有双方的帐户monty能够连接从任何地方 monty。如果没有本地主机帐户, mysql_install_db创建的localhost的 匿名用户帐户优先于monty从 本地主机连接。因此,monty将被视为匿名用户。 原因是匿名用户帐户具有比'monty'@'%'帐户更多的 特定主机列值,因此在用户表排序顺序中更早地出现 。 (用户表排序在第6.2.4节,“访问控制,阶段1:连接核实”中讨论 。)

0

GO给用户/特权/编辑特权/ 改变密码,或选择没有密码 更新在休眠配置文件中输入密码并重新启动服务器。

相关问题