mysql 사용자 'root'@ 'localhost'에 대한 액세스 거부 수정 방법


123

무언가를 망치기 전에을 사용하여 로그인 $ mysql -u root -p하고 데이터베이스를 표시하십시오.

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| game_data          |
| test               |
+--------------------+

그런 다음 새 사용자를 만들려고 시도했지만 PRIVILEGES에 문제가 있음을 알았습니다.

그래서 새로운 사용자를 삭제했는데 실수로 'root'와 'Admin'을 제거했다고 생각합니다.

그런 다음 'root'를 다시 만들려고하지만 모든 권한을 부여 할 때 액세스 거부 오류가 발생합니다.

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

를 사용하여 MySQL에 다시 로그인하고 $ mysql -u root -p데이터베이스를 표시하면,

+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+

다른 모든 데이터베이스는 사라졌습니다.

지금 MySQL을 어떻게 수정합니까?

데이터베이스 'mysql'을 찾을 수 없으며 데이터베이스를 만들거나 사용자를 만들 수 없습니다.

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

MacPorts를 사용하여 MySQL을 다시 설치해야합니까? 다시 설치하면 데이터베이스가 손실됩니다 game_data.


'root'@ 'localhost'와 다른 'root'@'127.0.0.1'을 사용하여 서버에 액세스하십시오. 그런 다음 'root'@ 'localhost'사용자를 작성하고 모든 권한을 부여하는 명령을 발행하십시오.
Gimmy

또한 MySQL이 루트 사용자에게 권한을 부여하는 방법을 참조하십시오 . 슈퍼 유저. 비밀번호 재설정을 피하려고 시도합니다.
jww

방금 -p비밀번호와 비밀번호 사이에 공백이있었습니다 . 나는 그 어리석은 것을 알고 있지만 누군가를 도울 수 있습니다.
Vinay Wadhwa

답변:


132

아래 단계를 따르십시오.

  1. --skip-grant-tables옵션 (보안 설정)으로 MySQL 서버 인스턴스 또는 데몬을 시작하십시오 .

    $ mysqld --skip-grant-tables
    
  2. 이 진술을 실행하십시오.

    $ mysql -u root mysql
    $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';
    $mysql> FLUSH PRIVILEGES;
    

위의 알 수없는 필드 비밀번호 오류가 발생하면 다음을 사용하십시오.

update user set authentication_string=password('my_password') where user='root';
  1. 마지막으로 --skip-grant-tables옵션 없이 인스턴스 / 데몬을 다시 시작하십시오 .

    $ /etc/init.d/mysql restart
    

이제 새 비밀번호로 연결할 수 있습니다.

$ mysql -u root -p

암호를 입력: my_password

MySQL "ibdata1을 잠글 수 없음"오류 수정

sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart

1
"$ mysqld --skip-grant-tables"및 "InnoDB : ./ibdata1을 잠글 수 없음, 오류 : 35 InnoDB : 다른 mysqld 프로세스가 없는지 확인하십시오 InnoDB : 동일한 InnoDB 데이터 또는 로그 파일 사용."?

위의 내 업데이트 참조
Yogus

서비스 mysql을 정지 - 나는 첫 번째 명령을 실행하기 전에 MySQL을 중지하면 발생하지 잠금 오류를 중지 발견
프랭크 Tzanabetis에게

7
분명히 'password'열이 더 이상 존재하지 않습니다. 'authentication_string'으로 대체되었습니다. 암호 업데이트 문자열은 다음과 같습니다. UPDATE user SET authentication_string = PASSWORD ( 'my_password') 여기서 USER = 'root';
jdmcnair

1
감사합니다! 그리고 지금 궁금합니다. 무엇이 원인 일 수 있습니까? Windows에서?
Ilia Andrienko

64

위의 어느 것도 나를 위해 도움이되지 않았습니다. 플러그인 메소드를 지워야한다는 것을 알았습니다. 5.6에서 나는 할 수 있었다 :

sudo mysql -u root
use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;

5.7에서 다음을 수행해야한다는 것을 알았습니다.

sudo mysql -u root
use mysql;
[mysql] update user set plugin='mysql_native_password' where User='root';
[mysql] flush privileges;

문서에 따르면 플러그인이 빈 문자열로 설정되어 있으면 기본적으로 mysql_native_password가 기본값으로 설정되어 있지만 빈 암호 해시로 인해 혼란 스러울 수 있습니다. 더 많은 뉘앙스를 보려면 https://dev.mysql.com/doc/refman/5.7/en/native-authentication-plugin.html 에서 설명서를 읽을 수 있습니다.


5
이것은 나를 위해 해결했습니다. mysql 데몬의 상태를 살펴보면 "[경고] 'user'항목 'root @ localhost'에 암호와 인증 플러그인이 모두 지정되어 있습니다. 암호는 무시됩니다." 플러그인을 ''로 설정하면 다시 로그인 할 수있었습니다. 감사합니다,
@Mario

플러그인이 비어있었습니다. 재미있는 것은 자동으로 공백으로 바뀐다는 것입니다. dist-upgrades를 사용하는 개인용 컴퓨터에 설치하는 것에 대해 이야기하고 있으므로 루트 사용자가 침입 한 이유 일 수 있습니다.
Kim의 친구

2
set plugin='mysql_native_password'고맙습니다! 참조 : dev.mysql.com/doc/refman/5.7/en/…
Koen.

2018 년에 시작되는 그라운드 업 패키지 설치에서 이것이 여전히 문제가되는 이유는 무엇입니까?
mckenzm

1
우분투 18, 그것은 작동
Rahal Kanishka

8

또한 테이블의 필요한 레코드에 userplugin필드 가 있는지 확인하십시오 (예 :가있을 수 있음 "unix_socket").

버전 5.5.7부터 mysql은 다양한 인증 플러그인을 지원합니다 https://dev.mysql.com/doc/refman/5.6/en/authentication-plugins.html

따라서 비어 있지 않은 plugin필드 가 있으면 암호가 무시되고 mysql 오류 로그에 경고가 표시됩니다 (나에게는 /var/log/mysql/error.log).

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.


1
mysql 서버 5.7.15를 실행할 때이를 실행하는 다른 사람의 경우 플러그인을 제공하지 않으면 실제로 사용자를 잠급니다. 아마 당신이 찾고있는 것은 plugin입니다 mysql_native_password.
Jonathan Cantrell

8
grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)

이 같은 것을 볼 수 있습니다;

[root@SERVER ~]# grep 'temporary password' /var/log/mysqld.log
2016-01-16T18:07:29.688164Z 1 [Note] A temporary password is generated for root@localhost: O,k5.marHfFu
2016-01-22T13:14:17.974391Z 1 [Note] A temporary password is generated for root@localhost: b5nvIu!jh6ql
2016-01-22T15:35:48.496812Z 1 [Note] A temporary password is generated for root@localhost: (B*=T!uWJ7ws
2016-01-22T15:52:21.088610Z 1 [Note] A temporary password is generated for root@localhost: %tJXK7sytMJV
2016-01-22T16:24:41.384205Z 1 [Note] A temporary password is generated for root@localhost: lslQDvgwr3/S
2016-01-22T22:11:24.772275Z 1 [Note] A temporary password is generated for root@localhost: S4u+J,Rce_0t
[root@SERVER ~]# mysql_secure_installation

MySQL 서버 배포 보안

Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

New password: 

Re-enter new password:

당신이 그것을 볼 경우

... Failed! Error: Your password does not satisfy the current policy requirements
That means your password needs to have a character such as ! . # - etc...
mix characters well, upper case, lower case, ! . , # etc...

New password: 

Re-enter new password: 
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

New password: 

Re-enter new password: 

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 
[root@SERVER ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.10 MySQL Community Server (GPL)

이 비디오 의 마지막 10 분을 보고 어떻게하는지 알려줍니다.


이것이 질문에 대한 답변이 될 수 있지만 링크 된 내용에 대한 자세한 설명을 제공하고 질문과의 관련성을 설명해야합니다. 이렇게하면 연결된 페이지가 제거되거나 오프라인 상태가 될 때이 답변이 유용하게 유지됩니다. 자세한 내용은 이 Meta Stack Exchange 게시물을 참조하십시오 .
bwDraco

이것은 내가 본 유스 케이스입니다 .Ansible을 사용하여 AWS의 RHEL7에 mysql을 설치하고 DB를 재구성하고 다시 시작한 후에도 동일한 동작이 나타납니다. 이것이 처음 발생하는 이유를 알고 있습니까, Ansible이 로컬 mysqld에 액세스하여 구성하는 것을 차단하고 있습니다. 이것은 단지 테스트 목적입니다.
einarc 2016 년

: 분명히 당신이 서버를 초기화하는 방법에 따라 달라집니다, 여기에 4 단계에서 볼 dev.mysql.com/doc/refman/5.7/en/...
einarc

3

시도 해봐:

mysql --no-defaults --force --user=root --host=localhost --database=mysql 
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;

6
--no-defaults --force스위치의 기능 을 설명 할 수 있습니까 ? 그렇지 않으면 위의 허용되는 답변과 VLQ 복제본입니다.
Canadian Luke

@CanadianLuke 기본값은 포함되어 있지 않은 구성 파일을 건너 뛰지 않으며 발행 된 SQL 명령 중 하나라도 실패하더라도 강제로 작동을 계속합니다. 의심
스러운

3
답변을 편집해야합니다
Canadian Luke

2
나는 얻는다ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
Jonathan


3

필자의 경우 데비안에서 mysql을 다시 시작한 후 루트 로그인에 암호가 없었습니다. 해결책은 다음과 같습니다.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

다른 답변들도 native_password 플러그인에 대해 언급했지만 이것이 복잡한 조정없이 수행 할 수있는 방법입니다. 그것이 변화되는 방식입니다.

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