2012-09-15 4 views
5

지난 몇 시간 동안이 벽에 부딪 혔던 것처럼 내 머리가 피가 듭니다. :mysql 커맨드 라인이 작동 할 때 PHP PDO가 "SQLSTATE [42000] [1044] Access denied for user"를 얻는 이유는 무엇입니까?

제목에서 알 수 있듯이 데이터베이스 서버의 mysql 명령 프롬프트에서 이라는 데이터베이스에 액세스 할 수있는 MySQL 사용자를 만들었지 만, 새 PDO 개체를 인스턴스화하여 같은 사용자와 데이터베이스, 내가 얻을 :

여기
SQLSTATE[42000] [1044] Access denied for user 'bob'@'localhost' to database 'my_database' 

내가 사용자 생성 방법은 다음과 같습니다!

GRANT SELECT, DELETE, EXECUTE, INSERT, UPDATE ON my_database.* TO 'bob'@'localhost' IDENTIFIED BY 'some_password'; 

누군가가 나에게 뼈를 던져주십시오! 여기 문제가 될 수 무엇을 (참고로, 문제를 내가 만들려고하면 새로운 PDO 객체 ... PDOException을 잡아서 메시지입니다.

나는 부여 후 FLUSH PRIVILEGES를했고, 여기 SHOW 보조금의 출력입니다 : 여기

mysql> SHOW GRANTS FOR 'bob'@'localhost'; 
+------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                     | 
+------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'bob'@'localhost' IDENTIFIED BY PASSWORD '.........................................' | 
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `my_database`.* TO 'bob'@'localhost'      | 
+------------------------------------------------------------------------------------------------------------+ 

user와 db이 사용자에 대해 어떻게 표시되는지를 보여줍니다 :

이 경우
mysql> SELECT * FROM db WHERE User = 'bob'\G; 
*************************** 1. row *************************** 
       Host: localhost 
        Db: my_database 
       User: bob 
      Select_priv: Y 
      Insert_priv: Y 
      Update_priv: Y 
      Delete_priv: Y 
      Create_priv: N 
      Drop_priv: N 
      Grant_priv: N 
     References_priv: N 
      Index_priv: N 
      Alter_priv: N 
Create_tmp_table_priv: N 
    Lock_tables_priv: N 
    Create_view_priv: N 
     Show_view_priv: N 
    Create_routine_priv: N 
    Alter_routine_priv: N 
     Execute_priv: Y 
      Event_priv: N 
     Trigger_priv: N 

이 중요 , 이것은 Ubuntu 12.04 LTS에서 실행되는 4 노드 MySQL 클러스터입니다.

편집 : Zend AMF를 사용하여 서버에 액세스하려고 할 때만 문제가 발생한다는 것을 발견했습니다. PDO가 Zend AMF와 함께 작동하지 않는 아이디어가 있습니까? 내 젠드 AMF 설정에서 뭔가를 놓친 적이 있습니까?

+4

같은 큰 따옴표이

$pass = 'randomchars$morerandom'; 

하지만 같은 작은 따옴표를 사용하여 설정 파일에 당신에게 비밀을 유지해야합니다 당신을 했습니까 'GRANT '를 실행 한 후'FLUSH PRIVILEGES'를 실행 하시겠습니까? –

+0

질문을 편집하여 자세한 정보를 추가하십시오. 주석의 코드를 읽을 수 없습니다. –

+0

아마도'GRANT'는 서버의 권한 캐시를 직접 업데이트하기 때문에'FLUSH PRIVILEGES'는 필요하지 않습니다. mysql. * 테이블을 직접 수정하는 경우에만 필요하다. – lanzz

답변

5

대신 'bob'@'127.0.0.1'을 사용해보세요. PHP가 127.0.0.1을 통해 액세스하는 경우 로컬 DNS 확인이 수행되지 않으므로 'localhost'로 언급되지 않으며 MySQL은 액세스를 거부합니다.

3

미래의 Google 직원을 위해 지금 당장 같은 문제가 있었으며 암호가 맞았다 고 확신했습니다. 예 비밀번호는 맞았지만 문제는 비밀번호를 생성하는 방법과 비밀번호를 설정 파일에 보관하는 방법입니다.

나 같은 임의의 암호 생성기를 사용하는 경우 암호에 $ 달러 기호가 없는지 확인하십시오.

당신이 암호를 $이있는 경우 다음이

$pass = "randomchars$morerandom";