Singkatnya, di MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
tempat Anda mengganti NEWPASSWORD dengan kata sandi yang Anda inginkan, dan yang lainnya kata demi kata.
Masalahnya di sini adalah ketika MariaDB atau MySQL diinstal / diperbarui (terutama jika pada beberapa titik root diatur tanpa kata sandi) maka dalam tabel Users kata sandi itu benar-benar kosong (atau diabaikan), dan masuk tergantung pada sistem pengguna yang sesuai ke pengguna MySQL. Anda dapat menguji ini sebagai berikut dengan beralih ke root sistem, lalu ketik:
mysql -uroot -p
Kemudian masukkan tanpa kata sandi atau kata sandi yang salah . Anda mungkin akan diijinkan masuk (Anda bahkan dapat masuk dari root unix hanya # mysql
karena kata sandi tidak relevan dan pengguna didefinisikan).
Jadi, apa yang terjadi? Nah, jika Anda login sebagai root dan lakukan hal berikut:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
Anda akan perhatikan auth_socket
(yang dapat dibaca unix_socket
di MariaDB). Soket ini mengabaikan kata sandi dan memungkinkan pengguna Unix yang sesuai masuk tanpa pemeriksaan kata sandi. Inilah sebabnya mengapa Anda bisa masuk dengan root tetapi tidak dengan pengguna yang berbeda.
Jadi solusinya adalah memperbarui Pengguna untuk tidak menggunakan auth_socket/unix_socket
dan mengatur kata sandi dengan benar.
Pada MariaDB (<10.2, lihat komentar di bawah) yang ada di Ubuntu versi 16 pada 2017 ini sudah cukup. NEWPASSWORD adalah kata sandi Anda. mysql_native_password
Anda mengetik kata demi kata.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(Mungkin saja pengaturan plugin untuk dikosongkan akan berfungsi. YMMV. Saya tidak mencoba ini. Jadi ini adalah alternatif.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Jika tidak:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Kemudian
FLUSH PRIVILEGES;
Sebagai catatan, solusi yang melibatkan menghapus pengguna dan membuatnya kembali dengan '%' membuat saya benar-benar terkunci dari database, dan dapat menyebabkan masalah lain kecuali Anda mendapatkan grant
pernyataan yang tepat - lebih mudah untuk hanya memperbarui root yang sudah Anda miliki.
Dalam pengalaman saya, masalah hanya terjadi pada pengguna root, karena pengguna lain akan ditambahkan secara manual bukan bagian dari instalasi / pembaruan awal.