Ubuntu 18.04에서 MySQL 또는 MariaDB 루트 암호를 재설정하는 방법

Ubuntu 18.04에서 MySQL 또는 MariaDB 루트 암호를 재설정하는 방법

2022-06-01 last update

13 minutes reading Ubuntu 18.04 MariaDB MySQL Databases Security
저자는 COVID-19 Relief FundWrite for DOnations 계획의 일부로 기부를 받았다.

소개


비밀번호를 잊어버리는 것은 우리 중 가장 우수한 사람에게 일어난다.MySQL 또는 MariaDB 데이터베이스의 루트 암호를 잊어버리거나 분실한 경우 서버 및 sudo 권한이 있는 사용자 계정에 액세스할 수 있는 권한이 있는 경우에도 액세스 권한을 얻고 암호를 재설정할 수 있습니다.
참고: 새로 설치된 Ubuntu 18.04에서 기본 MySQL 또는 MariaDB 구성은 시스템 루트 계정에서 연결하기만 하면 암호를 제공하지 않고 데이터베이스에 액세스할 수 있도록 합니다.이 경우 암호를 재설정할 필요가 없을 수도 있습니다.데이터베이스 루트 암호를 재설정하기 전에 sudo mysql 명령을 사용하여 데이터베이스에 액세스하십시오.인증의 기본 설정이 변경되고 접근 거부 오류가 발생할 때만 이 강좌의 절차에 따라 조작할 수 있습니다.
이 강좌는 Ubuntu 18.04에 apt 패키지 관리자를 설치한 MySQL과 MariaDB 데이터베이스에 루트 비밀번호를 재설정하는 방법을 보여 줍니다.루트 암호를 변경하는 과정은 MySQL 또는 MariaDB를 설치했는지 여부와 릴리스나 다른 공급업체가 제공하는 패키지와 기본 systemd 설정을 포함하는지에 따라 다릅니다.본 강좌의 설명은 다른 시스템이나 데이터베이스 서버 버전에 적용될 수 있지만, 이미 Ubuntu 18.04와 발행판이 제공한 소프트웨어 패키지에서 명확한 테스트를 진행했다.

선결 조건


ySQL 또는 MariaDB 루트 암호를 복구하려면 다음이 필요합니다.
  • 은 sudo 사용자를 사용하여 MySQL 또는 MariaDB를 실행하는 Ubuntu 18.04 서버에 접근하거나 다른 방식으로 루트 권한을 사용하여 서버에 접근합니다.생산 서버에 영향을 주지 않는 상황에서 본 강좌의 복구 방법을 시험적으로 사용하려면 initial server setup tutorial을 사용하여sudo 권한이 있는 일반적인 비root 사용자의 테스트 서버를 만듭니다.그리고 How to install MySQL on Ubuntu 18.04에 따라 MySQL을 설치합니다.
  • 1단계 - 데이터베이스 버전 식별 및 서버 중지


    Ubuntu 18.04는 MySQL 또는 MariaDB를 실행합니다. 이것은 MySQL과 완전히 호환되는 유행하는 삽입식 대체 프로그램입니다.설치된 명령에 따라 root 암호를 복구하려면 다른 명령을 사용해야 합니다. 따라서 이 절의 절차에 따라 실행 중인 데이터베이스 서버를 확인하십시오.
    다음 명령을 사용하여 버전을 확인합니다.
    1. mysql --version
    MariaDB를 실행 중인 경우 출력에서 "MariaDB"앞에 버전 번호가 표시됩니다.
    MariaDB output
    mysql Ver 15.1 Distrib 10.1.47-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
    ySQL을 실행하면 다음과 같은 출력이 표시됩니다.
    MySQL output
    mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
    이 강좌의 나머지 부분에서 따라야 할 적당한 명령을 결정하기 때문에 어느 데이터베이스를 적어 두세요.
    루트 암호를 변경하려면 데이터베이스 서버를 닫아야 합니다.MariaDB를 실행 중인 경우 다음 명령을 사용하여 수행할 수 있습니다.
    1. sudo systemctl stop mariadb
    ySQL의 경우 다음 명령을 실행하여 데이터베이스 서버를 닫습니다.
    1. sudo systemctl stop mysql
    데이터베이스가 정지되면 보안 모드에서 다시 시작해서 루트 비밀번호를 재설정할 수 있습니다.

    2단계 - 권한 검사 없이 데이터베이스 서버 재시작


    권한 검사 없이 MySQL과 MariaDB를 실행하면 루트 권한을 사용하여 데이터베이스 명령줄에 접근할 수 있으며 유효한 암호를 제공할 필요가 없습니다.이를 위해 데이터베이스에 사용자 권한 정보를 저장하는grant표를 불러오는 것을 멈춰야 합니다.이것은 약간의 안전 위험이기 때문에, 다른 클라이언트가 임시로 공격받기 쉬운 서버에 접속하는 것을 방지하기 위해 네트워크를 비활성화해야 할 수도 있습니다.
    설치된 데이터베이스 서버에 따라 권한 수여표를 불러오지 않고 서버를 시작하는 방식도 다르다.

    라이센스 테이블 없이 시작하도록 MariaDB 구성


    grant표가 없는 상황에서 MariaDB 서버를 시작하기 위해서, 우리는 systemd 단원 파일을 사용하여 MariaDB 서버 수호자에게 다른 인자를 설정할 것입니다.
    다음 명령을 실행하여 MariaDB가 시작할 때 사용하는 MYSQLD\u OPTS 환경 변수를 설정합니다.--skip-grant-tables--skip-networking 옵션은 MariaDB가 라이센스 테이블이나 네트워크 기능을 로드하지 않고 시작하는 것을 알려줍니다.
    1. sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
    그런 다음 MariaDB 서버를 시작합니다.
    1. sudo systemctl start mariadb
    이 명령은 출력되지 않지만 데이터베이스 서버를 다시 시작하고 새로운 환경 변수 설정을 고려합니다.sudo systemctl status mariadb부터 시작할 수 있습니다.
    이제 암호를 제공하지 않고 MariaDB root 사용자로 데이터베이스에 연결할 수 있어야 합니다.
    1. sudo mysql -u root
    데이터베이스 셸 프롬프트가 표시됩니다.
    MariaDB prompt
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
    이제 데이터베이스 서버에 액세스하여 루트 암호를 변경할 수 있습니다. 3단계 참조.

    라이센스 테이블 없이 시작하도록 MySQL 구성


    grant 테이블이 없는 상태에서 MySQL 서버를 시작하기 위해서, 시작할 때 서버에 추가 명령줄 파라미터를 전달할 수 있도록 MySQL의 시스템 설정을 변경합니다.
    이 작업을 수행하려면 다음 명령을 수행합니다.
    1. sudo systemctl edit mysql
    이 명령은 nano 편집기에서 MySQL 서비스 덮어쓰기를 편집하는 데 사용할 새 파일을 엽니다.이렇게 하면 MySQL의 기본 서비스 매개 변수가 변경됩니다.이 파일은 비어 있습니다. 다음 내용을 추가하십시오.
    MySQL 서비스 무시
    [Service]
    ExecStart=
    ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking
    
    첫 번째 ExecStart 문장은 기본값을 지우고, 두 번째 문장은 systemd에 권한 수여표와 네트워크 기능을 불러오는 것을 사용하지 않는 파라미터를 포함하는 새로운 시작 명령을 제공합니다.CTRL-x을 누르면 파일을 종료하고 Y을 누르면 변경 사항을 저장한 다음 ENTER을 누르면 파일 이름을 확인합니다.
    변경 사항을 적용하기 위해 systemd 구성을 다시 로드합니다.
    1. sudo systemctl daemon-reload
    이제 MySQL 서버를 시작합니다.
    1. sudo systemctl start mysql
    이 명령은 출력을 표시하지 않지만 데이터베이스 서버가 시작됩니다.다이얼 업 테이블과 네트워크가 설정되지 않습니다.
    루트 사용자로 데이터베이스에 연결:
    1. sudo mysql -u root
    데이터베이스 셸 프롬프트가 표시됩니다.
    MySQL prompt
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
    이제 서버에 접근할 수 있습니다. 루트 비밀번호를 변경할 수 있습니다.

    단계 3 - 루트 암호 변경


    데이터베이스 서버는 현재 제한 모드로 실행됩니다.권한 부여 테이블이 로드되지 않았고 네트워크 지원이 활성화되지 않았습니다.이것은 암호를 제공하지 않고 서버에 접근할 수 있지만, 데이터 변경 명령을 실행하는 것을 금지합니다.루트 비밀번호를 재설정하려면grant표를 서버에 접근할 수 있는 권한을 얻은 후에grant표를 불러와야 합니다.FLUSH PRIVILEGES 명령을 실행하여 데이터베이스 서버에 라이센스 테이블을 다시 로드하도록 알려줍니다.
    1. FLUSH PRIVILEGES;
    이제 루트 암호를 변경할 수 있습니다.사용하는 방법은 MariaDB를 사용하느냐, MySQL을 사용하느냐에 따라 달라집니다.

    MariaDB 암호 변경


    MariaDB를 사용하는 경우 루트 계정의 암호를 설정하려면 다음 문장을 실행하여 new_password을 기억하는 새 암호로 바꾸십시오.
    1. UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';
    암호가 변경되었음을 나타내는 출력이 표시됩니다.
    Output
    Query OK, 1 row affected (0.00 sec)
    MariaDB는 사용자 정의 인증 메커니즘을 사용할 수 있으므로 다음 두 문장을 실행하여 MariaDB가 루트 계정에 할당된 새 암호에 대해 기본 인증 메커니즘을 사용하도록 합니다.
    1. UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
    2. UPDATE mysql.user SET plugin = '' WHERE user = 'root';
    각 문장의 다음 출력을 볼 수 있습니다.
    Output
    Query OK, 0 rows affected (0.01 sec)
    암호가 변경되었습니다.exit을 입력하여 MariaDB 콘솔을 종료하고 4단계를 계속하여 데이터베이스 서버를 정상 모드로 다시 시작합니다.

    ySQL 암호 변경


    ySQL의 경우 다음 문장에서 루트 사용자의 암호를 변경하고 new_password을 기억할 강력한 암호로 바꿉니다.
    1. UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';
    암호가 성공적으로 변경되었음을 나타내는 출력이 표시됩니다.
    Output
    Query OK, 1 row affected (0.00 sec)
    MySQL은 사용자 정의 인증 메커니즘을 사용할 수 있습니다. 따라서 다음 문장을 실행하여 MySQL이 기본 인증 메커니즘을 사용하고 새 비밀번호를 사용하여 루트 사용자를 인증하는 것을 알려 주십시오.
    1. UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root';
    이전 명령과 유사한 출력이 표시됩니다.
    Output
    Query OK, 1 row affected (0.00 sec)
    암호가 변경되었습니다.exit을 입력하여 MySQL 콘솔을 종료합니다.
    정상적인 조작 모드로 데이터베이스를 다시 시작합시다.

    단계 4 - 데이터베이스 서버를 정상 설정으로 복원


    데이터베이스 서버를 정상적인 모드로 다시 시작하기 위해서는 네트워크를 활성화하고 권한 수여표를 불러올 수 있도록 변경 사항을 복원해야 합니다.마찬가지로 MariaDB를 사용하느냐, MySQL을 사용하느냐에 따라 달라집니다.
    MariaDB의 경우 이전에 설정한 MYSQLD_OPTS 환경 변수의 설정을 취소합니다.
    1. sudo systemctl unset-environment MYSQLD_OPTS
    그리고 systemctl을 사용하여 서비스를 다시 시작합니다.
    1. sudo systemctl restart mariadb
    ySQL의 경우 수정된 systemd 구성을 삭제하십시오.
    1. sudo systemctl revert mysql
    다음과 같은 출력이 표시됩니다.
    Output
    Removed /etc/systemd/system/mysql.service.d/override.conf. Removed /etc/systemd/system/mysql.service.d.
    그런 다음 변경 사항을 적용하기 위해 systemd 구성을 다시 로드합니다.
    1. sudo systemctl daemon-reload
    마지막으로 서비스를 다시 시작합니다.
    1. sudo systemctl restart mysql
    데이터베이스가 현재 다시 시작되었고 정상 상태로 회복되었습니다.암호를 사용하여 루트 사용자로 로그인하여 새 암호가 유효한지 확인합니다.
    1. mysql -u root -p
    암호를 입력하라는 메시지가 표시됩니다.새 암호를 입력하면 데이터베이스에 액세스하라는 메시지가 표시됩니다.

    결론


    MySQL 또는 MariaDB 서버에 대한 관리 액세스 권한이 복원되었습니다.선택한 새 암호가 안전하고 신뢰할 수 있는지 확인하고 안전한 곳에 저장하십시오.
    MySQL 또는 MariaDB의 다른 버전의 사용자 관리, 인증 메커니즘 또는 데이터베이스 암호를 재설정하는 방법에 대한 자세한 내용은 공식 MySQL documentation 또는 MariaDB documentation을 참조하십시오.