[mysql] MySQL 오류 1045 (28000) : 사용자 ‘bill’@ ‘localhost’에 대한 액세스가 거부되었습니다 (암호 사용 : 예).

먼저 많은 제안 된 질문을 겪었고 관련 답변을 찾지 못했다고 언급하겠습니다. 여기 내가하고있는 일이 있습니다.

Amazon EC2 인스턴스에 연결되어 있습니다. 이 명령으로 MySQL 루트로 로그인 할 수 있습니다.

mysql -u root -p

그런 다음 호스트 %로 새 사용자 청구서를 작성했습니다.

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

사용자 청구서에 대한 모든 권한을 부여했습니다.

grant all privileges on *.* to 'bill'@'%' with grant option;

그런 다음 루트 사용자를 종료하고 bill로 로그인을 시도하십시오.

mysql -u bill -p

올바른 비밀번호를 입력하고 다음 오류가 발생했습니다.

오류 1045 (28000) : 사용자 ‘bill’@ ‘localhost’에 대한 액세스가 거부되었습니다 (암호 사용 : 예).



답변

당신은 아마 익명의 사용자 ''@'localhost'또는 ''@'127.0.0.1'입니다.

에 따라 수동 :

일치하는 항목이 여러 개인 경우 서버는 사용할 항목을 결정해야합니다. 이 문제는 다음과 같이 해결됩니다. (…)

  • 클라이언트가 연결을 시도하면 서버는 [mysql.user 테이블의] 행 을 정렬 된 순서대로 찾습니다 .
  • 서버는 클라이언트 호스트 이름 및 사용자 이름과 일치하는 첫 번째 행을 사용합니다.

(…) 서버는 가장 특정한 호스트 값을 가진 행을 먼저 정렬하는 정렬 규칙을 사용합니다 . 리터럴 호스트 이름 (예 : ‘localhost’) 및 IP 주소가 가장 구체적입니다.

따라서 이러한 익명 사용자는 '[any_username]'@'%'에서 연결할 때 와 같은 다른 사용자를 “마스크”합니다 localhost.

'bill'@'localhost'일치 'bill'@'%'하지만 ''@'localhost'사전에 (예) 일치 합니다.

권장되는 해결책은이 익명 사용자를 삭제하는 것입니다 (일반적으로 어쨌든하는 것이 좋습니다).


아래 편집 내용은 주로 주요 질문과 관련이 없습니다. 이것들은이 글에서 다른 의견으로 제기 된 일부 질문에 대한 답변입니다.

편집 1

'bill'@'%'소켓 을 통한 인증 .

    root @ myhost : /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock
    MySQL 모니터에 오신 것을 환영합니다 (...)

    mysql> 사용자 선택, 호스트 FROM mysql.user;
    + ------ + ----------- +
    | 사용자 | 호스트 |
    + ------ + ----------- +
    | 청구서 | % |
    | 뿌리 | 127.0.0.1 |
    | 뿌리 | :: 1 |
    | 뿌리 | localhost |
    + ------ + ----------- +
    4 행 세트 (0.00 초)

    mysql> SELECT USER (), CURRENT_USER ();
    + ---------------- + ---------------- +
    | USER () | CURRENT_USER () |
    + ---------------- + ---------------- +
    | bill @ localhost | bill @ % |
    + ---------------- + ---------------- +
    1 행 세트 (0.02 초)

    mysql> 'skip_networking'과 같은 변수 표시;
    + ----------------- + ------- +
    | Variable_name | 가치 |
    + ----------------- + ------- +
    | skip_networking | ON |
    + ----------------- + ------- +
    1 행 세트 (0.00 초)

편집 2

네트워킹을 다시 활성화하고 익명 사용자를 만드는 것을 제외하고는 정확히 동일한 설정 ''@'localhost'입니다.

    root @ myhost : /home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    MySQL 모니터에 오신 것을 환영합니다 (...)

    mysql> 사용자 생성 ''@ 'localhost' 'anotherpass'에 의해 식별 됨;
    쿼리 OK, 영향을받는 0 개의 행 (0.00 초)

    mysql> 안녕

    root @ myhost : /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket = / tmp / mysql-5.5.sock
    오류 1045 (28000) : 사용자 'bill'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : 예).
    root @ myhost : /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol = TCP
    오류 1045 (28000) : 사용자 'bill'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : 예).
    root @ myhost : /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol = TCP
    오류 1045 (28000) : 사용자 'bill'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : 예).

편집 3

익명 사용자의 비밀번호를 제공하는 편집 2와 동일한 상황.

    root @ myhost : /home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    MySQL 모니터에 오신 것을 환영합니다 (...)

    mysql> SELECT USER (), CURRENT_USER ();
    + ---------------- + ---------------- +
    | USER () | CURRENT_USER () |
    + ---------------- + ---------------- +
    | bill @ localhost | @localhost |
    + ---------------- + ---------------- +
    1 행 세트 (0.01 초)

결론 1, 편집 1 : 'bill'@'%'소켓 을 통해 인증 할 수 있습니다 .

결론 2, 편집 2 : TCP 또는 소켓을 통한 연결 여부는 인증 프로세스에 영향을 미치지 않습니다 (다른 사람이 아닌 'something'@'localhost'소켓을 통해 연결할 수는 없음 ).

결론 3, 편집 3 : 3을 지정했지만 -ubill익명 사용자로 액세스 권한이 부여되었습니다. 이것은 위에서 언급 한 “정렬 규칙”때문입니다. 대부분의 기본 설치 에는 암호가없는 익명 사용자가 존재 하며 보안 / 제거되어야합니다.


답변

시험:

~$ mysql -u root -p
Enter Password:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;


답변

당신이 달렸을 때

mysql -u bill -p

이 오류가 발생했습니다

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

mysqld는 다음과 같이 연결할 것을 기대하고 있습니다. bill@localhost

만들어보십시오 bill@localhost

CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;

원격으로 연결하려면 TCP / IP를 사용하여 DNS 이름, 퍼블릭 IP 또는 127.0.0.1을 지정해야합니다.

mysql -u bill -p -hmydb@mydomain.com
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

로그인하면 이걸 실행하십시오

SELECT USER(),CURRENT_USER();

USER () 는 MySQL에서 인증을 시도한 방법을보고합니다

CURRENT_USER ()mysql.user 테이블 에서 MySQL 인증 방법을보고 합니다.

이렇게하면 mysql에 로그인 할 수있는 방법과 이유를 더 잘 볼 수 있습니다. 이 견해를 알아야하는 이유는 무엇입니까? 그것은 사용자 인증 순서 프로토콜과 관련이 있습니다.

다음은 예입니다 : 데스크탑 MySQL에서 익명 사용자를 생성합니다

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)

mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| lwdba   | %         |
| mywife  | %         |
| x       | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
|         | %         |
| lwdba   | %         |
| mywife  | %         |
| lwdba   | 127.0.0.1 |
| root    | 127.0.0.1 |
| lwdba   | localhost |
| root    | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)

mysql>

확인 익명 사용자로 로그인하십시오.

C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user(),current_user();
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| rol@localhost | @%             |
+---------------+----------------+
1 row in set (0.00 sec)

mysql>

인증 순서는 매우 엄격합니다. 가장 구체적인 것부터 가장 적은 것까지 확인합니다. DBA StackExchange에서이 인증 스타일에 대해 썼습니다 .

필요할 때 mysql 클라이언트의 프로토콜로 TCP를 명시 적으로 호출하는 것을 잊지 마십시오.


답변

이것에 늦게 슈퍼

나는 다른 모든 답변을 시도하고 많은 다른 버전을 mysql -u root -p실행했지만 결코 실행하지 않았습니다.


mysql -u root -p

그리고 [ENTER]비밀번호를 누르기 만하면 됩니다.


일단 그렇게하면 효과가있었습니다. 이것이 누군가를 돕기를 바랍니다.


답변

내 경우의 관련 문제는 다음을 사용하여 연결하려고했습니다.

mysql -u mike -p mypass

공백 은 -u # uname # 사이에 허용되지만 -p와 # password # 사이에는 허용 되지 않습니다 .

따라서 다음이 필요합니다.

mysql -u mike -pmypass

그렇지 않으면 -p mypass 사이에 공백이있는 경우 mysql은 ‘mypass’를 db 이름으로 사용합니다.


답변

를 입력 mysql -u root -p하면 로컬 유닉스 소켓을 통해 mysql 서버에 연결됩니다.

그러나 부여한 권한은 'bill'@'%'TCP / IP 연결과 흥미롭게 일치합니다.

로컬 유닉스 소켓에 대한 액세스 권한을 부여하려면 ‘bill’@ ‘localhost’에 권한을 부여해야합니다. 흥미롭게도 ‘bill’@’127.0.0.1’과 동일하지 않습니다.

실행 mysql -u root -p -h 192.168.1.123또는 상자의 로컬 IP 주소 와 같이 이미 부여 된 권한과 일치하도록 mysql 명령 줄 클라이언트와 함께 TCP / IP를 사용하여 연결할 수도 있습니다.


답변

비밀번호를 잊어 버렸거나 비밀번호를 수정하려는 경우 다음 단계를 수행하십시오.

1 : 당신의 MySQL을 중지

[root @ maomao ~] # service mysqld stop
MySQL 중지 : [OK]

2 :“-skip-grant-tables”를 사용하여 mysql을 재시작하십시오

[root @ mcy400 ~] # mysqld_safe –skip-grant-tables
[root @ cy400 ~] # / var / lib / mysql의 데이터베이스로 mysqld 데몬 시작

3 : 새 창을 열고 mysql -u root를 입력하십시오.

[root @ cy400 ~] # mysql -u root
MySQL 모니터에 오신 것을 환영합니다. 명령은;로 끝납니다. 또는 \ g.

4 : 사용자 데이터베이스 변경

mysql> use mysql
테이블 및 열 이름 완성을위한 테이블 정보 읽기이 기능을 해제하면 -A 데이터베이스가 변경된 상태에서 더 빠르게 시작할 수 있습니다.

5 : 비밀번호 수정 “()”에 새 비밀번호를 입력해야합니다

mysql> update user set password = password ( ‘root123’) 여기서 user = ‘root’;
쿼리 확인, 영향을받는 3 개의 행 (0.00 초)
일치하는 행 : 3 변경 : 3 경고 : 0

6 : 플러시

mysql> 플러시 권한;

7 : 종료

mysql> 종료
안녕

8 : mysql 재시작

[root @ cy400 ~] # 서비스 mysqld 재시작;
MySQL 중지 : [OK]
MySQL 시작 : [OK]

빙고! 당신은 사용자 이름과 새로운 암호로 데이터베이스를 연결할 수 있습니다 :

[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor.  Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye