bestsource

'root'@'localhost' 사용자(암호 사용: YES)에 대한 액세스가 거부되었습니다(Mysql::오류)

bestsource 2023. 8. 7. 22:46
반응형

'root'@'localhost' 사용자(암호 사용: YES)에 대한 액세스가 거부되었습니다(Mysql::오류)

서버에 웹 응용 프로그램을 배포하려고 했는데 이 mysql 데이터베이스 예외가 발생합니다.

Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)

명령 프롬프트에서 다음을 사용하여 데이터베이스에 액세스하려고 했습니다.mysql -u root -p저는 모든 데이터베이스 작업을 수행할 수 있습니다.

무엇이 잘못입니까?

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:771)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3649)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1176)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2558)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at java.sql.DriverManager.getConnection(DriverManager.java:620)
    at java.sql.DriverManager.getConnection(DriverManager.java:200)
    at com.mpigeon.DbConnection.DbConn(DbConnection.java:26)
    at com.mpigeon.CheckLoginHome.doGet(CheckLoginHome.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

로컬 호스트에서 루트에 대한 액세스 권한을 부여해야 합니다. Ubuntu 도움말 확인

사해보다를 써 root를 들면 치마...

mysql -uroot

그러면 로그인한 후 다른 사용자와 호스트를 확인할 수 있습니다.

select user,host,password from mysql.user;

암호에 공백을 넣는지 확인합니다.

여기 제 답변에서 이것이 유용할 수 있다고 생각했습니다.

저는 이 문제를 해결하기 위해 많은 단계를 시도했습니다.이 문제에 대한 가능한 해결책에 대한 소스가 너무 많아서 헛소리에서 그 의미를 걸러내기가 어렵습니다.마침내 여기서 좋은 해결책을 찾았습니다.

1단계: 데이터베이스 버전 식별

$ mysql --version

MySQL에서는 다음과 같은 출력을 볼 수 있습니다.

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

아니면 마리아를 위해 이와 같은 출력.DB:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

나중에 사용할 데이터베이스와 실행 중인 버전을 기록합니다.그런 다음 데이터베이스에 수동으로 액세스할 수 있도록 데이터베이스를 중지해야 합니다.

2단계: 데이터베이스 서버 중지

루트 암호를 변경하려면 미리 데이터베이스 서버를 종료해야 합니다.

MySQL에 대해 다음을 사용할 수 있습니다.

$ sudo systemctl stop mysql

MariaDB의 경우:

$ sudo systemctl stop mariadb

3단계: 권한 확인 없이 데이터베이스 서버 재시작

사용자 권한에 대한 정보를 로드하지 않고 MySQL 및 MariaDB를 실행하면 암호를 제공하지 않고 루트 권한으로 데이터베이스 명령줄에 액세스할 수 있습니다.이렇게 하면 데이터베이스를 알지 못하는 사이에 데이터베이스에 접근할 수 있습니다.

이렇게 하려면 데이터베이스가 사용자 권한 정보를 저장하는 허가 테이블 로드를 중지해야 합니다.이것은 약간의 보안 위험이 있으므로 다른 클라이언트가 연결되지 않도록 네트워킹도 생략해야 합니다.

허가 테이블을 로드하거나 네트워킹을 활성화하지 않고 데이터베이스를 시작합니다.

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

이 명령 끝에 있는 앰퍼샌드는 이 프로세스를 백그라운드에서 실행하여 터미널을 계속 사용할 수 있도록 합니다.

이제 암호를 묻지 않는 루트 사용자로 데이터베이스에 연결할 수 있습니다.

$ mysql -u root

대신 데이터베이스 셸 프롬프트가 즉시 표시됩니다.

MySQL 프롬프트

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

mysql>

MariaDB 프롬프트

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

MariaDB [(none)]>

이제 루트 액세스 권한이 있으므로 루트 암호를 변경할 수 있습니다.

4단계: 루트 암호 변경

mysql> FLUSH PRIVILEGES;

이제 루트 암호를 실제로 변경할 수 있습니다.

MySQL 5.7.6 이상MariaDB 10.1.20 이상의 경우 다음 명령을 사용합니다.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

MySQL 5.7.5 이상MariaDB 10.1.20 이상의 경우 다음을 사용합니다.

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

교체해야 합니다.new_password선택한 새 암호를 사용합니다.

참고: 만약ALTER USER명령은 작동하지 않습니다. 일반적으로 더 큰 문제를 나타냅니다.하지만, 당신은 시도할 수 있습니다.UPDATE ... SET대신 루트 암호를 재설정합니다.

[중요] 다음은 제 특정 문제를 해결한 구체적인 라인입니다.

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

이 후에는 허가 테이블을 다시 로드해야 합니다.

두 경우 모두 명령이 성공적으로 실행되었음을 확인해야 합니다.

Query OK, 0 rows affected (0.00 sec)

암호가 변경되었으므로 이제 데이터베이스 서버의 수동 인스턴스를 중지하고 이전과 같이 다시 시작할 수 있습니다.

5단계: 데이터베이스 서버를 정상적으로 다시 시작

이 튜토리얼은 데이터베이스를 다시 시작하기 위한 몇 가지 추가 단계로 진행되지만, 사용한 것은 다음과 같습니다.

MySQL의 경우 $ sudo systemctl start mysql을 사용합니다.

MariaDB의 경우 다음을 사용합니다.

$ sudo systemctl start mariadb

이제 다음을 실행하여 새 암호가 올바르게 적용되었는지 확인할 수 있습니다.

$ mysql -u root -p

이제 명령에 새로 할당된 암호를 묻는 메시지가 표시됩니다.입력하면 데이터베이스 프롬프트에 액세스할 수 있습니다.

결론

이제 MySQL 또는 MariaDB 서버에 대한 관리 액세스 권한이 복원되었습니다.선택한 새 루트 암호가 강력하고 안전한지 확인하고 안전한 위치에 보관합니다.

MySQL 서버를 5.1.73에서 5.5.45로 업그레이드한 후 동일한 오류가 발생했습니다. 이 오류를 해결할 수 있는 다른 방법이 있습니다.

나의 경우 루트 암호를 사용하여 MySQL에 연결할 수 있었지만 MySQL은 어떠한 사용자에게도 권한 부여를 적극적으로 거부했습니다.

  1. 루트로 MySQL에 연결

    mysql -u root -p
    

    그런 다음 MySQL 루트 암호를 입력합니다.

  2. 데이터베이스 선택;

    use mysql;
    
  3. 아마도 루트에 대한 레코드는 하나뿐일 것입니다.mysql.user 연허용만결이에서만 할 수 localhost) 으로 루트에 두 . 는 (" 경우에는그다랬내한루하다로있는나그대가레야어개드코두러트의한에으기적본나▁for▁(는하나,▁(▁root▁for한▁be▁records내▁case경우▁was,▁my)that▁in다", "▁two▁but▁by▁should▁one▁the있▁there▁default)는야"입니다.localhost 또 다른 하나는 것다은또른고그리은.127.0.0.1;

  4. 에 대한 를 root 사용자에게 생성합니다.Host='127.0.0.1'그것이 없다면;만약그없다면이것;면;

        SET @s = CONCAT('INSERT INTO mysql.user SELECT ',
                REPLACE((SELECT GROUP_CONCAT(COLUMN_NAME) 
                         FROM INFORMATION_SCHEMA.COLUMNS
                         WHERE TABLE_NAME = 'user' AND TABLE_SCHEMA = 'mysql')
                ,"Host","'127.0.0.1'"),
                ' FROM mysql.user WHERE User="root"'); 
    
         PREPARE stmt FROM @s; 
         EXECUTE stmt;
    
  5. 에도 추로실수다있니습할행을 할 수 있습니다.mysql_upgrade -u -p모든 것이 괜찮은지 알아보기 위해.

이 오류는 설치 시 암호를 설정하지 않은 경우(이 경우에는 unix-socket 플러그인을 사용하여 mysql) 발생합니다.

그러나 설정(table mysql.user)에서 플러그인 링크를 삭제하면 다른 문제가 발생합니다.이렇게 해도 문제가 해결되지 않고 또 다른 문제가 발생합니다.삭제된 링크를 수정하고 암호("PWD")를 설정하려면 다음을 수행합니다.

위에서 설명한 대로 --skip-grant-tables를 사용하여 실행합니다.

작동하지 않으면 /etc/mysql/mysql.conf.d/mysql.cnf의 [mysqld] 섹션에 skip-grant-tables 문자열을 추가합니다.그런 다음 sudo service mysql 재시작을 수행합니다.

mysql -u root -p를 실행한 다음 ("PWD" 변경):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit
then sudo service mysql restart. Check: mysql -u root -p.

다시 시작하기 전에 mysqld.cnf 파일에서 해당 문자열을 제거합니다.

@bl79가 이 답변의 작성자입니다. 방금 다시 게시했습니다. 도움이 되기 때문입니다!

제 애플리케이션은 Mura CMS를 사용하고 있으며 이 문제에 직면했습니다.그러나 해결책은 mysql 로컬 서버와 구성 파일의 암호가 일치하지 않는 것이었습니다.동기화를 하자마자 작동했습니다.

MySQL에서 생성한 빈 사용자를 삭제하여 이 문제를 해결했습니다.root 사용자와 내 사용자만 있습니다.나머지는 삭제했습니다.

mysql의 mysql.user 테이블에서 빈 암호를 업데이트합니다.

use mysql;
select host,user,password from mysql.user;
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;

mysql DB의 사용자 테이블을 업데이트합니다.그리고 비밀번호를 빈 곳에 설정하세요, 저는 root 사용자를 사용하고 있었기 때문에 root 사용자의 비밀번호를 설정했습니다.

update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;

그런 다음 ATG CIM에서 암호를 제공하여 다시 시도했고 잘 작동했습니다.

After update

https://i.stack.imgur.com/3Lchp.png

오늘 SugarCRM(무료 CRM)을 설치하다가 이런 문제가 생겼습니다.

시스템이 루트 사용자를 사용하여 데이터베이스에 연결할 수 없습니다.콘솔에서 루트로 로그인할 수 있습니다.그래서 무엇이 문제였습니까?

저는 제 상황에서 정확히 같은 오류가 발생한다는 것을 알게 되었지만, 그것은 비밀번호가 인터넷에서 직접 mysql로 전송되었기 때문입니다.$_POST, 터이말, 해서시다,<되었습니다.&lt;비밀번호가 틀렸다는 뜻입니다

다른 모든 것들은 조금도 도움이 되지 않았습니다.mysql의 사용자 목록이 올바르고 익명 사용자(루트 항목 뒤에 표시됨)도 포함됩니다.

저는 구글을 많이 검색했지만 제 문제에 대한 확실한 답을 찾지 못했습니다.KeyPass를 사용하여 강력한 암호를 생성하고 mysql workbench에서 연결할 수 있지만 명령줄에서는 연결할 수 없습니다.그래서 나는 psw를 쉬운 것으로 바꿨고 그것은 명령줄에서 작동했습니다.저는 터미널에서 연결할 수 있는 강력한 암호를 만들었습니다.그래서 제 조언은 모든 것을 시도하기 전에 쉬운 비밀번호를 먼저 사용해보는 것입니다.

UT를 실행하다가 오류 메시지를 받기 시작했습니다.무엇이 문제였는지 잘 모르겠습니다.하지만 제가 INTELLIJ의 인코딩 스타일을 UTF8로 바꾸었을 때 다시 작동하기 시작했습니다.

사용자 'root'@'localhost'(암호 예 사용)에 대한 액세스가 최대 절전 모드로 거부되었습니다.

이것은 내 URL db.url=jdbc:mysql://localhost:3306/someb?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8&characterEncoding=utf8입니다.

msysql에 사용자 옵션을 추가합니다.

GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;

그리고 이 링크는 유용할 것입니다.

언급URL : https://stackoverflow.com/questions/6081339/access-denied-for-user-rootlocalhost-using-password-yes-mysqlerror

반응형