2015-07-01 27 views
10

Tôi mới sử dụng PHP và CakePHP. Tìm kiếm sự cố khi kết nối cơ sở dữ liệu của tôi bằng CakePhp.SQLSTATE [HY000] [1045] Truy cập bị từ chối đối với tên người dùng 'tên người dùng' @ 'localhost' bằng CakePhp

Dưới đây là cấu hình ứng dụng của tôi. Tôi đang trên BitNami wamp ngăn xếp 5.4.40-0 Tôi đang sử dụng CakePHP 3.0.4 để tạo ra một trang web ứng dụng MVC

Entry for datasources trong tập tin app.php My

/** 
* Connection information used by the ORM to connect 
* to your application's datastores. 
* Drivers include Mysql Postgres Sqlite Sqlserver 
* See vendor\cakephp\cakephp\src\Database\Driver for complete list 
*/ 
'Datasources' => [ 
    'default' => [ 
     'className' => 'Cake\Database\Connection', 
     'driver' => 'Cake\Database\Driver\Mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     /** 
     * CakePHP will use the default DB port based on the driver selected 
     * MySQL on MAMP uses port 8889, MAMP users will want to uncomment 
     * the following line and set the port accordingly 
     */ 
     //'port' => 'nonstandard_port_number', 
     'username' => 'test2', 
     'password' => 'computer', 
     'database' => 'jobs', 
     'encoding' => 'utf8', 
     'timezone' => 'UTC', 
     'cacheMetadata' => true, 

     /** 
     * Set identifier quoting to true if you are using reserved words or 
     * special characters in your table or column names. Enabling this 
     * setting will result in queries built using the Query Builder having 
     * identifiers quoted when creating SQL. It should be noted that this 
     * decreases performance because each query needs to be traversed and 
     * manipulated before being executed. 
     */ 
     'quoteIdentifiers' => false, 

     /** 
     * During development, if using MySQL < 5.6, uncommenting the 
     * following line could boost the speed at which schema metadata is 
     * fetched from the database. It can also be set directly with the 
     * mysql configuration directive 'innodb_stats_on_metadata = 0' 
     * which is the recommended value in production environments 
     */ 
     //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'], 
    ], 

Tôi đã tạo một bảng cơ sở dữ liệu được gọi là các công việc theo các quy ước của CakePhp. Người dùng test2 có các đặc quyền chung giống như quản trị viên gốc.

Nhưng khi tôi chạy lệnh nướng tất cả. Tôi nhận được lỗi sau

2015-07-01 06:24:56 Error: [PDOException] SQLSTATE[HY000] [1045] Access denied for user 'test2'@'localhost' (using password: YES) 
Stack Trace: 
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\PDODriverTrait.php(48): PDO->__construct('mysql:host=127....', 'test2', 'computer', Array) 
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\Mysql.php(89): Cake\Database\Driver\Mysql->_connect('mysql:host=127....', Array) 
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Schema\BaseSchema.php(46): Cake\Database\Driver\Mysql->connect() 

vấn đề giải quyết (UPDATE)

Tôi đi theo Ankit và hướng Spencer.

Tôi gặp một số vấn đề.

  1. Máy chủ của người dùng của tôi không phải là máy chủ cục bộ, đó là ký tự đại diện%. Thay đổi điều đó, sau đó mysql bắt đầu từ chối kết nối.

  2. Tôi đã tắt tường lửa và thấy rằng cổng khác với 3306. Vì vậy, đã thay đổi mục nhập trong app.php. Bây giờ ứng dụng của tôi được nướng :)

+0

'Truy cập bị từ chối cho người dùng 'test2' @ 'localhost' (sử dụng mật khẩu: YES)' khá rõ ràng. _Does_ người dùng test2 có quyền truy cập không? I E. hiện công việc này: 'mysql -utest2 -pcomputer jobs'? – AD7six

+0

lạ, thay đổi '%' thành 'localhost' thực sự làm việc cho tôi ... Ngoài ra nó có thể tạo một người dùng khác - xóa một người dùng với máy chủ'% ' –

+0

Khởi động lại MySQL sau những thay đổi đó là đóng băng trên bánh. – dakab

Trả lời

16

Đó thông báo lỗi thường có nghĩa là một trong hai mật khẩu mà bạn đang sử dụng không phù hợp với những gì MySQL nghĩ mật khẩu phải dành cho người dùng bạn đang kết nối, hoặc người dùng MySQL phù hợp không tồn tại (chưa được tạo).

Trong MySQL, người dùng được xác định bởi cả tên người dùng (test2) và máy chủ lưu trữ (localhost).

Thông báo lỗi bạn đang nhận dạng các giá trị user (test2) và host (localhost) ...

'test2'@'localhost' 

Kiểm tra xem liệu người dùng mà tồn tại, sử dụng truy vấn này từ một khách hàng mà bạn có thể kết nối từ:

SELECT user, host FROM mysql.user 

Bạn đang tìm kiếm một hàng có test2 cho người dùng, và localhost cho máy chủ .

user  host  
------- ----------- 
test2  127.0.0.1 
test2  ::1   
test2  localhost 

Nếu hàng đó không tồn tại, sau đó chủ nhà có thể được thiết lập để giá trị ký tự đại diện của %, để phù hợp với bất kỳ máy chủ khác mà không phải là một trận đấu.

Nếu hàng tồn tại thì mật khẩu có thể không khớp. Bạn có thể thay đổi mật khẩu (nếu bạn đã kết nối như một người dùng có đủ đặc quyền, ví dụ như root

SET PASSWORD FOR 'test2'@'localhost' = PASSWORD('mysecretcleartextpassword') 

Cũng xác minh rằng người dùng có đặc quyền trên các đối tượng trong cơ sở dữ liệu.

GRANT SELECT ON jobs.* TO 'test2'@'localhost' 
+0

cảm ơn một tấn Spencer ... thực sự máy chủ của người dùng của tôi là một giá trị ký tự đại diện, thay đổi điều đó ... và cũng là cổng khác với 3306 .. bây giờ nướng của tôi về cơ sở dữ liệu là sucessfull :) – saurav

5

Kiểm tra sau điều

  • Chắc chắn làm bạn MySQL Server Chạy
  • Kiểm tra kết nối với các thông tin mặc định tức là username: 'root' & mật khẩu: '' [ Mật khẩu trống]
  • Hãy thử đăng nhập phpmyadmin bằng cùng thông tin đăng nhập
  • Cố gắng đặt 127.0.0.1 thay vì localhost hoặc IP lan của bạn cũng sẽ làm.
  • Hãy chắc chắn rằng bạn đang chạy MySql trên 3306 và nếu bạn đã cấu hình đảm bảo nêu nó trong khi thực hiện kết nối
+1

Tôi thay đổi 'localhost' thành '127.0.0.1' và khắc phục sự cố. –

2

Nếu bạn sử dụng MAMP, bạn có thể phải đặt ổ cắm: unix_socket: /Applications/MAMP/tmp/mysql/mysql.sock

0

Tôi muốn thêm vào các câu trả lời được đăng ở trên mà không có giải pháp nào được đề xuất ở đây làm việc cho tôi. WAMP của tôi, đang hoạt động trên cổng 3308 ins tead của 3306 là những gì nó được cài đặt theo mặc định. Tôi phát hiện ra rằng khi làm việc trong môi trường cục bộ, nếu bạn đang sử dụng mysqladmin trong máy tính của bạn (đối với môi trường thử nghiệm), và nếu bạn đang làm việc với cổng khác với 3306, bạn phải xác định biến DB_SERVER của mình với giá trị localhost: NumberOfThePort, do đó, nó sẽ trông giống như sau: xác định ("DB_SERVER", "localhost: 3308"). Bạn có thể có được giá trị này bằng cách kích chuột phải vào biểu tượng WAMP trong thanh tác vụ của bạn (trên phần biểu tượng ẩn) và chọn Tools. Bạn sẽ thấy phần: "Cổng được sử dụng bởi MySQL: NumberOfThePort"

Điều này sẽ khắc phục kết nối của bạn với cơ sở dữ liệu của bạn.

Đây là lỗi tôi nhận: Lỗi: SQLSTATE [HY1045] Truy cập bị từ chối cho người dùng 'username' @ 'localhost' trên dòng X.

Tôi hy vọng điều này sẽ giúp bạn ra ngoài.

:)

Các vấn đề liên quan