DataBase

[MySQL] 비밀번호 초기화

메성 2020. 4. 2. 02:43
반응형

비밀번호 초기화

  • 비밀번호 변경
//MySQL 8.0.15 이상
update mysql.user set authentication_string='변경 비밀번호' where user='root';

 

 

  • 권한 적용
flush privileges;

 

 

  • 다시 접속하면 아래와 같은 오류 메시지가 나타나는 경우가 있다.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

 

 

  • 위 오류 메시지는 비밀번호가 틀렸다고 예상할 수 있는데.. 방금 변경했는데 왜 틀렸다고 나올까? 계정 테이블을 확인해보자.
select authentication_string from user;
  • 확인 결과, 비밀번호가 변경되었지만, 해쉬화가 되지 않아 암호화되지 않고 그대로 저장되어 있는 것을 볼 수 있다.
  • 이를 해결해보자

 

 

비밀번호 초기화 해결방법

  1. MySQL을 멈춘다.

    sudo /usr/local/mysql/support-files/mysql.server stop
  2. MySQL 서버 승인을 생략하는 옵션을 추가하여 시작한다.

    sudo /usr/local/mysql/support-files/mysql.server start --skip-grant-tables
  3. Root 유저로 MySQL에 접속한다.

    cd /usr/local/mysql/bin
    ./mysql -u root
  4. mysql 데이터베이스를 사용한다.

    use mysql;
  5. root 유저 비밀번호를 NULL로 변경한다.

    update mysql.user set authentication_string=null where user='root';
    • null로 변경하는 이유는 MySQL 서버를 정상적으로 다시 실행했을 때(승인 생략 옵션 없이) 비밀번호 없이 바로 접속하기 위함이다.
  6. 변견된 권한을 설정한다.

    flush privileges;
  7. MySQL을 나간다.

    exit
  8. MySQL을 다시 접속한다.

    ./mysql -u root
    ./mysql -u root -p
    • 비밀번호가 설정되어 있지 않으니 아무거나 입력해도 접속가능하다.
  9. 비밀번호를 변경한다.

    update mysql.user set authentication_string=n'1234' where user='root';
    • 비밀번호 변경 후 다시 user테이블에 authentication_string 컬럼을 조회하면 해쉬화가 된 것을 확인할 수 있을 것이다. 'select authentication_string from user;'
  10. 비밀번호가 정상적으로 변경되었으면, MySQL을 나간 후 변경된 비밀번호로 접속하자.

반응형