2013-05-13 23 views
5

Tôi muốn kết nối với cơ sở dữ liệu MYSQL cục bộ của mình, được cài đặt cùng với máy chủ XAMP. Tôi đã tạo một User mới, "NewUser" và mật khẩu của nó là "password". Tôi đã cung cấp tất cả các đặc quyền cho người dùng này.Truy cập bị từ chối đối với User 'root' @ 'localhost' (sử dụng mật khẩu: YES)

Tôi viết mã để kết nối với cơ sở dữ liệu bằng cách sử dụng người dùng "root" (Không có mật khẩu cho người dùng này). Kết nối của nó. Giống như dưới đây ..

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

Bây giờ tôi đã viết code để kết nối với cơ sở dữ liệu giống nhau bởi một người dùng khác ví dụ, "newuser" và pasword "password" của nó

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

nhưng nó không được kết nối. Các lỗi trong giao diện điều khiển là

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) 

tôi cung cấp cho các loại máy chủ trong khi cung cấp đặc quyền cho thành viên này, như "bất kỳ máy chủ" tức là. "%".

Nếu tôi thay đổi điều này thành "localhost" hoặc "127.0.0.1" hoạt động của nó.

Vậy làm cách nào tôi có thể sử dụng cơ sở dữ liệu của mình với các đặc quyền "anyhost" cho người dùng cụ thể như "Người dùng mới".

Nếu tôi đã thành công ở đây thì tôi thành công trong mối liên hệ với khách hàng cơ sở dữ liệu trực tiếp ..

Nhờ tất cả và xin vui lòng cho tôi ra khỏi cái này .....

+0

Bạn có thể kết nối từ bảng điều khiển bằng 'mysql -u NewUser -h localhost -p' không? – Sal00m

Trả lời

0
  1. URL của bạn là có nghĩa là tất cả chữ thường - `jdbc: mysql: // localhost/database_name"
  2. là cơ sở dữ liệu của bạn thực sự gọi là database_name
+0

anh ta nói chuỗi kết nối hoạt động với root nên tại sao vấn đề lại ở trong đó cho người dùng khác? –

+0

ya ,, tên cơ sở dữ liệu tôi đưa ra là "database_name" và url là chính xác. Nếu nó sai thì nó cũng thất bại trong trường hợp đầu tiên nhưng không phải của nó .. –

+2

Người dùng đã được [tạo trong mysql] (http://dev.mysql.com/doc/refman/5.1/en/create-user.html) và cho biết người dùng [có quyền truy cập vào database_name trên localhost] (http://dev.mysql.com/doc/refman/5.1/en/grant.html)? – hd1

0

Vui lòng thử cú pháp này

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

(chỉ cần thay thế mật khẩu của bạn, nơi nó nói "your_password_here")

EDIT - THỨ HAI GUESS: của nó có thể bạn đã tường lửa cho mình bằng cách ngăn chặn 192.168.x.x phạm vi.

tôi cho rằng bạn đang chạy các cửa sổ. mở dấu nhắc lệnh, gõ "ipconfig" nhấn enter. xem địa chỉ ipv4 của bạn (phải giống như 192.168.1.x)

Đảm bảo chương trình chống vi-rút/tường lửa của bạn cho phép kết nối từ 192.168.1.x (chính bạn) và sau đó thử sử dụng thay vì "%" hoặc "localhost"

Nếu cách này không hiệu quả, hãy đóng tất cả tường lửa/chống vi-rút của bạn và thử lại.

Cũng thử tải lại đặc quyền bằng cách:

  • khởi động lại xampp
  • FLUSH PRIVILEGES;
+0

Cảm ơn, nhưng nó vẫn tạo ra cùng một lỗi ... như "Truy cập bị từ chối cho người dùng" @ Sharky –

1

Vì mã được chỉ định đầu tiên hoạt động và cũng dựa trên theo dõi được báo cáo, tôi khá chắc chắn vấn đề nằm trong cơ sở dữ liệu chứ không phải cú pháp mã.

Dựa trên phiên bản Mysql, hãy thử như một thay thế cho thiết lập đặc quyền mà không chỉ định các máy chủ bất kỳ (%) như dựa trên Mysql documentation,

Dạng user_name đơn giản là một từ đồng nghĩa với user_name @ '%'

đặc quyền cũng tuôn ra ngay lập tức sau khi sử dụng FLUSH PRIVILEGES;

Chỉ cần chắc chắn rằng tất cả mọi thứ là chính xác, cũng chạy một SHOW GRANTS FOR NewUser; và kiểm tra xem NewUser có xuất hiện trong danh sách với các quyền tương ứng hay không.

0

Để cung cấp cho người dùng quyền truy cập vào cơ sở dữ liệu của bạn, bạn cần chỉ định máy chủ lưu trữ nơi họ được phép kết nối. Nhưng hãy cẩn thận: Ngay cả khi bạn sử dụng ký tự đại diện (%) làm tên máy chủ, người dùng không thể kết nối từ máy chủ cục bộ. Chúng có thể kết nối từ bất kỳ máy chủ nào, nhưng không thể kết nối từ máy chủ cục bộ. Khi kết nối từ localhost, tôi cho rằng cài đặt mysql của bạn giả định bạn là người dùng ẩn danh. Để cho phép người dùng kết nối từ máy chủ cục bộ, bạn cần thêm người dùng riêng biệt với "localhost" trong trường máy chủ.

Để biết thêm chi tiết, vui lòng tham khảo MySQL documentation

Hai trong số các tài khoản có tên người dùng của Monty và mật khẩu của some_pass. Cả hai tài khoản là tài khoản superuser với đầy đủ các đặc quyền để làm bất kỳ điều gì. Tài khoản 'monty' @ 'localhost' chỉ có thể được sử dụng khi kết nối từ máy chủ cục bộ. Tài khoản 'monty' @ '%' sử dụng ký tự đại diện '%' cho phần máy chủ, vì vậy nó có thể được sử dụng để kết nối từ bất kỳ máy chủ nào.

Cần phải có cả hai tài khoản cho monty để có thể kết nối từ bất kỳ đâu dưới dạng monty. Nếu không có tài khoản localhost, tài khoản người dùng ẩn danh cho máy chủ cục bộ được tạo bởi mysql_install_db sẽ được ưu tiên khi monty kết nối từ máy chủ cục bộ . Kết quả là, monty sẽ được coi là người dùng ẩn danh. Lý do cho điều này là tài khoản người dùng ẩn danh có giá trị cột Máy chủ lưu trữ cụ thể hơn so với tài khoản 'monty' @ '%' và do đó đến trước đó trong thứ tự sắp xếp bảng của người dùng. (Bảng người dùng phân loại được thảo luận tại Mục 6.2.4, “Access Control, Giai đoạn 1: Kết nối xác minh”.)

0

GO cho người sử dụng/quyền/quyền chỉnh sửa/ thay đổi mật khẩu hoặc chọn không có mật khẩu cập nhật mật khẩu trong tệp cấu hình ngủ đông và khởi động lại máy chủ.