2013-05-13 18 views
5

Chciałbym połączyć się z moją lokalną bazą danych MYSQL, która jest instalowana wraz z serwerem XAMP. Stworzyłem nowego Użytkownika tj. "NewUser", a jego hasło to "hasło". Dałem wszystkim ZASTRZEŻENIA temu użytkownikowi.Odmowa dostępu dla użytkownika root '@' localhost '(przy użyciu hasła: TAK)

Piszę kod, aby połączyć się z bazą danych za pomocą użytkownika "root" (brak hasła dla tego użytkownika). Jest połączony. Jak poniżej ..

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

Teraz Napisałem kod, aby połączyć się z tej samej bazy danych przez innego użytkownika IE „newuser” i jego pasword „hasło”

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

ale nie jest podłączony. Błąd w konsoli jest

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) 

daję typ hosta, zapewniając jednocześnie uprawnienia do tego użytkownika, jak „każdy gospodarz” tj. „%”.

Jeśli zmienię to na "localhost" lub "127.0.0.1" jego działanie.

Więc w jaki sposób mogę używać mojej bazy danych z "Dowolnymi" przywilejami dla konkretnego użytkownika, takiego jak "NewUser".

Jeśli mam powodzenie tutaj potem sukcesy w połączeniu z klientem bazy danych na żywo ..

Dzięki dla wszystkich i proszę dać mi z tym jednym .....

+0

Czy można połączyć się z konsoli za pomocą 'mysql -u NewUser -h localhost -p'? – Sal00m

Odpowiedz

0
  1. adres URL jest miało być pisane małymi literami - `jdbc: mysql: // localhost/nazwa_bazy_danych”
  2. Czy baza naprawdę nazywa database_name
+0

mówi, że ciąg połączenia działa dla roota, więc dlaczego problem powinien być tam dla innego użytkownika? –

+0

ya ,, nazwa bazy danych podana jest "database_name", a adres URL jest poprawny. Jeśli jest błędny, to również nie działa w pierwszym przypadku, ale nie jest .. –

+2

Czy użytkownik został [stworzony w mysql] (http://dev.mysql.com/doc/refman/5.1/en/create-user.html) i czy wspomniany użytkownik [ma uprawnienia dostępu do database_name na localhost] (http://dev.mysql.com/doc/refman/5.1/en/grant.html)? – hd1

0

spróbuj tej składni

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

(wystarczy zastąpić hasła, gdzie mówi "your_password_here")

EDIT - ingerowanie: jego ewentualnego masz zaporę siebie blokując 192.168.x.x zakres.

Zakładam, że korzystasz z systemu Windows. otwórz wiersz polecenia, wpisz "ipconfig" naciśnij enter. zobacz swój adres ipv4 (powinien być czymś w rodzaju 192.168.1.x)

Upewnij się, że program antywirusowy/zapora sieciowa zezwala na połączenie z 192.168.1.x (która jest Twoją osobą), a następnie spróbuj użyć tego zamiast "%" lub "localhost"

Jeśli to nie działa, zamknij wszystkie zapory/programy antywirusowe i spróbuj ponownie.

Spróbuj także przeładunek przywilejów albo przez:

  • wznowienie XAMPP
  • FLUSH PRZYWILEJE;
+0

Dzięki, ale nadal generuje ten sam błąd ... "Odmowa dostępu dla użytkownika" @ Sharky –

1

Ponieważ pierwszy określony kod działa, a także na podstawie zgłoszonego śledzenia, jestem prawie pewien, że problem dotyczy bazy danych, a nie składni kodu.

podstawie wersji MySQL, spróbuj jako alternatywa ustawić prawa bez podania żadnego hosta (%) w oparciu o Mysql documentation,

Prosta forma nazwa_użytkownika jest synonimem nazwa_użytkownika @ „%”

również przemywać przywileje natychmiast po użyciu FLUSH PRIVILEGES;

Wystarczy, aby upewnić się, wszystko jest w porządku, również uruchomić SHOW GRANTS FOR NewUser; i sprawdź, czy NewUser pojawi się na liście z odpowiednimi uprawnieniami.

0

Aby zapewnić użytkownikom dostęp do bazy danych, należy określić host, z którego powinni mieć dostęp. Należy jednak zachować ostrożność: nawet jeśli jako nazwę hosta zostanie użyta wieloznacznik (%), użytkownik nie będzie mógł połączyć się z lokalnym hostem. Mogą łączyć się z dowolnego hosta, ale nie z localhost. Podczas łączenia się z localhost, zakładam, że twoja instalacja mysql zakłada, że ​​jesteś anonimowym użytkownikiem. Aby umożliwić użytkownikowi połączenie z localhost, musisz dodać oddzielnego użytkownika z "localhost" w polu hosta.

Aby uzyskać więcej informacji, proszę odnieść się do MySQL documentation

Dwa rachunków mają nazwę użytkownika i hasło monty z some_pass. Oba konta są kontami superużytkowników z pełnymi uprawnieniami, aby móc cokolwiek zrobić. Konto 'monty' @ 'localhost' może być używane tylko wtedy, gdy łączy się z lokalnym hostem. Konto "monty" @ '% używa symbolu wieloznacznego'% ' dla części hosta, więc można go użyć do połączenia z dowolnego hosta .

Konieczne jest posiadanie obu kont dla monty, aby móc połączyć z dowolnego miejsca jako monty. Bez konta localhost, anonimowe konto użytkownika dla localhost, utworzone przez , mysql_install_db, będzie miało pierwszeństwo, gdy Monty łączy się z lokalnym hostem o nazwie monty . W rezultacie monty będą traktowane jako anonimowi użytkownicy. Powodem tego jest to, że konto anonimowego użytkownika ma większą wartość kolumny Hosta o wartości niż konto "monty" @ '% i tym samym występuje w kolejności uporządkowania tabeli użytkownika. (Tabela użytkownik sortowania jest omówione w rozdziale 6.2.4 „Access Control, Etap 1: Weryfikacja Connection”.)

0

GO do użytkowników/przywileje/edit przywilejów/ zmiana hasła lub nie wybrać hasło zaktualizować hasło w pliku konfiguracyjnym hibernacji i zrestartuj serwer.

Powiązane problemy