[mysql] MySQL 사용자 DB에 비밀번호 열이 없습니다-OSX에 MySQL 설치
MySql 루트 비밀번호를 변경하려고합니다.
내가 한 일은 아래에 있습니다.
- MySql-5.7.6 ~ .dmg (커뮤니티 서버) 및 워크 벤치를 설치하십시오.
- OSX 시스템 환경 설정에서 서버를 끄십시오.
- 콘솔로 MySql에 액세스하십시오. 명령은
mysqld_safe --skip-grant
- 실행
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
.
restart
mysqld.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 가지 간단한 단계를 수행하십시오.
- mysqld 서버를 중지하십시오. 일반적으로 ‘시스템 우선 순위’> MySQL> ‘Stop MySQL 서버’에서 수행 할 수 있습니다.
- 터미널에서 권한 바이 패스를 사용하여 안전 모드에서 서버를 시작하십시오.
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 새 터미널 창에서 :
sudo /usr/local/mysql/bin/mysql -u root
UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';
FLUSH PRIVILEGES;
\q
- mysqld 서버를 다시 중지하고 정상 모드에서 다시 시작하십시오.
MySQL 버전 5.7 이상
- mysqld 서버를 중지하십시오. 일반적으로이 작업은
'System Prefrences' > MySQL > 'Stop MySQL Server'
- 터미널에서 권한 바이 패스를 사용하여 안전 모드에서 서버를 시작하십시오.
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 새 터미널 창에서 :
sudo /usr/local/mysql/bin/mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';
FLUSH PRIVILEGES;
\q
- mysqld 서버를 다시 중지하고 정상 모드에서 다시 시작하십시오.
답변
이 문제에 대해서는 간단하고 무례한 방법을 사용하여 필드 이름을 암호로 바 꾸었습니다.이 이유는 시각적 작업 오류에서 mac navicat 프리미엄 소프트웨어를 사용하기 때문입니다. 소프트웨어 자체는 암호를 사용하므로 쉽게 조작 할 수 없습니다. 따라서 데이터베이스 명령 줄을 루트로 실행합니다.
Use mysql;
그런 다음 필드 이름을 수정하십시오.
ALTER TABLE user CHANGE authentication_string password text;
결국 정상입니다.