사용자 'root'@ 'localhost'에 대한 액세스 거부 (암호 사용 : YES)-권한이 없습니까?


110

이 오류가 계속 발생합니다.

mySQL Workbench를 사용하고 있으며 루트의 스키마 권한이 null이라는 것을 발견했습니다. 특권이 전혀 없습니다.

내 서버가 사용되는 플랫폼에서 문제가 발생했으며 이것은 모두 갑작스러운 문제였습니다.

root@127.0.0.1은 분명히 많은 액세스 권한을 가지고 있지만 그렇게 로그인했지만 어쨌든 localhost에 할당합니다 -localhost 에는 권한이 없습니다.

내가 좋아하는 몇 가지했던 FLUSH HOSTS, FLUSH PRIVILEGES등하지만 나 인터넷에서 어떤 성공을 발견했다.

루트 액세스 권한을 어떻게 되 찾을 수 있습니까? 주변을 둘러 볼 때 사람들이 "액세스 권한이있을"것으로 기대하지만 액세스 권한이 없어서 명령 줄이나 어떤 것도 나 GRANT자신도 들어갈 수 없기 때문에 실망 스럽 습니다.

실행할 때 SHOW GRANTS FOR root이것이 내가 대가로 얻는 것입니다.

오류 코드 : 1141. '%'호스트의 'root'사용자에 대해 정의 된 권한이 없습니다.


SHOW GRANTS FOR root쿼리에서 실행 하고 질문에 결과를 게시하십시오.
NobleUplift

MySQL Workbench를 사용하여 localhost 또는 다른 호스트에서 데이터베이스에 액세스하려고합니까?
Andy Jones

--skip-보조금 테이블과 로그인 사용자와 위의 옵션을 사용하지 않고 다시 루트 다시 시작 서버에 대한 모든 권한을 제공과 함께 다시 시작 서버
vidyadhar

@AndyJones 아니요, 사용중인 전용 서버에 있습니다.
Chase

@vidyadhar 죄송합니다. 어디에서 그렇게할지 잘 모르겠습니다.
Chase

답변:


51

루트 암호 재설정 지침을 사용하십시오 . 그러나 루트 암호를 재설정하는 대신 mysql.user 테이블에 레코드를 강제로 삽입 할 것입니다.

init 파일에서 대신 이것을 사용하십시오.

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'root', password('YOURPASSWORD'));
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;

1
미안합니다 Andy.하지만 6 단계에 도달하면 계속 문제가 발생합니다. 설치 마법사를 사용했기 때문에 "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt 모든 것이 있어야 할 위치에 있고 위에있는 것을 그에 따라 파일에 넣었습니다. 서비스도 중지했습니다. 다음 과 같은 출력이 표시됩니다. prntscr.com/1ilxau 및 모든 것 (플러그인) 종료. 정말 혼란 스럽습니다.
Chase

2
관리자 권한으로 실행 중입니까?
Andy Jones

1
내 어리 석음에 놀라지 않았다. 난 후, 나는이있어 prntscr.com/1imcnj를 - 내가 (붙여 넣기)에서 자신의 라인을했다 처음은 내가 한 줄에 모두 넣어. SQL 전문가 자체가 아니라 나에게 너무 혼란스러워서 죄송합니다.
Chase

16
그것은 준다 : ERROR 1054 (42S22): Unknown column 'Password' in 'field list'오류. @AndyJones
alper

1
나는 얻고있다 : '필드 목록'의 알 수없는 열 '암호'
sricheta ruj

130

MySql 5.7. +에서 동일한 문제가있는 경우 :

Access denied for user 'root'@'localhost'

MySql 5.7은 기본적으로 소켓에 연결할 수 있기 때문에 sudo mysql. sql을 실행하는 경우 :

SELECT user,authentication_string,plugin,host FROM mysql.user;

그러면 볼 수 있습니다.

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

루트 및 비밀번호로 연결을 허용하려면 다음 명령을 사용하여 테이블의 값을 업데이트하십시오.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Current-Root-Password';
FLUSH PRIVILEGES;

그런 다음 select 명령을 다시 실행하면 변경된 것을 볼 수 있습니다.

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *2F2377C1BC54BE827DC8A4EE051CBD57490FB8C6 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *497C3D7B50479A812B89CD12EC3EDA6C0CB686F0 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

그리고 그게 다야. sudo mysql_secure_installation명령을 실행하고 완료 한 후에이 프로세스를 실행할 수 있습니다 .

mariadb의 경우

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('manager');

비밀번호를 설정합니다. https://mariadb.com/kb/en/set-password/ 에서 자세히 알아 보기


1
정말 감사합니다 리눅스 민트에 접속 설립 동안
Lova Chittumuri

에서 auth_socket로 업데이트하면 mysql_native_password문제가 해결되었습니다. 감사합니다!
olore

1
이것은 알아 내려는 노력과 엄청난 시간 낭비였습니다. 나는 그들이 이것을 물 었으면 좋겠다 mysql_secure_installation. 이 답변에 감사드립니다.
PatPeter

이것은 또한 도움이되었습니다. stackoverflow.com/questions/2995054/…
Abeer Sul

42

내 사용자 권한이 마음에 들지 않았기 때문에 SUDO. (bash << sudo set user and password) (이것은 root의 사용자 이름을 제공하고 암호를 아무것도 설정하지 않음) (Mac에서)

sudo mysql -uroot -p

27

다음 명령을 시도하십시오.

~$ sudo /etc/init.d/mysql stop
~$ sudo mysqld_safe --skip-grant-tables &
~$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> use mysql;

mysql> update user set password=PASSWORD("root") where User='root';

mysql> flush privileges;

mysql> quit

~$ sudo /etc/init.d/mysql stop

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6186]: ended

[1]+  Done                    mysqld_safe --skip-grant-tables

~$ sudo /etc/init.d/mysql start

~$ mysql -u root -p

* MySQL Community Server 5.6.35 is started
~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> 

11
MySQL 5.7에서는 mysql.user 테이블 필드의 암호 필드가 제거되었으며 이제 필드 이름은 'authentication_string'입니다.
Rumid

MySQL의의 새로운 버전들은 authentication_string로 암호 열 이름을 변경
라 메쉬 Maharjan을

sudo mysqld_safe날이있어 /var/run/mysqld for UNIX socket file don't exists다음 후, mkdir -p /var/run/mysqld그리고 sudo chown -R mysql:mysql /var/run/mysqld/이 근무하고 데몬을 시작했다.
kenzotenma

1
ERROR 2002 (HY000) : '/var/run/mysqld/mysqld.so 소켓을 통해 로컬 MySQL 서버에 연결할 수 없음
Mostafa

19

mysql 5.7 이상 버전에서 오류가 발생하는 사람들을 위해-

Access denied for user 'root'@'localhost' (using password: YES)
  1. 새 터미널 열기

  2. sudo /etc/init.d/mysql stop ... MySQL Community Server 5.7.8-rc가 중지되었습니다.

  3. sudo mysqld_safe --skip-grant-tables & 이것은 모든 부여 수준 권한을 건너 뛰고 안전 모드에서 mysql을 시작합니다. 때때로 프로세스가

grep : 쓰기 오류 : Broken pipe 180102 11:32:28 mysqld_safe Logging to '/var/log/mysql/error.log'.

Ctrl + Z 또는 Ctrl + C를 눌러 프로세스를 중단하고 종료합니다.

  1. mysql -u root

MySQL 모니터에 오신 것을 환영합니다. 명령은; 또는 \ g. MySQL 연결 ID는 2 서버 버전 : 5.7.8-rc MySQL Community Server (GPL)입니다.

Copyright (c) 2000, 2015, Oracle 및 / 또는 그 계열사. 판권 소유.

Oracle은 Oracle Corporation 및 / 또는 그 계열사의 등록 상표입니다. 다른 이름은 해당 소유자의 상표 일 수 있습니다.

'help;'를 입력하십시오. 또는 '\ h'로 도움을 받으세요. 현재 입력 명령문을 지우려면 '\ c'를 입력하십시오.

  1. mysql> use mysql;

테이블 및 열 이름 완성을위한 테이블 정보 읽기이 기능을 해제하여 -A를 사용하여 더 빨리 시작할 수 있습니다.

데이터베이스 변경

  1. mysql> update user set authentication_string=password('password') where user='root'; Query OK, 4 개 행 영향, 1 개 경고 (0.03 초) 일치 된 행 : 4 개 변경됨 : 4 개 경고 : 1 개

  2. mysql> flush privileges; 쿼리 OK, 영향을받는 행 0 개 (0.00 초)

  3. mysql> quit 안녕

  4. sudo /etc/init.d/mysql stop

..180102 11:37:12 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended. * MySQL Community Server 5.7.8-rc가 중지됨 arif @ ubuntu : ~ $ sudo /etc/init.d/mysql start .. * MySQL Community Server 5.7.8-rc가 시작됨

  1. mysql -u root -p

    암호를 입력:

    MySQL 모니터에 오신 것을 환영합니다. 명령은; 또는 \ g. MySQL 연결 ID는 2 서버 버전 : 5.7.8-rc MySQL Community Server (GPL)입니다.

mysql 5.7+ 버전 이후에는 열 암호가 mysql.user 테이블의 이름 authentication_string으로 대체되었습니다.

이 단계가 누구에게나 도움이되기를 바랍니다. 감사합니다.


15

나는 우분투 18을 사용하고 있었고 다음 명령으로 MySQL (password : root)을 설치했습니다.

sudo apt install mysql-server
sudo mysql_secure_installation

일반 우분투 사용자로 로그인하려고 할 때이 문제가 발생했습니다.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

하지만 수퍼 유저를 통해 MySQL에 로그인 할 수있었습니다. 다음 명령을 사용하여 일반 사용자를 통해 로그인 할 수있었습니다.

sudo mysql    
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
exit;

그러면 일반 계정으로 Mysql에 로그인 할 수 있습니다.

여기에 이미지 설명 입력



5

Workbench에서이 오류가 발생하지만 터미널에서 로그인 할 수있는 경우 다음 단계를 따르십시오.

먼저 현재 비밀번호로 로그인하십시오.

sudo mysql -u root -p

그런 다음 낮은 강도의 암호를 사용하면 오류가 발생하는 경우가 있으므로 암호를 변경하십시오.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';

FLUSH PRIVILEGES;

그런 다음 종료하고 새 암호로 다시 로그인하십시오.

quit

sudo mysql -u root -p

성공적으로 로그인되면 다음 명령을 입력하십시오.

use mysql;

'Database changed'와 같은 메시지가 표시되고 다음을 입력합니다.

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

해당 유형 이후 :

UPDATE mysql.user set authentication_string=PASSWORD('new-strong-password') where user='root';

그런 다음 다음을 입력하십시오.

FLUSH PRIVILEGES;

그런 다음 종료하십시오.

quit

이제 WORKBENCH에서 새 비밀번호로 로그인 해보십시오. 그것이 효과가 있기를 바랍니다. 감사합니다.


4

Ubuntu 서버에 Testlink를 설치하는 동안이 문제에 직면했으며 다음 단계를 따랐습니다.

mysql -u root
use mysql;
update user set password=PASSWORD("root") where User='root';
flush privileges;
quit

이제 인스턴스를 중지하고 다시 시작하십시오.

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

2

루트 비밀번호를 재설정하는 가장 쉬운 방법은 다음과 같습니다.

  • mysqld --skip-grant-tables 옵션을 다시 시작하십시오 . 이를 통해 누구나 암호없이 모든 권한으로 연결할 수 있습니다. 이것은 안전하지 않기 때문에 원격 클라이언트가 연결하지 못하도록 --skip-networking과 함께 --skip-grant-tables를 사용할 수 있습니다.

  • 다음 명령으로 mysqld 서버에 연결합니다.

  • shell> mysql mysql 클라이언트에서 다음 문을 실행합니다. 암호를 사용하려는 암호로 바꾸십시오.

  • mysql> UPDATE mysql.user SET Password = PASSWORD ( 'MyNewPass')-> WHERE User = 'root'; mysql> FLUSH PRIVILEGES;

  • 서버를 중지 한 다음 정상적으로 다시 시작합니다 (--skip-grant-tables 및 --skip-networking 옵션없이).

소스 Mysql 문서 및 개인 경험 :

http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html



1

Workbench를 관리자로 실행하여 동일한 문제를 해결했습니다.

... 제 경우에는 회사 컴퓨터에 대한 제한 때문인 것 같습니다.


0

이 문제를 해결하려면 다음 단계를 시도하십시오.

  1. 터미널 / 명령 프롬프트를 열고 MySQL 설치 폴더의 bin 폴더로 이동합니다. 그런 다음 명령을 실행하십시오.mysqld --console .
  2. 그 선이 보이면 171010 14:58:22 [Note] --secure-file-priv 이 NULL로 설정된 것을 . 명령 프롬프트에서 위 명령을 실행하면 데이터 가져 오기 및 내보내기와 관련된 작업이 비활성화됩니다.
  3. 그런 다음 확인해야 mysqld Windows 방화벽이나 다른 프로그램에 의해 차단되는지 .
  4. Windows 방화벽에 의해 차단 된 경우 차단을 해제하고 설정을 저장해야합니다.
  5. mysqld또는 mysql응용 프로그램 을 차단 해제하려면 다음 단계를 따르십시오.
    1. 명령 프롬프트로 이동하여 입력 wf.msc하여 방화벽 설정을 엽니 다.
    2. Windows 방화벽을 통해 앱 또는 기능 허용을 클릭합니다.
    3. 확인 mysqld또는 mysqld인스턴스 목록에서 사용할 수 있으며, 공공 및 민간 도메인에 대한 확인란을 선택하고 설정을 저장합니다.
  6. bin 폴더로 돌아가서 1 단계의 명령을 다시 시도하십시오.
  7. 제대로 작동하고 오류가 표시되지 않습니다.

이제 문제없이 MySQL 콘솔을 실행할 수 있습니다!


0

다음 SQL을 사용하고 MySQL 서버를 다시 시작하여 동일한 문제를 해결했습니다.

update mysql.user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y',Create_tablespace_priv='Y'
where user='root';

0

몇 시간 동안 사용자 'root'@ 'localhost'(암호 : YES)에 대한 액세스 거부 작업을 수행했는데 다음과 같은 해결책을 찾았습니다.

The answer to this problem was that in the my.cnf located within
/etc/mysql/my.cnf

the line was either 
bind-address = 127.0.0.1 
            (or)
bind-address = localhost
            (or)
bind-address = 0.0.0.0

I should prefer that 127.0.0.1

I should also prefer 0.0.0.0, it is more flexible 
because which will allow all connections

0

--init-file매개 변수 를 이스케이프 할 필요는 없다고 생각합니다 .

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt

해야한다:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\mysql-init.txt


0

위의 문제에 대해 시스템의 암호는 프로그램에서 전달한 암호와 일치해야합니다. 프로그램을 실행할 때 u가 사용자로 루트를 부여 했으므로 시스템의 암호를 확인하므로 오류가 발생하고 동시에 기록이 발생합니다. 데이터베이스에서 삭제되지 않습니다.

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
class Delete
{
    public static void main(String []k)
    {
        String url="jdbc:mysql://localhost:3306/student";

        String user="root";
        String pass="jacob234";
        try
        {
            Connection myConnection=DriverManager.getConnection(url,user,pass);
            Statement myStatement=myConnection.createStatement();
            String deleteQuery="delete from students where id=2";
            myStatement.executeUpdate(deleteQuery);
            System.out.println("delete completed");
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

시스템 암호를 jacob234로 유지 한 다음 코드를 실행하십시오.


0

나에게도 같은 문제가 있었지만 32 (비트)에서 mysql 서버를 사용하고 있고 워크 벤치가 64 (비트) 버전에서 실행 중이었기 때문에 발생했습니다. 서버와 워크 벤치는 동일한 버전을 가져야합니다.

xpress


0

나를 위해 MYSQLWorkbench를 사용하고 포트는 8889를 사용하는 3306 MAMP였습니다.


0

Laravel 애플리케이션을 사용하여 Mysql 데이터베이스를 연결하려고 할 때 동일한 문제에 직면했습니다. 사용자의 비밀번호를 확인하시기 바랍니다. MySQL 비밀번호에는 # , & 등과 같은 특수 문자가 없어야합니다 .


bluehost에서 암호에서 특수 문자를 제거하면 실제로 문제가 해결되었습니다.
Mena
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.