ERROR 1698 (28000):사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다.
새로운 서버를 셋업하고 있는데 이 문제가 계속 발생하고 있습니다.
루트 사용자와 함께 MySQL 데이터베이스에 로그인하려고 하면 다음 오류가 나타납니다.
ERROR 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 |
+------------------+-------------------+
보시는 바와 같이 사용자 루트에 액세스 권한이 있어야 합니다.
이 문제의 트러블 슈팅을 시도하고 있기 때문에 서버는 매우 심플합니다.
Ubuntu 16.04.1 LTS(Xenial Xerus)를 Apache, MySQL, PHP와 함께 실행하여 웹사이트를 호스팅하고 iRedMail 0.9.5-1을 실행하여 메일을 호스팅합니다.
iRedMail을 설치하기 전에 MySQL 데이터베이스에 로그인하면 정상적으로 동작합니다.iRed Mail 설치만 시도했는데 root도 작동하지 않습니다.
MySQL 로그인 문제를 해결하거나 기존 MySQL 설치에 iRedMail을 설치하려면 어떻게 해야 합니까?네, 설치 힌트를 시도했는데 구성 파일에서 이러한 변수를 찾을 수 없습니다.
Ubuntu와 같은 일부 시스템에서는 MySQL이 기본적으로 Unix auth_socket 플러그인을 사용합니다.
기본적으로는 이를 사용하는 db_users는 시스템 사용자 credential에 의해 "인증"됩니다.이 경우,root
사용자는 다음과 같이 설정됩니다.
sudo mysql -u root # I had to use "sudo" since it was a 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
플러그 인.
이 문제를 해결하려면 다음 두 가지 방법이 있습니다.
- root 사용자가 다음 명령어를 사용하도록 설정할 수 있습니다.
mysql_native_password
- 수 요.
db_user
와 함께system_user
추천)
옵션 1:
sudo mysql -u root # I had to use "sudo" since it was a new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
sudo service mysql restart
옵션 2: (YOUR_SYSTEM_USER를 가지고 있는 사용자 이름으로 바꿉니다.)
sudo mysql -u root # I had to use "sudo" since it was a new installation
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
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;
sudo service mysql restart
2 를 유저명 「#2」)으로서에 것에 해 주세요.mysql -u YOUR_SYSTEM_USER
를 참조해 주세요.
주의: 일부 시스템(Debian 9(Stretch) 등)에서는 'auth_socket' 플러그인을 'unix_socket'이라고 부릅니다.따라서 대응하는 SQL 명령어는 다음과 같습니다.UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Andy의 코멘트를 보면 MySQL 8.x.x가 업데이트/치환된 것 같습니다.auth_socket
★★★★★★에caching_sha2_password
MySQL 8.x.x.x 입니다.다만, 상기의 스텝은, 문제를 이해하는 데 도움이 됩니다.을 사용하다
MySQL 8.0.4에서 변경된 사항 중 하나는 새 기본 인증 플러그인이 'caching_sha2_password'라는 것입니다.새로운 'YOUR_SYSTEM_USER'에는 이 인증 플러그인이 있으며, 지금 Bash 쉘에서 "mysql -u YOUR_SYSTEM_USER -p"로 로그인하여 프롬프트에 이 사용자의 비밀번호를 입력할 수 있습니다."UPDATE user SET plugin" 단계는 필요하지 않습니다.
8.0.4 기본 인증 플러그인 업데이트는 MySQL 8.0.4: 새 기본 인증 플러그인: caching_sha2_password를 참조하십시오.
MySQL의 새로운 버전에서는 다음과 같이 처리됩니다.
인 채로 는, MySQL 의 인스톨에 .auth_socket
플러그 인.
은 MySQL을 입니다.sudo
특권
sudo mysql -u root -p
그런 다음 다음을 사용하여 암호 업데이트:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
이 작업이 완료되면 MySQL 서버를 중지하고 시작합니다.
sudo service mysql stop
sudo service mysql start
상세한 것에 대하여는, 이 링크를 참조해 주세요.
스도는 필요 없습니다.
는 2개의 첫계정은 수 "이고 두 입니다(명령어 "Check with " " " " " " " " " " " " " 2 " " "로 확인").첫 번째 계정은 액세스할 수 없는 "root" 계정이고 두 번째 계정은 사용자 이름으로 초기화됩니다(명령어로 확인).whoami
를 참조해 주세요.
루트 계정에 액세스할 수 있도록 하려면 사용자 이름으로 로그인해야 합니다.
mysql -u $(whoami)
root 비밀번호 수동 변경
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit
'root'로 로그인
mysql -u root -p
Windows 10 데스크톱의 PuTTY를 통해 대화하던 Debian 8(Jessie) VM에서 이 문제가 발생했습니다.
여기서 여러 가지 제안을 해봤지만 효과가 없었고, 데비안 호스트에서 MariaDB를 실행하고 있습니다.최종적으로 데이터베이스 서버를 세이프 모드로 기동할 수 없었지만, 기동할 필요는 없었습니다.다음 명령어는 실제로 기능했습니다.즉, 새로 작성한 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의 투고에 기재되어 있는 절차를 따라 주십시오.
이제 원격 터미널 클라이언트를 사용하고 다음 명령을 사용하여 MySQL에 안전하게 로그인할 수 있습니다.
mysql -u your_user_name -p
* 프롬프트가 뜨면 비밀번호를 입력합니다.
1. 텝 1sudo mysql -u root -p
2. 텝 2USE mysql;
3. 텝 3ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
여기서 'admin'은 새 비밀번호이지만 변경할 수 있습니다.
4. 텝 4exit
이제 끝입니다.
여기서 몇 시간 동안 아무런 해결책도 없이 고군분투한 끝에, 이 방법이 내게 효과가 있었다.나는 유튜브 동영상을 발견했는데, 그 동영상에는 패스워드 컬럼이 authentication_string으로 불리고 있다.
그래서 비밀번호를 다음과 같이 변경할 수 있었습니다.
먼저 단말기에서 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
상세한 것에 대하여는, 이 비디오 링크를 참조해 주세요.
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
최신 MySQL의 새 암호를 설정하는 방법에 대한 최신 안내서가 있습니다.
위 페이지에서 전체 주제를 읽는 것이 가장 좋지만, 간단히 말해 이것이 도움이 될 수도 있습니다.
보안 스크립트를 실행합니다.
sudo mysql_secure_installation
『 』의 상세 mysql_secure_installation
그런 다음 다음 단계에 따라 암호를 변경할 수 있습니다.
sudo mysql
mysql>
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
문제가 있는 경우 MySQL을 다시 설치해야 합니다.
나는 여기서 몇 시간 동안 연구한 끝에 해결책을 찾았다.
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
저도 처음으로 같은 문제에 직면했어요.
이것으로 해결되었습니다.
./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
마지막으로 새로 만든 비밀번호를 입력합니다.
이 방법은 효과가 있었습니다.
mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
저 같은 경우에는
mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
제 비밀번호가 정확했다고 확신해요.않으면 는 에러 코드가 .ERROR 1045 (28000): Access denied for user
그래서 sudo를 사용해서 다시 가입하게 되었습니다.
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
.
처음으로
sudo mysql -u root -p
SHOW VARIABLES LIKE 'validate_password%';
다음과 같은 것을 보게 될 것입니다.
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| 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 |
+--------------------------------------+--------+
다음 행을 변경해야 합니다.
- validate_password.length
- validate_password.number_count
- validate_password.정책.
- validate_password.special_char_count
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.number_count=0;
SET GLOBAL validate_password.special_char_count=0;
SHOW VARIABLES LIKE 'validate_password%';
다음에 나타냅니다.
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 4 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 0 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 0 |
+--------------------------------------+-------+
MySQL 클라이언트를 종료합니다.
exit;
sudo mysql -u root -p
이제 암호를 4자 이상만 쓸 수 있습니다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
exit;
sudo mysql -u root -p
새 비밀번호는 사용자 'root'의 데이터베이스에 있습니다.
OS: Ubuntu 18.04 (바이오닉 비버)
MySQL: 5.7
를 추가합니다.
skip-grant-tables
mysqld.cnf 파일의 마지막까지my.cnf 파일을 복사합니다.
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
패스워드 리셋
(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
를 삭제합니다.
skip-grant-tables
my.cnf에서(base) ➜ ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf (base) ➜ ~ sudo emacs /etc/mysql/my.cnf (base) ➜ ~ sudo service mysql restart
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>
비밀번호 정책 확인
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)!
의 설정을 변경합니다.
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?
암호를 재설정하여 정책을 채우거나 변경해야 합니다.
첫 번째 순서: 파일 /etc/phpmyadmin/config.inc.php로 이동한 후 "AllowNoPassword"를 찾을 수 있는 주석 해제 행으로 이동합니다.
두 번째 단계: MySQL 기본 계정에 로그인합니다.
mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privileges;
그게 다예요!
MySQL 버전 8.0.26 및 Ubuntu 20.04(Focal Fossa)에서 사용할 수 있습니다.
sudo mysql -u root
mysql> USE mysql;
mysql> 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 |
+------------------+-----------+-----------------------+
mysql> UPDATE user SET
plugin='caching_sha2_password' WHERE User='root';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'you_mysql_password';
mysql> FLUSH PRIVILEGES;
mysql> exit;
sudo service mysql restart
MacOS에 최신 MariaDB를 설치하고 MariaDB 설명서의 이 튜토리얼에 따라 다음 작업을 수행합니다.
sudo mariadb-secure-installation
뿐만 아니라mariadb-secure-installation
명령어가 지정되었습니다.그렇지 않으면 프롬프트가 잘못되어도 운이 없습니다.
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
Aborting!
저도 이런 일이 있었어요.Linux 배포판에 이미 포함되어 있는 MySQL 저장소에 문제가 있습니다.즉, 다음과 같은 간단한 작업을 수행할 수 있습니다.
sudo apt install mysql-server
기본 저장소에서 MySQL을 설치하면 이 문제가 발생합니다.이 문제를 해결하려면 설치된 MySQL을 제거해야 합니다.
sudo apt remove mysql* --purge --auto-remove
그런 다음 MySQL 공식 웹 사이트 MySQL APT 저장소에서 MySQL 저장소를 다운로드합니다.
리포지토리를 추가하고 설치하는 방법에 대한 설명서에 따르십시오.이것은 문제가 되지 않는다.
또한 zetacu에서 응답한 바와 같이 MySQL 루트 사용자가 mysql_native_password 플러그인을 실제로 사용하고 있는지 확인할 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 수행했습니다.
(sudo mysql -p -u root)를 사용하여 머신의 MySQL에 로그인하고 다음 쿼리를 누릅니다.
mysql_native_password로 식별되는 사용자 'jack'@'localhost'를 <>로 작성한다.
'jack'@'localhost'에 모든 권한을 부여한다.
사용자, 사용자, 사용자, 호스트 FROM mysql.user WHERE 사용자 = 'root';
+------+-------------+-----------+ | user | plugin | host | +------+-------------+-----------+ | root | auth_socket | localhost | +------+-------------+-----------+
mysql_native_password로 식별되는 사용자 'root'@'localhost'를 '<>'로 대체한다.
플래시 특권
그래도 오류가 발생하면 한 번 시도해 보세요.이 코드가 당신에게 많은 도움이 되길 바랍니다!!
도 작동하지 않는 하십시오.sudo mysql -u root -p
andmysql mysql -u root -p
.
현재 사용자 중 하나와 루트 사용자 중 하나라는 두 개의 암호를 입력해야 합니다.
루트 사용자와 함께 MySQL에 액세스하려고 하지만 루트의 올바른 암호를 제공하지 않습니다.
루트에 새로운 패스워드를 설정할 필요가 있는 경우, MySQL 사이트에는 루트 패스워드를 리셋 하는 방법에 관한 문서가 있습니다.B.3.3.2
위 링크의 MySQL 문서는 명확하고 간결하기 때문에 여기서는 프로세스를 표시하지 않습니다.
언급URL : https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost
'sourcecode' 카테고리의 다른 글
Express Router 및 vuex 서비스 및 액션을 사용하여 사용자를 추가하는 방법(사후 요청) (0) | 2022.11.26 |
---|---|
MySQL: 쿼리 결과에서 사용자 변수 설정 (0) | 2022.11.26 |
JPA: 단방향 다대일 및 캐스케이드 삭제 (0) | 2022.11.26 |
Firestore onSnapshot() 메서드가 여러 번 실행됩니다. (0) | 2022.11.26 |
날짜보다 큰 연산자를 사용하는 방법 (0) | 2022.11.26 |