MySQL v5.7 kullanarak MySQL 'root' şifresini nasıl değiştirebilirim?


14

Mevcut Çevre:

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)

Parola Değiştirme komutu kullanıcısı:

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

Bir şey mi kaçırıyorum?


mysqlgüvenli modda başlatmayı deneyin . o zaman root şifresini değiştirebilirsiniz
Mongrel

Bu konuyu okuyan herkese. MySQL 5.7, kaputun altında önemli değişiklikler var. Yükseltmeden önce lütfen bunları okuyun .
Rui F Ribeiro

Yanıtlar:


24

MySQL 5.7, passwordalan mysql.usertablo alanının hemen alan adı olan, uzaklaştırılmıştır authentication_string.

Önce veritabanını seçin:

mysql> use mysql;

Ve sonra tabloları göster:

mysql> show tables;

userTabloyu bulacak ve alanlarını göreceksiniz:

mysql> describe user;

Adında bir alan olmadığını password, şifre alanının adlandırıldığını fark edeceksiniz authentication_string. Yani, sadece şunu yapın:

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

@Rui F Ribeiro tarafından önerildiği gibi, alternatif olarak şunları çalıştırabilirsiniz:

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

1
Authentication_string başvurusu için +1. Ayrıca son zamanlarda 5.7
Rui F Ribeiro'a

4
Tamamen bu cevaba yönelik olmasa da, 5.7 için başka bir alternatifSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro

1
@RuiFRibeiro teşekkürler, cevabımı güncelledim
Rahul

1
Rahul Başlangıçta iş parçacığını 5.7'den daha sonra düzenledim, ancak daha sonra sorunun ruhunu daha fazla korumak için MySQL 5.7 kullanarak değiştirdim. örneğin @ Shivu bunun 5.7'de bir değişiklik olduğunu bilmiyordu.
Rui F Ribeiro

1
Bu, sorunu çerçevelemenin bir yoludur. Soruları ve cevapları yalnızca OP'nin yararına değil, daha sonra başkaları için de düzenliyoruz.
Rui F Ribeiro

2

MySQL'in şifre değiştirmenin yolu SET PASSWORD

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

bkz. MySQL 5.7 Referans Kılavuzu / ... / SET PASSWORD Sözdizimi

SET PASSWORD deyimi, bir MySQL kullanıcı hesabına bir açık metin (şifrelenmemiş) veya şifreli değer olarak belirtilen bir parola atar:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Rahul'ın kabul ettiği cevap, şifrenin DMLifadeyle nasıl güncelleneceğini gösterir .

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

Uyarı: bu resmi ve desteklenen bir yol değildir. Ne yaptığınızı bilmiyorsanız sorunlara neden olabilir. Unutma FLUSH PRIVILEGES.

Kullanıcı oluşturma, ayrıcalıklarını değiştirme veya şifresini değiştirme gibi çoğu işlem için üst düzey ifadeleri kullanmak istersiniz. Sadece kullanımı daha kolay değildir ve daha fazla sayıda MySQL sürümüyle uyumludur, aynı zamanda hata yapmanıza da engel olurlar (elbette, “NO_AUTO_CREATE_USER“ sql modunu ayarlamayı unutmayın). Hatta bir Galera kümesi gibi MyISAM düşmanca bir ortamda bile iyi çalışırlar.

FLUSH PRIVILEGES kullanmayı bırak

Lütfen kullanım GRANT, REVOKE, SET PASSWORD, veya RENAME USERdeğil, doğrudan DML ifadeleri.

Güncelleme: SET PASSWORD ... = PASSWORD ('auth_string') sözdizimi MySQL 5.7.6'dan itibaren kullanımdan kaldırıldı ve gelecekteki bir MySQL sürümünde kaldırılacak.


1

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

Eğer giriş yapabilirsiniz o zaman bu ""alışkanlık deneyin ''tek teklif deneyin

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


Myqladmin cevabını tercih ederken, Rahul'ın cevabına bakınız. SQL sorgunuz eski. Myqladmin'i düzelttim, şifre direktifini kaçırdınız.
Rui F Ribeiro

1
Teşekkürler Ribeiro. Kaçırdığımauthentication_string
melez

0

Benim durumumda

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.)

Bu nedenle, güncelleme komutunuzun doğru olduğunu düşünüyorum, ancak mysql sunucunuzu yeniden başlatmanız gerekiyor.


-1

Bu sorun için, basit ve kaba bir yöntem kullandım, alan adını parola olarak yeniden adlandırdım, bunun nedeni görsel işlem hatası mac navicat premium yazılımını kullanmam: 'alan listesi', bilinmeyen sütun 'şifre', yazılımın kendisi şifre kullanmadan kolayca çalıştıramam. Bu nedenle, ben veritabanı komut satırına kök çalıştırmak

Use mysql;

Ardından alan adını değiştirin:

ALTER TABLE user CHANGE authentication_string password text;

Sonuçta normal.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.