MySQL ERROR 1698 (28000): 에러 해결
WSL 2를 설치하고 우분투 20 에 MySQL 을 깔았는데 root 계정으로는 MySQL root 로 연결이 가능한데 일반 사용자로는 다음 에러를 내며 연결이 되지 않았습니다.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
구글링해보니 MySQL root 는 인증 방식을 Local 에 있는 Unix Domain socket 으로 하기때문에 root 권한이 있어야만 연결이 가능하다고 합니다.
운영 서버는 저런 정책을 갖는게 맞겠지만 로컬이나 개발용은 불편하니 다음 방법으로 인증 방식을 변경하면 됩니다.
root 사용자로 mysql 에 연결합니다.
sudo mysql -u root -p mysql
사용자별 Auth plugin 을 조회합니다.
인증 플러그인 조회SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+ | User | Host | plugin | +------------------+-----------+-----------------------+ | debian-sys-maint | localhost | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | auth_socket | +------------------+-----------+-----------------------+
root 사용자는 auth_socket 인증 방식을 사용하는 것을 볼 수 있습니다. 이것을 caching_sha2_password 방식으로 변경합니다.
UPDATE user SET plugin='caching_sha2_password' WHERE User='root';
예전 버전은 auth plugin 이 mysql_native_password 방식일 수 있으며 그럴 경우 아래 쿼리와 같이 mysql_native_password 로 설정하세요. 잘못 설정할 경우 root 로도 로그인이 불가능합니다.
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
root 암호가 설정되지 않았다면 설정해 줍니다.
SET PASSWORD FOR 'root'@'localhost' = 'qwert123';
변경된 정책을 반영해 줍니다.
FLUSH PRIVILEGES;
정책 변경이므로 MySQL 을 재구동합니다.
sudo systemctl restart mysqld
이제 일반 사용자로 MySQL root 권한으로 연결되는지 확인합니다.
mysql -u root -p mysql