MySQL v5.7을 사용하여 MySQL 'root'비밀번호를 변경하는 방법은 무엇입니까?


14

현재 환경 :

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

비밀번호 변경 명령 ​​사용자 :

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

뭔가 빠졌습니까?


mysql안전 모드에서 시작해보십시오 . 루트 암호를 변경할 수 있습니다
Mongrel

이 글을 읽는 사람에게. MySQL 5.7에는 많은 변화가있었습니다. 업그레이드 하기 전에 이에 대해 읽어보십시오 .
Rui F Ribeiro

답변:


24

MySQL은 5.7에서 password필드 mysql.user테이블 필드는 이제 필드 이름이 제거되었습니다 authentication_string.

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

mysql> use mysql;

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

mysql> show tables;

user테이블 을 찾아 해당 필드를 볼 수 있습니다.

mysql> describe user;

이름이 지정된 필드가없고 password암호 필드가 이름이 지정된 것을 알 수 authentication_string있습니다. 그래서 그냥 이렇게하십시오 :

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

@Rui F Ribeiro가 제안한대로 다음을 실행할 수 있습니다.

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

1
authentication_string 참조의 경우 +1 또한 최근에 5.7로 업그레이드 한 후 이에 대해 알게되었습니다.
Rui F Ribeiro

4
이 답변에 전적으로 지시 된 것은 아니지만 5.7의 또 다른 대안은 다음과 같습니다SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro

1
@RuiFRibeiro 감사합니다, 내 답변을 업데이트
Rahul

1
Rahul 처음에는 스레드를 5.7 이상으로 편집했지만 MySQL 5.7을 사용하여 스레드를 변경하여 문제의 정신을 더 많이 유지했습니다. 예를 들어 @Shivu는 그것이 5.7의 변화라는 것을 몰랐습니다.
Rui F Ribeiro

1
그것은 질문을 구성하는 방법입니다. 우리는 OP의 이익을 위해서뿐만 아니라 나중에 다른 사람들을 위해 질문과 답변을 편집하고 있습니다.
Rui F Ribeiro 2016 년

2

비밀번호를 변경하는 MySQL의 방법은 SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

참조 MySQL의 5.7 참조 설명서 / ... / SET 암호 구문

SET PASSWORD 문은 비밀번호를 MySQL 사용자 계정에 지정하며 일반 텍스트 (암호화되지 않은) 또는 암호화 된 값으로 지정됩니다.

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Rahul의 대답은 DML문장으로 암호를 업데이트하는 방법을 보여줍니다 .

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

경고 : 공식적이고 지원되는 방법이 아닙니다. 자신이하는 일을 모른다면 문제를 일으킬 수 있습니다. 잊지 마세요 FLUSH PRIVILEGES.

사용자 작성, 권한 변경 또는 비밀번호 변경과 같은 대부분의 조작에는 고급 명령문을 사용하려고합니다. 사용하기 쉬울뿐만 아니라 더 많은 수의 MySQL 버전과 호환 될뿐만 아니라 실수를 방지 할 수 있습니다 (물론“NO_AUTO_CREATE_USER”sql 모드를 설정해야합니다). 그들은 심지어 Galera 클러스터와 같은 MyISAM 적대적인 환경에서도 잘 작동합니다.

FLUSH PRIVILEGES 사용 중지

이용 해주세요 GRANT , REVOKE, SET PASSWORD, 또는 RENAME USER이 아닌 직접 DML 문.

업데이트 : SET PASSWORD ... = PASSWORD ( 'auth_string') 구문은 MySQL 5.7.6 부터 더 이상 사용되지 않으며 향후 MySQL 릴리스에서 제거 될 예정입니다.


1

mysqladmin -u user-name password -p "oldpassword" "newpass"

로그인 할 수 있다면 ""시도해보십시오 ''작은 따옴표를 사용해보십시오

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';


mysqladmin 답변을 선호하지만 Rahul의 답변을 참조하십시오. SQL 쿼리가 오래되었습니다. mysqladmin을 수정했는데 암호 지시문이 누락되었습니다.
Rui F Ribeiro

1
감사합니다 Ribeiro. 보고 싶었습니다authentication_string
Mongrel

0

나의 경우에는

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

따라서 업데이트 명령이 옳다고 생각하지만 mysql 서버를 다시 시작해야합니다.


-1

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

Use mysql;

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

ALTER TABLE user CHANGE authentication_string password text;

결국 정상입니다.

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