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


382

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

루트 사용자로 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을 설치하는 방법을 알려줄 수 있다면. 그리고 예 설치 팁을 시도했지만 구성 파일에서 해당 변수를 찾을 수 없습니다.


:이 링크 나를 위해 일한 첫 번째 옵션 다음 askubuntu.com/questions/763336/...
미카엘 Arhelger

3
sudo mysql_secure_installation가장 쉬운 방법입니다
Sergey Ponomarev

답변:


1119

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/를 참조 하십시오.


5
옵션 1이 나를 위해 일했습니다. 그러나 나는 또한 달릴 필요가 있었다 sudo gedit /etc/phpmyadmin/config.inc.php. 그런 다음 AllowNoPassword포함 된 두 줄을 모두 검색 하고 주석 처리를 제거했습니다. 그런 다음 암호없이 루트로 로그인 할 수있었습니다.
Joe

7
옵션 2가 작동합니다. 항상 새로운 사용자를 만들고 루트를 떠나는 것이 최선의 방법이라고 생각합니다.
PasinduJay

2
IDENTIFIED BY ''비트는 아마이어야한다IDENTIFIED BY 'YOUR_PASSWD'
YakovL

4
마지막으로 실제로 작동 하는 답변 !! 거기에 mysqld_safe --skip-grant-tables등 이 있다고 대답하는 치열한 답변 이 있으며 작동하지 않습니다.
스튜어트

4
좋아, sudo mysql -u root -p내가 어떻게하지 않으면 어떻게해야합니까 ?
Hrvoje T

173

여기를 확인하십시오 :

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

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

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


4
이것은 Ubuntu 18을 사용하여 나를 위해 일했습니다. 감사합니다.
피터 Drinnan

10
우분투에서 작동 18.04
sgtkuncoro

2
정확히 내가 찾던 것. 감사합니다 :) 우분투 18에서 작업
Manthan_Admane

2
이것은 매력처럼 작동했습니다. lubuntu 19.04
Kvvaradha

3
이것은 잘 작동합니다. 링크가 유용합니다.
kjohri

9

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

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


간단합니다. 글쎄, 첫 번째 명령 만 두 번째 명령을 실행할 수 없으므로 편집을 조정하겠습니다. 내가
옳은지

7

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

@ingernet은 아마도 다시 설치하는 동안 무시한 다른 문제로 인한 것일 수도 있습니다.
Eminem347

@PJBrunet 아마 당신의 Mysql 버전이 다를 수 있습니다
Eminem347

충분하지만 다목적 솔루션이 가장 좋습니다.
PJ Brunet

6

여기에 해결책이없는 몇 시간의 노력 끝에, 이것은 나를 위해 일한 다음 비밀번호 열이 이제 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

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


5

1 단계. sudo mysql -u root -p

2 단계. USE mysql;

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

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

단계 4. exit

감사. 끝났습니다.


5

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

당신은 mysql의 실제 버전에 대한 정답입니다, 감사합니다!
휴고 S

3

첫 번째 단계 : /etc/phpmyadmin/config.inc.php로 이동 한 다음 AllowNoPassword가있는 행의 주석을 해제하십시오. 두 번째 단계 : mysql 기본 계정으로 로그인

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

그리고 그게 전부입니다!


3

그것은 나를 위해 일했다 :

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3

나는 또한 처음에 같은 문제에 직면했다.

이제 수정되었습니다.

먼저 /etc/mysql/mysql.conf.d/mysqld.cnf파일 을 복사하여에 붙여 넣습니다 /etc/mysql/my.cnf.

당신은 명령으로 할 수 있습니다 :

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

이제 암호를 봅시다 :

터미널에서 다음 명령을 사용하십시오.

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

이제 당신은 mysql 콘솔 안에 있습니다.

그런 다음 루트 암호를 재설정하기 위해 쿼리를 작성해 봅시다

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

이제 청소할 수 있습니다 /etc/mysql/my.cng

편집기에서 위 파일을 열고 파일 내부의 전체 줄을 제거하십시오.

그런 다음 mysql을 다시 시작하십시오.

sudo mysql service restart 

이제 새로 만든 비밀번호로 mysql을 사용하자 :

sudo mysql -u root -p

마지막으로 새로 만든 비밀번호를 입력하십시오.


1
잘 작동했습니다! 그러나 귀하의 답변을 업데이트해야합니다 !! /etc/mysql/my.cnf되지는 /etc/mysql/my.cng과 서비스의 sudo는 서비스 mysql을 다시 시작 다시 시작
essayoub을

3

몇 시간의 연구 끝에 내 솔루션을 찾았습니다.

MySQL 중지

sudo service mysql stop

MySQL 서비스 디렉토리를 만듭니다.

sudo mkdir /var/run/mysqld

MySQL 사용자에게 서비스 디렉토리에 쓸 수있는 권한을 부여하십시오.

sudo chown mysql: /var/run/mysqld

권한 확인이나 네트워킹없이 MySQL을 수동으로 시작하십시오.

sudo mysqld_safe --skip-grant-tables --skip-networking &

비밀번호없이 로그인하십시오.

 mysql -uroot mysql

비밀번호 업데이트

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

MySQL을 끕니다.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

MySQL 서비스를 정상적으로 시작하십시오.

sudo service mysql start

다른 것도 없을 때 mysql 프롬프트가 나타납니다! 감사!
UserX

2

루트 사용자로 MySQL에 액세스하려고하지만 루트의 올바른 비밀번호를 제공하지 않습니다.

root에 대해 새 비밀번호설정 해야하는 경우 MySQL 사이트에 비밀번호지정하는 방법에 대한 훌륭한 문서가 있습니다. http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

나는거야 여기에있는 과정을 보여주지 때문에 MySQL의 문서 위의 링크가 이 명확하고 간결이다 .


답변에 감사하지만 작동시키지 못했습니다. 대신 pgSQL 데이터베이스와 함께 iRedMail을 설치하기로 선택했습니다.
Folkmann

로저 포크 먼! 어떤 방법으로 문제를 해결했음을 아는 것이 좋습니다.
Cristian Gonçalves

링크가 끊어집니다. mysql.com은 수년 동안 많은 링크가 끊어졌습니다. 여기에 관련 정보를 복사하여 붙여 넣어야합니다. 소스를 지정하는 한 괜찮습니다.
Goose

1

os : 우분투 18.04

MySQL : 5.7

  1. skip-grant-tablesmysqld.cnf 파일 끝에 추가

  2. cp the my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. 비밀번호를 재설정
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. skip-grant-tablesmy.cnf에서 제거
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. mysql을여십시오
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. 비밀번호 정책을 확인하십시오
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. 의 구성을 변경 validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

참고 당신은 당신이 무엇에 의해 발생 된 오차 것을 알아야한다? validate_password_policy?

정책을 채우거나 정책을 변경하려면 비밀번호를 재설정하기로 결정해야합니다.


0

이것은 나에게도 일어났다. 문제는 이미 리눅스 배포판과 함께 제공되는 mysql 저장소에 있습니다. 따라서 단순히 할 때 : $ sudo apt install mysql-server 기본 리포지토리에서 mysql을 설치 하여이 문제를 일으 킵니다. 따라서 극복 한 mysql을 제거해야합니다. $ sudo apt remove mysql* --purge --auto-remove

그런 다음 공식 mysql 웹 사이트에서 mysql repo를 다운로드하십시오. MySQL APT Repo repo를 추가하고 설치하는 방법에 대한 설명서를 따르십시오. 이것은 문제가되지 않습니다. 또한 @zetacu의 답변에 따라 mysql 루트가 실제로 mysql_native_password 플러그인을 사용하는지 확인할 수 있습니다


0

나의 경우에는,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

암호가 정확하다고 확신하지 않으면 오류 코드가 표시됩니다. ERROR 1045 (28000): Access denied for user

그래서 sudo를 사용하여 다시 로그인합니다.

dev@Dev-007:~$ sudo mysql -u root -p

이번에는 그것은 나를 위해 일했다. 문서를 참조하십시오

그런 다음 루트 암호를 변경하십시오.

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

그런 다음 사용하여 서버를 다시 시작하십시오. sudo /etc/init.d/mysql restart

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.