MySQL 사용자 DB에 비밀번호 열이 없습니다-OSX에 MySQL 설치


172

MySql 루트 비밀번호를 변경하려고합니다.

내가 한 일은 아래에 있습니다.

  1. MySql-5.7.6 ~ .dmg (커뮤니티 서버) 및 워크 벤치를 설치하십시오.
  2. OSX 시스템 환경 설정에서 서버를 끄십시오.
  3. 콘솔로 MySql에 액세스하십시오. 명령은mysqld_safe --skip-grant
  4. 실행 update user set password=password('1111') where user='root';하고 오류 메시지가 나타납니다-> ERROR 1054 (42S22): Unknown column 'password' in 'field list'.

참고로 use mysql; . 그래서 사용자 테이블에서 쿼리를 선택했는데 실제로 암호 열이 존재하지 않습니다.

매우 이상합니다. 원래 사용자 테이블에 비밀번호 열이 없을 수 있습니까?

존재하지 않는 비밀번호를 어떻게 변경합니까?

답변 주셔서 감사합니다 : D


이제 사용자 테이블을 다시 테스트하고 나는 PW없이 MySQL을 액세스 할 수 있습니다 :(는 변경 괜찮습니다 (I 평균 ALTER 사용자 테이블 및 쿼리를 통해 암호 열을 추가)?
Juneyoung 오

root @ localhost에 대한 암호 설정 = password ( 'new-pass')-모든 MySQL 버전에서 작동
SIDU

UPDATE mysql.user SET authentication_string= 'password' WHERE User = 'root'; 필드 'Password'가 mysql에 의해 제거되고 authentication_string으로 대체 되었기 때문입니다. 참고 : mysql 함수 PASSWORD ( 'password')는 출생 일 공격을 사용하여 오래 전에 크랙 된 MD5 알고리즘에 의존합니다. 따라서 공격자가 생성 한 해시를 hashkiller.co.uk/md5-decrypter.aspx 와 같은 공용 웹 사이트에 붙여넣고 일반 텍스트 암호를 검색 할 수 있기 때문에 보안을 잘못 사용하는 것이 안전 합니다.
Dr Deo

답변:


556

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

먼저 데이터베이스를 선택하십시오.

mysql>use mysql;

그런 다음 테이블을 보여줍니다.

mysql>show tables;

사용자 테이블을 찾을 수 있습니다. 이제 해당 필드를 살펴 보겠습니다.

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

놀랍습니다! 'password'라는 필드가없고 암호 필드의 이름은 'authentication_string'입니다. 그래서, 그냥 이렇게하십시오 :

update user set authentication_string=password('1111') where user='root';

이제 모든 것이 정상입니다.

MySQL 5.6에 비해 변경 사항이 상당히 광범위합니다. MySQL 5.7의 새로운 기능


42
당신은 내 하루를 만들었습니다.
Bisonfan95

3
이 방법은 mysqld를 시작할 때 --skip-grant-tables 제한으로도 작동합니다. 익명 사용자이므로 다음을 사용하여 비밀번호를 변경할 수 없습니다. ALTER USER 'root'@ 'localhost' 'new-password'로 식별 됨 ALTER USER 'root'@ '*'* 'new-password'로 식별됩니다. 익명의 사용자 권한 오류입니다.
Bisonfan95

테이블이 전혀 없으면 어떻게해야합니까?
Sahand

1
비밀 번호 필드 이름을 변경 ... 많은 사람들이 너무 많은 문제를 일으킨 한 가지 결정 ...
talsibony

2
2) 단계에서 루트 비밀번호를 재설정 할 때 auth 플러그인도 mysql_native_password로 변경하십시오. use mysql; update user set authentication_string=PASSWORD("") where User='root'; update user set plugin="mysql_native_password" where User='root'; # THIS LINE flush privileges; quit;
Viswa

26

이 오류는 설치시 비밀번호를 설정하지 않은 경우 (이 경우에는 unix-socket plugin을 사용 하는 mysql) 발생합니다 .

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

1) --skip-grant-tables위와 같이 실행하십시오 .

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

2)를 실행 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

그때 sudo service mysql restart. 확인하십시오 mysql -u root -p.

restartmysqld.cnf 파일에서 해당 문자열을 제거 하기 전에 설정하십시오.


에 딱 맞다! plugin = "mysql_native_password"및 플러시 권한이 필요합니다. 다른 예제에서는 작동하지 못했습니다. bl79 감사합니다!
TheRealWebGuy

내가 얻는ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
기회 스미스

당신의 대답은 위대합니다! 이것은 6 시간의 싸움 동안 나를 도와주는 하나의 답변입니다
AlexNikonov

plugin = "mysql_native_password"나를 위해 릭을 완료
Joyner

완벽하게 작동합니다
Mayank Sharma

23

내가 빠뜨린 한 가지 함정은 이제 암호 필드없다는 것입니다 .

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

다음과 같아야합니다.

update user set authentication_string=password('YOURPASSWORDHERE') where user='root';


16

ALTER USER을 업데이트하지 말고 명령을 사용하십시오 USER. 사용자 엔터티는 연결하는 컴퓨터에 의해 자격이 부여되기 때문에 둘 이상의 '루트'사용자가있을 수 있습니다.

https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

예를 들어.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' 
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 

2
MySQL 5.7.9의 경우 제대로 작동하려면 사용자를 변경해야합니다. 감사.
shin

우리는 \ g 다음에 위의 명령을 수행해야했습니다. MySql 사용하기 5.7.12. ty
bobsouza

이 답변은 우분투 16.04, mysql 5.7.19에서만 나에게 효과적이었습니다.
A1Gard

와일드 카드를 @에서 *로 변경 했습니까? Grr ... 이제 여기 왔을 때보 다 더 많은 질문이 있습니다.
pguardiario

4

여기에 언급 된 명령을 "플러시"할 때만 작동했습니다. 내가 사용한 명령의 전체 목록은 다음과 같습니다.

이전 버전의 MySQL 버전에서는 이전 답변이 작동하지 않을 수 있습니다. 이전 답변이 효과가없는 경우 다음 단계를 수행하십시오.

1- wamp 아이콘> mysql> mysql 콘솔을 클릭하십시오.

2- 다음 명령을 하나씩 작성하십시오

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit

4

도와 주셔서 감사합니다. 사람들이 여전히 문제를 겪고 있다면 이것을 시도하십시오.

MySQL 버전 5.6 이하

Mac OS X 'ROOT'암호를 잊어 버려 재설정해야합니까? 다음 4 가지 간단한 단계를 수행하십시오.

  1.  mysqld 서버를 중지하십시오. 일반적으로 '시스템 우선 순위'> MySQL> 'Stop MySQL 서버'에서 수행 할 수 있습니다.
  2.  터미널에서 권한 바이 패스를 사용하여 안전 모드에서 서버를 시작하십시오.      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  새 터미널 창에서 :      sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q
  4.  mysqld 서버를 다시 중지하고 정상 모드에서 다시 시작하십시오.

MySQL 버전 5.7 이상

  1.  mysqld 서버를 중지하십시오. 일반적으로이 작업은 'System Prefrences' > MySQL > 'Stop MySQL Server'
  2.  터미널에서 권한 바이 패스를 사용하여 안전 모드에서 서버를 시작하십시오.      sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3.  새 터미널 창에서 :            sudo /usr/local/mysql/bin/mysql -u root      UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';      FLUSH PRIVILEGES;      \q      
  4.  mysqld 서버를 다시 중지하고 정상 모드에서 다시 시작하십시오.

이 도움말 날 동안 설치 mysql을 <5.7
ANKIT 아가 왈

3

이 문제에 대해서는 간단하고 무례한 방법을 사용하여 필드 이름을 암호로 바 꾸었습니다.이 이유는 시각적 작업 오류에서 mac navicat 프리미엄 소프트웨어를 사용하기 때문입니다. 소프트웨어 자체는 암호를 사용하므로 쉽게 조작 할 수 없습니다. 따라서 데이터베이스 명령 줄을 루트로 실행합니다.

Use mysql;

그런 다음 필드 이름을 수정하십시오.

ALTER TABLE user CHANGE authentication_string password text;

결국 정상입니다.


0

근본 원인 : root에는 비밀번호가 없으며 python connect 문에 비밀번호가 반영되어야합니다.

1698 오류를 해결하려면 Python 연결 비밀번호를 ''로 변경하십시오.

참고 : 수동으로 사용자의 비밀번호를 업데이트해도 문제가 해결되지 않지만 1698 오류가 계속 발생합니다


0

다음과 같이 mysql을 다시 시작한 후에도 비밀번호를 더 설정해야 함을 기억하십시오.

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