mysql (mariadb) ERROR 1698 (28000): Akses ditolak untuk pengguna 'root' @ 'localhost'

23

Saya sedang mengerjakan Xubuntu 15.04. Saya sudah menginstal MariaDB-Server pada berbagai sistem dan selalu dimintai kata sandi root selama instalasi. Namun, kali ini, saya tidak ingat dimintai kata sandi. Ketika saya mencoba masuk tanpa kata sandi (atau kata sandi kosong), saya mendapatkan Access denied for user 'root'@'localhost'kesalahan. Saya mencoba mencopot paket sepenuhnya

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

Ketika saya menginstal ulang, saya masih belum mendapatkan kata sandi root.

Saya mencoba mysqld --skip-grant-tablespendekatan dari mysql cara memperbaiki Access ditolak untuk pengguna 'root' @ 'localhost' . Saya dapat memodifikasi kata sandi untuk pengguna root di database mysql - setidaknya nilai perubahan hash - tapi saya masih tidak bisa masuk dengan kata sandi baru setelah restart server mysql. Saya tetap mengalami masalah yang sama.

Debian-sys-Maint pengguna tidak ada. Jadi, saya tidak bisa menggunakannya untuk memperbaiki apa pun.

Ada ide apa lagi yang bisa saya coba?

d72b617c
sumber
Utas bermanfaat dengan pertanyaan yang sama tentang StackOverflow: stackoverflow.com/questions/39281594/…
Kevin - Reinstate Monica

Jawaban:

36

Anda perlu mengatur ulang kata sandi. jadi untuk itu

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
Abhinav bhardwaj
sumber
9
"Keajaiban" yang tidak jelas untuk pendekatan ini adalah bahwa pengguna sistem operasi root dapat login ke database tanpa harus menentukan kata sandi karena plugin: auth_socketdiaktifkan, secara default. Dengan kata lain, tidak perlu menggunakan --skip-grant-tablesseperti yang diperlukan di versi MySQL sebelumnya. (Juga, secara teknis, ukuran ini bukan "mengatur ulang kata sandi"; ini menonaktifkan plugin.)
Ben Johnson
1
+1, dapatkah Anda menjelaskan alasannya?
A1Gard
4
Pendekatan ini akan menimbulkan masalah nantinya. Jika Anda menonaktifkan plug-in, tugas cron harian akan terputus karena menganggapnya bisa masuk dengan plug-in itu. Lihat jawaban saya untuk detailnya.
colan
11

Gagasan dengan pengaturan baru adalah Anda tidak boleh menggunakan kata sandi sama sekali. Lihat UNIX_SOCKET Authentication Plugin untuk detailnya.

Apa yang sangat relevan adalah isi dari /usr/share/doc/mariadb-server-10.0/README.Debian.gz di Ubuntu 16.04:

Pada pemasangan baru, tidak ada kata sandi root yang ditetapkan dan tidak ada lagi pengguna debian-sys-Maint yang dibuat. Sebagai gantinya akun root MariaDB diatur untuk diautentikasi menggunakan soket unix, mis. Setiap doa mysqld oleh root atau melalui sudo akan membuat pengguna melihat prompt mysqld.

Anda mungkin tidak pernah menghapus "root" pengguna mysql. Meskipun tidak memiliki kata sandi yang disetel, plugin unix_auth memastikan bahwa itu hanya dapat dijalankan secara lokal sebagai pengguna root.

Kredensial di /etc/mysql/debian.cnf menentukan pengguna yang digunakan oleh skrip init untuk menghentikan server dan melakukan logrotation. Ini dulunya adalah pengguna debian-sys-Maint yang tidak lagi digunakan sebagai root dapat berjalan secara langsung.

Jadi, jika Anda menonaktifkan plug-in untuk root dan mengatur kata sandi, tugas cron harian akan terputus karena menganggapnya akan login sebagai root tanpa kata sandi, tetapi dengan plug-in.

Kemudian dikatakan:

Skrip harus dijalankan karena pengguna memiliki dana bantuan yang diperlukan dan diidentifikasi melalui unix_socket.

Jadi sepertinya kata sandi seharusnya tidak lagi digunakan oleh aplikasi.

colan
sumber
1
Saya baru saja menemukan masalah yang Anda jelaskan: "So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."Implikasi yang tidak jelas dari UNIX_SOCKET Authentication Plugin sedang diaktifkan (yang sekarang menjadi default) adalah kemampuan seseorang untuk mengautentikasi sebagai pengguna basis data root dengan kata sandi dinonaktifkan. Tidak ada tempat di mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin adalah batasan yang disebutkan ini. Dengan demikian, tidak mungkin untuk login sebagai root misalnya melalui SSH.
Ben Johnson
2

Saya memecahkan masalah berikut jawaban dari posting ini:

Tidak dapat mengatur ulang kata sandi root MySQL (MariaDB)

Kita harus mengubah bidang plugin mysql.user untuk semua root menjadi string kosong.

d72b617c
sumber
Masalah ini dijelaskan di sini: percona.com/blog/2016/03/16/...
antonu17
3
Pendekatan ini akan menimbulkan masalah nantinya. Jika Anda menonaktifkan plug-in, tugas cron harian akan terputus karena menganggapnya bisa masuk dengan plug-in itu. Lihat jawaban saya untuk detailnya.
colan
1

Saya melakukannya dengan menjalankan perintah ini, tepat setelah instalasi:

$ sudo mysql_secure_installation

Pada langkah pertama, kata sandi kosong, jadi cukup tekan Enter.

dxvargas
sumber
1
Ini tidak kosong jika sudah diset, yang pw saya lupa adalah ... jadi masih tidak bisa masuk
Dave Everitt
0

Saya memiliki masalah yang sama pada pi raapberry dengan peregangan. Solusi saya adalah membuat pengguna baru dengan semua hak istimewa dengan melakukan hal berikut:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

Sekarang saya bisa masuk dan kami pengguna "admin" sebagai superuser.

Saya harap ini akan membantu seseorang.

trasba
sumber
0

Cukup gunakan sudo mysql -u root- itu saja


Detail: Versi yang lebih baru mengautentikasi ke mysql menggunakan otentikasi sistem. Jadi jika Anda bisa sudo ke OS, itu mengasumsikan Anda db root juga. Anda dapat mengkonfirmasi ini dengan mengeluarkan sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;". Anda akan melihat sesuatu seperti ini (mungkin dengan auth_socketdi distro lain)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+
DeepSpace101
sumber
Saya masuk sebagai root, tetapi bagi saya perintah ini masih menginginkan kata sandi root MariaDB ... yang saya lupa :-(
Dave Everitt