>  기사  >  데이터 베이스  >  MySQL ERROR 1045의 원인과 해결 방법

MySQL ERROR 1045의 원인과 해결 방법

王林
王林앞으로
2023-05-26 22:31:044971검색

    명령줄에서 mysql -u root –p를 입력하거나, 비밀번호를 입력하거나, 도구를 통해 데이터베이스에 연결할 때 다음과 같은 오류 메시지가 자주 나타나는 것으로 알고 있습니다. MySQL.

    ERROR 1045 (28000): 'root'@'localhost' 사용자에 대한 액세스가 거부되었습니다(비밀번호 사용: YES)

    일반적으로 온라인에서 해결 방법을 찾을 수 있습니다

    1 서비스 중지

    MySQL 서비스를 중지하세요.

     # windows
     net stop mysql 
     # linux
     service mysqld stop

    2. 확인 건너뛰기

    로그인 시 권한 확인을 건너뛰도록 MySQL 설치 디렉터리의 my.ini 구성 파일을 수정하세요.

     #到mysql根目录找到mysql配置文件 
     vim my.ini
     #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查
     skip_grant_tables

    3. 비밀번호를 변경하세요.

    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;

    4. 서비스를 다시 시작합니다.

    my.ini 파일에 추가된 건너뛰기 권한 설명에 # 기호 주석을 추가합니다.

    서비스를 다시 시작하고 수정된 비밀번호로 로그인하세요.

    원인 분석

    루트 사용자를 사용하여 MySQL에 로그인하고 사용자 테이블에서 다음과 같이 사용자 정보를 확인하면 호스트 필드가 각각 % 및 localhost임을 확인할 수 있습니다.

    mysql>select host,user,password from user;

    MySQL ERROR 1045의 원인과 해결 방법

    MySQL에서 '%'는 모든 호스트에서 MySQL 데이터베이스에 로그인할 수 있다는 의미인데, 로그인 호스트가 localhost인 사용자를 명시적으로 생성해야 하는 이유는 무엇입니까?

    여기에는 MySQL 설치 중 초기화 사용자, 익명 사용자 및 연결 확인 전략이 포함됩니다.

    아래에서 심층 분석을 수행해 보겠습니다.

    MySQL을 설치하면 루트 사용자, 호스트 필드가 localhost이고 사용자 필드가 비어 있는 사용자 등 일부 사용자가 기본적으로 초기화됩니다.

    사용자 필드가 비어 있는 사용자는 익명 사용자이며, 해당 사용자의 비밀번호도 비어 있습니다. 누구나 익명 사용자를 사용하여 MySQL 데이터베이스에 로그인할 수 있지만, MySQL 데이터베이스에 직접 mysql을 입력하는 등 할 수 있는 작업은 제한되어 있습니다.

    mysql>select current_user;

    MySQL ERROR 1045의 원인과 해결 방법

    mysql>show databases;

    MySQL ERROR 1045의 원인과 해결 방법

    위 그림에서 익명 사용자는 information_schema 및 테스트 데이터베이스에 대한 권한만 갖고 있음을 알 수 있습니다. .

    그리고 익명 사용자가 다른 사용자의 로그인에 어떤 영향을 미쳐 28000 오류가 발생합니까?

    MySQL 데이터베이스에 연결을 시도할 때 데이터베이스는 제공된 ID와 비밀번호를 기반으로 연결 요청을 수락할지 여부를 결정합니다. ID는 사용자 이름과 클라이언트 호스트(즉, 클라이언트 호스트)의 두 부분으로 구성됩니다. mysql 명령이 입력됩니다).

    호스트 필드의 %가 임의의 호스트와 일치하거나 호스트 필드에 와일드카드가 포함되어 있으므로 일치하는 행이 여러 개 나타날 수 있습니다. 서버는 사용자 테이블의 데이터를 메모리로 읽어와 호스트와 쌍을 이루어야 합니다. 사용자 필드가 정렬됩니다.

    mysql>select host,user,password from user order by host desc,user desc;

    MySQL ERROR 1045의 원인과 해결 방법

    클라이언트가 연결을 시도하면 서버는 정렬된 행을 찾아 클라이언트의 호스트 및 사용자 이름과 일치하는 첫 번째 행을 사용하고 일치하는 행을 찾은 후 비밀번호가 일치하는지 확인합니다. 일관되게 로그인이 성공했습니다.

    사용자 필드가 비어 있으면 모든 사용자와 일치할 수 있다는 의미입니다.

    여기에 집중하세요.

    user는 비어 있습니다. 즉, 비밀번호 없이 localhost에 로그인하면 익명 사용자는 information_schema 및 테스트 데이터베이스에 대한 권한만 갖게 됩니다.

    MySQL ERROR 1045의 원인과 해결 방법

    사용자가 루트이고 비밀번호가 비어 있는 것으로 표시되거나 호스트 필드가 '%'가 아닌 것으로 표시되는 경우 기본 일치 순서를 따르거나 비밀번호가 올바르지 않거나 오류 1045가 발생합니다. 메시지를 받습니다.

    아래 그림은 수정되었으며 참고용입니다. 예를 들어 첫 번째 순서에서 호스트가 localhost이거나 127 루프백 주소인 경우 1045 오류가 발생합니다.

    MySQL ERROR 1045의 원인과 해결 방법

    SO 솔루션

    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의 원인과 해결 방법

    위 내용은 MySQL ERROR 1045의 원인과 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제