[mysql] 오류 1698 (28000) : 사용자 ‘root’@ ‘localhost’에 대한 액세스가 거부되었습니다.

새 서버를 설정하고이 문제가 계속 발생합니다.

루트 사용자로 MySQL 데이터베이스에 로그인하려고하면 오류가 발생합니다.

오류 1698 (28000) : 사용자 ‘root’@ ‘localhost’에 대한 액세스가 거부되었습니다.

터미널 (SSH), PHPMyAdmin 또는 MySQL 클라이언트 (예 : Navicat)를 통해 연결해도 문제가되지 않습니다. 그들은 모두 실패합니다.

mysql.user 테이블을보고 다음을 얻습니다.

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

보다시피 root는 액세스 할 수 있어야합니다.

한동안 문제를 해결하려고했기 때문에 서버는 매우 간단합니다.

Apache, MySQL 및 PHP와 함께 Ubuntu 16.04.1 LTS를 실행하여 웹 사이트를 호스팅하고 iRedMail 0.9.5-1을 사용하여 메일을 호스팅 할 수 있습니다.

iRedMail을 설치하기 전에 MySQL 데이터베이스에 로그인하면 정상적으로 작동합니다. 나는 또한 iRedMail을 설치하려고 시도했지만 루트도 작동하지 않습니다 …

누군가 MySQL 로그인 문제를 해결하는 방법 또는 기존 MySQL 설치 위에 iRedMail을 설치하는 방법을 알려줄 수 있다면. 그리고 예 설치 팁을 시도했지만 구성 파일에서 해당 변수를 찾을 수 없습니다.



답변

Ubuntu, mysql과 같은 일부 시스템은 기본적으로 UNIX auth_socket 플러그인을 사용 합니다.

기본적으로 다음을 의미합니다. db_users를 사용 하면 시스템 사용자 신분에 의해 “인증”됩니다 . root다음을 수행 하여 사용자가 이와 같이 설정되어 있는지 확인할 수 있습니다 .

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

쿼리에서 볼 수 있듯이 root사용자는 auth_socket플러그인을 사용하고 있습니다

이 문제를 해결하는 두 가지 방법이 있습니다.

  1. mysql_native_password플러그인 을 사용하도록 루트 사용자를 설정할 수 있습니다
  2. 당신은 당신 db_user과 함께 새로운 system_user것을 만들 수 있습니다 (권장)

옵션 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

옵션 2 : (your_SYSTEM_USER를 사용자 이름으로 바꿉니다)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

옵션 # 2를 사용하는 경우 시스템 사용자 이름 ( mysql -u YOUR_SYSTEM_USER) 으로 mysql에 연결해야합니다.

참고 : 일부 시스템 (예 : 데비안 스트레치)에서 ‘auth_socket’플러그인의 이름은 ‘unix_socket’ 이므로 해당 SQL 명령은 다음과 같아야합니다.UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

업데이트 :
앤디의 코멘트를 업데이트하는 MySQL의 8.xx에 보인다 @ / 교체에서 auth_socket위해 caching_sha2_password당신이 문제를 이해하는 데 도움이 될 것입니다 그러나 위의 단계,이를 테스트하기 위해 MySQL의 8.xx에있는 시스템 설정이 없습니다. 답장은 다음과 같습니다.

MySQL 8.0.4에서 변경된 하나의 새로운 기본 인증 플러그인은 ‘caching_sha2_password’입니다. 새로운 ‘YOUR_SYSTEM_USER’에는이 인증 플러그인이 있으며 이제 “mysql -u YOUR_SYSTEM_USER -p”로 bash 쉘에서 로그인하고 프롬프트에서이 사용자의 비밀번호를 제공 할 수 있습니다. “사용자 설정 플러그인 업데이트”단계가 필요하지 않습니다. 8.0.4 기본 인증 플러그인 업데이트는 https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/를 참조 하십시오.


답변

여기를 확인하십시오 :

MYSQL의 새로운 버전은 이런 식으로합니다.

새로운 my-sql에서 설치하는 동안 암호가 비어 있으면 auth_socket플러그인을 기반으로합니다 .

올바른 방법은 sudo권한 으로 my-sql에 로그인하는 것 입니다.

$ sudo mysql -u root -p

그런 다음 다음을 사용하여 비밀번호를 업데이트하십시오.

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

이것이 완료 stop and start되면 mysql 서버.

$  sudo service mysql stop
$  sudo service mysql start

자세한 내용은 이 링크를 참조하십시오 .

의심의 여지없이 의견을 말하십시오.


답변

Windows 10 데스크톱에서 Putty를 통해 상호 작용하는 Debian 8 VM에서이 문제가 발생했습니다.

여기에 다양한 제안을 시도했지만 아무런 효과가 없었으며 데비안 호스트에서 MariaDB를 실행하고 있습니다. 결국 나는 안전 모드에서 db 서버를 시작할 수 없다는 것을 알았지 만 필요하지 않았고 다음 명령이 실제로 작동했습니다. 즉 새로 작성된 MySql 사용자가 MySql / MariaDB 서버에 로그인 할 수있게했습니다.

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

위의 방법으로 문제가 해결되지 않으면 zetacu의 게시물 ( zetacu )에 설명 된 단계 를 따른 다음 내 단계를 따르십시오.

이제 원격 터미널 클라이언트를 사용하고 다음 명령을 사용하여 mysql에 안전하게 로그인 할 수 있어야합니다.

mysql -u your_user_name -p

프롬프트가 표시되면 비밀번호를 입력하십시오.


답변

MySQL 연결을 제거하는 것이 좋습니다.

업데이트-이것은 MySQL 버전 5.5 용입니다. 버전이 다르면 그에 따라 첫 번째 줄을 변경하십시오

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

그리고 다시 설치하지만 이번에는 루트 암호를 직접 설정하십시오. 이것은 많은 노력을 절약 할 것입니다.

sudo apt-get update
sudo apt-get install mysql-server


답변

여기에 해결책이없는 몇 시간의 노력 끝에, 이것은 나를 위해 일한 다음 비밀번호 열이 이제 authentication_string이라는 YouTube 비디오를 발견했습니다. 그래서 다음과 같이 암호를 변경할 수있었습니다. 먼저 터미널에서 mysql에 들어가십시오.

sudo mysql

그런 다음 mysql 유형 뒤에 mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

이 시점에서 mysql에서 일반 터미널 위치로 돌아갑니다. 이를 적용하려면 mysql을 다시 시작해야합니다. 해당 유형의 경우 다음을 수행하십시오.

sudo service mysql restart

이해를 돕기 위해이 비디오 링크 를 참조하십시오


답변

1 단계. sudo mysql -u root -p

2 단계. USE mysql;

3 단계. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

여기서 ‘admin’은 새 비밀번호이므로 변경할 수 있습니다.

단계 4. exit

감사. 끝났습니다.


답변

sudo 필요 없음

데이터베이스는 2 개의 모든 권한 계정으로 초기화됩니다. 첫 번째 계정은 액세스 할 수없는 “root”이고 사용자 이름이있는 두 번째 계정입니다 (command로 확인 whoami).

루트 계정에 액세스하려면 사용자 이름으로 로그인해야합니다

mysql -u $(whoami)

루트의 암호를 수동으로 변경하십시오.

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

‘루트’로 로그인

mysql -u root -p