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

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



답변

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의 새로운 기능


답변

이 오류는 설치시 비밀번호를 설정하지 않은 경우 (이 경우에는 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 파일에서 해당 문자열을 제거 하기 전에 설정하십시오.


답변

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

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

다음과 같아야합니다.

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


답변

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' 


답변

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

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

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

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

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


답변

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

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 서버를 다시 중지하고 정상 모드에서 다시 시작하십시오.

답변

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

Use mysql;

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

ALTER TABLE user CHANGE authentication_string password text;

결국 정상입니다.