2013-05-13 523 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給用戶/特權/編輯特權/ 改變密碼,或選擇沒有密碼 更新在休眠配置文件中輸入密碼並重新啓動服務器。

相關問題