Bagaimana cara mengambil nama pengguna dan kata sandi MySQL saya?

158

Saya kehilangan nama pengguna dan kata sandi MySQL saya. Bagaimana cara mengambilnya?

Marcel
sumber

Jawaban:

186

Hentikan proses MySQL.

Mulai proses MySQL dengan opsi --skip-grant-tables.

Mulai klien konsol MySQL dengan opsi -u root.

Daftar semua pengguna;

SELECT * FROM mysql.user;

Setel ulang kata sandi;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Tapi JANGAN LUPA untuk

Hentikan proses MySQL

Mulai Proses MySQL secara normal (yaitu tanpa opsi --skip-grant-tables)

ketika kamu selesai. Jika tidak, keamanan basis data Anda dapat terganggu.

Xenph Yan
sumber
7
Berpikir Anda tidak perlu memulai ulang daemon untuk mengatur ulang pengguna normal. hanya "FLUSH PRIVILEGES;" setelah memperbarui kata sandi pengguna. --skip-grant-tables hanya diperlukan untuk mereset kata sandi pengguna root! Ini umumnya tidak direkomendasikan untuk reset pengguna standar.
Amos Folarin
Apa pentingnya menggunakan dpkg-reconfigure mysql-server-5.5perintah untuk mereset password root MySQL?
phillipsK
@Xenph, Mengapa Anda mengatakan " Mulai klien konsol MySQL dengan opsi -u root "? Tidak ada gunanya melakukan itu sama sekali -udiabaikan ketika server dimulai --skip-grant-tables.
Pacerier
15
Di MySQL 5.7. *, Tidak ada kolom yang mysql.userdipanggil password, gunakan authentication_stringsaja.
Adib Aroui
3
Saya menemukan ini + stackoverflow.com/a/35277160/1604601 sangat membantu
Alien Life Form
42

Sayangnya kata sandi pengguna Anda tidak dapat diperbaiki. Telah hash dengan hash satu arah yang jika Anda tidak tahu tidak dapat dikembalikan. Saya sarankan pergi dengan Xenph Yan di atas dan buat yang baru.

Anda juga dapat menggunakan prosedur berikut dari manual untuk mengatur ulang kata sandi untuk setiap akun root MySQL di Windows:

  1. Masuk ke sistem Anda sebagai Administrator.
  2. Hentikan server MySQL jika sedang berjalan. Untuk server yang berjalan sebagai layanan Windows, buka manajer Layanan:

Menu Mulai -> Panel Kontrol -> Alat Administratif -> Layanan

Kemudian temukan layanan MySQL dalam daftar, dan hentikan. Jika server Anda tidak berjalan sebagai layanan, Anda mungkin perlu menggunakan Task Manager untuk memaksanya berhenti.

  1. Buat file teks dan tempatkan pernyataan berikut di dalamnya. Ganti kata sandi dengan kata sandi yang ingin Anda gunakan.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    Pernyataan UPDATE dan FLUSH masing-masing harus ditulis dalam satu baris. The UPDATE pernyataan me-reset password untuk semua account akar yang ada, dan FLUSH pernyataan memberitahu server untuk reload tabel hibah ke dalam memori.

  2. Simpan file. Untuk contoh ini, file tersebut akan dinamai C: \ mysql-init.txt.
  3. Buka jendela konsol untuk menuju ke prompt perintah:

    Menu Mulai -> Jalankan -> cmd

  4. Mulai server MySQL dengan opsi --init-file khusus :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Jika Anda menginstal MySQL ke lokasi selain C: \ mysql , sesuaikan perintahnya.

    Server mengeksekusi konten file yang dinamai oleh opsi --init-file saat startup, mengubah setiap kata sandi akun root .

    Anda juga dapat menambahkan opsi --console ke perintah jika Anda ingin output server muncul di jendela konsol daripada di file log.

    Jika Anda menginstal MySQL menggunakan Wisaya Instalasi MySQL, Anda mungkin perlu menentukan opsi --defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    Pengaturan --defaults-file yang sesuai dapat ditemukan menggunakan Manajer Layanan:

    Menu Mulai -> Panel Kontrol -> Alat Administratif -> Layanan

    Temukan layanan MySQL dalam daftar, klik kanan padanya, dan pilih opsi Properties. Kolom Path to executable berisi pengaturan --defaults-file .

  5. Setelah server mulai berhasil, hapus C: \ mysql-init.txt .
  6. Hentikan server MySQL, lalu mulai kembali dalam mode normal lagi. Jika Anda menjalankan server sebagai layanan, mulai dari jendela Layanan Windows. Jika Anda memulai server secara manual, gunakan perintah apa pun yang biasanya Anda gunakan.

Anda sekarang harus dapat terhubung ke MySQL sebagai root menggunakan kata sandi baru.

jake
sumber
5
@Jake - terima kasih atas jawabannya. Saya ingin memberikan acungan jempol tetapi untuk beberapa alasan stackoverflow tidak mengizinkan saya melakukannya karena poin reputasi. penjelasan Anda "sayangnya kata sandi pengguna Anda tidak dapat diperbaiki. telah di hash dengan hash satu arah yang jika Anda tidak tahu tidak dapat diubah" adalah kunci untuk pemahaman saya mengapa segala sesuatu yang saya baca di google HANYA memberi saya petunjuk untuk mengubah saya kata sandi. penjelasan yang baik lebih mendalam daripada instruksi saja.
dsdsdsdsd
1
@ jake saya tidak dapat menemukan mysql di daftar layanan Tolong beritahu saya apa yang harus dilakukan?
1
Mengapa milikmu, mysqld-ntbukan mysqld?
Pacerier
Btw, apakah ada opsi non-file --init-file? (Sesuatu yang mirip dengan --executeperintah mysql.exe .)
Pacerier
34

Perbaikan untuk jawaban yang paling berguna di sini:

1] Tidak perlu me-restart server mysql
2] Masalah keamanan untuk server MySQL yang terhubung ke jaringan

Tidak perlu me-restart server MySQL.

gunakan FLUSH PRIVILEGES;setelah pembaruan pernyataan mysql.user untuk perubahan kata sandi.

Pernyataan FLUSH memberi tahu server untuk memuat ulang tabel hibah ke dalam memori sehingga pemberitahuan perubahan kata sandi.

The --skip-grant-optionsmemungkinkan orang untuk terhubung tanpa password dan dengan semua hak istimewa. Karena ini tidak aman, Anda mungkin mau

gunakan --skip-grant-tables bersamaan dengan --skip-networking untuk mencegah klien jarak jauh terhubung.

dari: referensi: reset-permissions-generic

ThinkingMonkey
sumber
@ BerpikirMonkey, Apakah ini tidak menganggap bahwa pengguna yang masuk saat ini memiliki hak untuk mengubah mysql.user ? Namun seringkali, bukan itu masalahnya.
Pacerier
6

Meskipun Anda tidak dapat langsung memulihkan kata sandi MySQL tanpa memaksa, mungkin ada cara lain - jika Anda telah menggunakan MySQL Workbench untuk terhubung ke database, dan telah menyimpan kredensial ke "vault", Anda adalah emas.

Pada Windows, kredensial disimpan dalam % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - dienkripsi dengan CryptProtectData (tanpa entropi tambahan). Penguraian dekripsi mudah dilakukan:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

Atau Anda dapat memeriksa utas DonationCoder ini untuk sumber + yang dapat dieksekusi dari implementasi cepat dan kotor.

snemarch
sumber
2
Ini sempurna. Ada exe dengan kode sumber pada snemarch utas yang disebutkan untuk mengambil kata sandi akun pengguna saya yang disimpan di brankas MySQL Workbench saya. Meskipun metode lain ini mungkin akan berfungsi juga jika saya memiliki hak untuk membaca atau memperbarui tabel pengguna.
RobbZ
Tapi secara relatif, sangat sedikit orang yang menggunakan Workbench.
Pacerier
Berikut ini adalah implementasi lain yang dapat dijalankan setelah membangun dengan Visual Studio untuk memulihkan informasi nama pengguna dan kata sandi Workbench yang disimpan: github.com/wclear/MySQLWorkbenchPasswordViewer
bnp887
6

Lakukan tanpa down time

Jalankan perintah berikut di Terminal untuk terhubung ke DBMS (Anda perlu akses root):

sudo mysql -u root -p;

jalankan perbarui kata sandi pengguna target (misalnya nama pengguna saya mousavidan kata sandinya 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

pada titik ini Anda perlu melakukan flush untuk menerapkan perubahan:

FLUSH PRIVILEGES;

Selesai! Anda melakukannya tanpa berhenti atau mulai ulang layanan mysql.

SMMousavi
sumber
5

Jika Anda memiliki akses root ke server tempat mysql berjalan, Anda harus menghentikan server mysql menggunakan perintah ini

sudo service mysql stop

Sekarang mulai mysql menggunakan perintah ini

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Sekarang Anda dapat masuk ke mysql menggunakan

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Instruksi lengkap dapat ditemukan di sini http://www.techmatterz.com/recover-mysql-root-password/

Sajjad Ashraf
sumber
3

Login MySql dari windows cmd menggunakan pengguna yang ada:

mysql -u username -p
Masukkan kata sandi: ****

Kemudian jalankan perintah berikut:

mysql> SELECT * FROM mysql.user;

Setelah itu menyalin kata sandi md5 terenkripsi untuk pengguna yang sesuai dan ada beberapa aplikasi dekripsi kata sandi online yang tersedia di web. Gunakan kata sandi dekripsi ini dan gunakan ini untuk login di lain waktu. atau perbarui kata sandi pengguna menggunakan perintah mengalir:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Kemudian login menggunakan kata sandi dan pengguna baru.

Islam yang baik
sumber
0

JIKA Anda mengatur ODBC, Anda bisa mendapatkan kata sandi dari file konfigurasi ODBC. Ini ada di /etc/odbc.ini untuk Linux dan di folder Software / ODBC di registri di Windows (ada beberapa - mungkin perlu berburu)

samplesize1
sumber
0

Simpan file. Untuk contoh ini, file tersebut akan dinamai C: \ mysql-init.txt. itu meminta izin administratif untuk menyimpan file

pengguna12261119
sumber
-1

Meskipun interpretasi yang ketat, logis, ilmu komputer tentang pertanyaan op akan memerlukan baik "Bagaimana cara mengambil nama pengguna MySQL saya" dan "kata sandi" - saya pikir Mungkin berguna bagi seseorang untuk juga mengatasi interpretasi OR . Dengan kata lain ...

1) Bagaimana cara mengambil nama pengguna MySQL saya?

ATAU

2) kata sandi

Kondisi yang terakhir ini sepertinya sudah banyak ditangani sehingga saya tidak akan repot-repot dengan itu. Berikut ini adalah solusi untuk kasus "Bagaimana cara saya mengembalikan nama pengguna MySQL saya" saja. HIH.

Untuk menemukan nama pengguna mysql Anda, jalankan perintah berikut dari shell mysql ...

PILIH Pengguna DARI mysql.user;

itu akan mencetak tabel semua pengguna mysql.

bersinar
sumber
1
Ini adalah jawaban yang terlambat dan Anda harus memposting ini hanya jika solusi Anda jelas berbeda dari yang sudah diposting atau diterima. Tidak dalam kasus ini, terutama jawaban Anda menduplikasi jawaban yang diterima.
m.cekiera