จะเปลี่ยนรหัสผ่าน 'รูท' โดยใช้ MySQL v5.7 ได้อย่างไร?


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.userauthentication_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
+1 สำหรับการอ้างอิง authentication_string ฉันเพิ่งค้นพบเกี่ยวกับมันหลังจากอัพเกรดเป็น 5.7
Rui F Ribeiro

4
ในขณะที่มันไม่ได้ถูกนำไปใช้กับคำตอบนี้ทางเลือกอื่นสำหรับ 5.7 คือSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro

1
@RuiFRibeiro ขอบคุณอัปเดตคำตอบของฉัน
Rahul

1
ราหุลตอนแรกฉันแก้ไขเธรดให้ช้ากว่า 5.7 แต่จากนั้นเปลี่ยนเป็นใช้ MySQL 5.7 เพื่อรักษาจิตวิญญาณของคำถาม เช่น @Shivu ไม่รู้ว่าเป็นการเปลี่ยนแปลงใน 5.7
Rui F Ribeiro

1
มันเป็นวิธีในการกำหนดคำถาม เราไม่ได้แก้ไขคำถามและคำตอบเพื่อผลประโยชน์ของ OP เท่านั้น แต่ยังเพื่อผู้อื่นในภายหลัง
Rui F Ribeiro

2

วิธีการเปลี่ยนรหัสผ่านของ MySQL คือ SET PASSWORD

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

ดูคู่มือการอ้างอิง MySQL 5.7 / ... / SET PASSWORD ไวยากรณ์

คำสั่ง SET PASSWORD จะกำหนดรหัสผ่านให้กับบัญชีผู้ใช้ MySQL ซึ่งระบุว่าเป็นข้อความที่ไม่ได้เข้ารหัส (เข้ารหัส) หรือเข้ารหัส:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

คำตอบที่ได้รับการยอมรับจากราหุลแสดงวิธีการอัพเดตรหัสผ่านด้วยDMLคำสั่ง

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

คำเตือน: นั่นไม่ใช่วิธีที่เป็นทางการและสนับสนุน อาจทำให้เกิดปัญหาได้หากคุณไม่รู้ว่ากำลังทำอะไรอยู่ FLUSH PRIVILEGESอย่าลืม

สำหรับการดำเนินการส่วนใหญ่เช่นการสร้างผู้ใช้การเปลี่ยนสิทธิ์หรือเปลี่ยนรหัสผ่านคุณจะต้องใช้คำสั่งระดับสูง ไม่เพียง แต่พวกเขาจะใช้งานง่ายขึ้นและเข้ากันได้กับเวอร์ชัน MySQL จำนวนมากขึ้น แต่ยังป้องกันไม่ให้คุณทำผิดพลาด (แน่นอนอย่าลืมตั้งค่าโหมด“ NO_AUTO_CREATE_USER“ sql) พวกเขามักจะทำงานได้ดีในสภาพแวดล้อมที่เป็นมิตรกับ MyISAM เช่นคลัสเตอร์ Galera

หยุดใช้สิทธิ์ล้าง

กรุณาใช้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.)

ดังนั้นฉันคิดว่าคำสั่ง update ของคุณถูกต้อง แต่คุณต้องรีสตาร์ทเซิร์ฟเวอร์ mysql ของคุณ


-1

สำหรับปัญหานี้ฉันใช้วิธีที่เรียบง่ายและหยาบคายเปลี่ยนชื่อฟิลด์เป็นรหัสผ่านด้วยเหตุนี้ฉันจึงใช้ซอฟต์แวร์พิเศษ mac navicat ในข้อผิดพลาดในการมองเห็น: คอลัมน์ 'รหัสผ่าน' ใน 'รายการฟิลด์' ไม่รู้จัก ตัวซอฟต์แวร์เองใช้รหัสผ่านเพื่อที่ฉันจะไม่สามารถใช้งานได้อย่างง่ายดาย ดังนั้นฉันรูทเข้าไปในบรรทัดคำสั่งฐานข้อมูลให้รัน

Use mysql;

จากนั้นแก้ไขชื่อฟิลด์:

ALTER TABLE user CHANGE authentication_string password text;

หลังจากปกติทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.