명령줄에서 mysql -u root –p를 입력하거나, 비밀번호를 입력하거나, 도구를 통해 데이터베이스에 연결할 때 다음과 같은 오류 메시지가 자주 나타나는 것으로 알고 있습니다. MySQL.
ERROR 1045 (28000): 'root'@'localhost' 사용자에 대한 액세스가 거부되었습니다(비밀번호 사용: YES)
MySQL 서비스를 중지하세요.
# windows net stop mysql # linux service mysqld stop
로그인 시 권한 확인을 건너뛰도록 MySQL 설치 디렉터리의 my.ini 구성 파일을 수정하세요.
#到mysql根目录找到mysql配置文件 vim my.ini #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查 skip_grant_tables
MySQL 서비스를 시작하고 MySQL에 로그인하세요. 비밀번호를 입력하라는 메시지가 표시되면 비밀번호를 입력하고 Enter를 눌러 MySQL로 들어갑니다.
#登录mysql mysql -u root -p
그런 다음 SQL 문을 통해 루트 사용자의 비밀번호를 수정합니다.
#将数据库切换至mysql库 mysql> USE mysql; #修改密码 mysql> UPDATE user SET password=PASSWORD(‘newpasswd')WHERE user='root'; #刷新MySQL权限相关的表 mysql> flush privileges; mysql> exit;
my.ini 파일에 추가된 건너뛰기 권한 설명에 # 기호 주석을 추가합니다.
서비스를 다시 시작하고 수정된 비밀번호로 로그인하세요.
루트 사용자를 사용하여 MySQL에 로그인하고 사용자 테이블에서 다음과 같이 사용자 정보를 확인하면 호스트 필드가 각각 % 및 localhost임을 확인할 수 있습니다.
mysql>select host,user,password from user;
MySQL에서 '%'는 모든 호스트에서 MySQL 데이터베이스에 로그인할 수 있다는 의미인데, 로그인 호스트가 localhost인 사용자를 명시적으로 생성해야 하는 이유는 무엇입니까?
여기에는 MySQL 설치 중 초기화 사용자, 익명 사용자 및 연결 확인 전략이 포함됩니다.
아래에서 심층 분석을 수행해 보겠습니다.
MySQL을 설치하면 루트 사용자, 호스트 필드가 localhost이고 사용자 필드가 비어 있는 사용자 등 일부 사용자가 기본적으로 초기화됩니다.
사용자 필드가 비어 있는 사용자는 익명 사용자이며, 해당 사용자의 비밀번호도 비어 있습니다. 누구나 익명 사용자를 사용하여 MySQL 데이터베이스에 로그인할 수 있지만, MySQL 데이터베이스에 직접 mysql을 입력하는 등 할 수 있는 작업은 제한되어 있습니다.
mysql>select current_user;
mysql>show databases;
위 그림에서 익명 사용자는 information_schema 및 테스트 데이터베이스에 대한 권한만 갖고 있음을 알 수 있습니다. .
그리고 익명 사용자가 다른 사용자의 로그인에 어떤 영향을 미쳐 28000 오류가 발생합니까?
MySQL 데이터베이스에 연결을 시도할 때 데이터베이스는 제공된 ID와 비밀번호를 기반으로 연결 요청을 수락할지 여부를 결정합니다. ID는 사용자 이름과 클라이언트 호스트(즉, 클라이언트 호스트)의 두 부분으로 구성됩니다. mysql 명령이 입력됩니다).
호스트 필드의 %가 임의의 호스트와 일치하거나 호스트 필드에 와일드카드가 포함되어 있으므로 일치하는 행이 여러 개 나타날 수 있습니다. 서버는 사용자 테이블의 데이터를 메모리로 읽어와 호스트와 쌍을 이루어야 합니다. 사용자 필드가 정렬됩니다.
mysql>select host,user,password from user order by host desc,user desc;
클라이언트가 연결을 시도하면 서버는 정렬된 행을 찾아 클라이언트의 호스트 및 사용자 이름과 일치하는 첫 번째 행을 사용하고 일치하는 행을 찾은 후 비밀번호가 일치하는지 확인합니다. 일관되게 로그인이 성공했습니다.
사용자 필드가 비어 있으면 모든 사용자와 일치할 수 있다는 의미입니다.
여기에 집중하세요.
user는 비어 있습니다. 즉, 비밀번호 없이 localhost에 로그인하면 익명 사용자는 information_schema 및 테스트 데이터베이스에 대한 권한만 갖게 됩니다.
사용자가 루트이고 비밀번호가 비어 있는 것으로 표시되거나 호스트 필드가 '%'가 아닌 것으로 표시되는 경우 기본 일치 순서를 따르거나 비밀번호가 올바르지 않거나 오류 1045가 발생합니다. 메시지를 받습니다.
아래 그림은 수정되었으며 참고용입니다. 예를 들어 첫 번째 순서에서 호스트가 localhost이거나 127 루프백 주소인 경우 1045 오류가 발생합니다.
mysql> select host,user,password from user order by host desc,user desc; ## 将排序序列中最前面的用户修改host为'%' mysql> update user set host = '%' where host = 'oracle' and user = 'root'; mysql> flush privileges;
위 내용은 MySQL ERROR 1045의 원인과 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!