Memperbaiki Error “SET PASSWORD Has No Significance for User root@localhost” di MySQL
Kesalahan "SET PASSWORD has no significance for user 'root'@'localhost'" terjadi di MySQL ketika server menolak memproses perintah SET PASSWORD untuk akun root — biasanya karena pengguna root diautentikasi melalui plugin auth_socket atau unix_socket daripada metode berbasis kata sandi tradisional. Dalam konfigurasi ini, MySQL mendelegasikan autentikasi ke sistem operasi, sehingga perubahan kredensial berbasis kata sandi tidak berarti di tingkat SQL.
Panduan ini mencakup setiap penyebab utama, urutan diagnostik yang tepat, dan berbagai jalur penyelesaian — termasuk kasus khusus yang muncul pada lingkungan VPS terkelola, server berbasis cPanel, dan sistem produksi yang diperkuat.
Mengapa Kesalahan Ini Terjadi: Analisis Penyebab Utama
Memahami pemicu yang tepat sangat penting sebelum menerapkan perbaikan apa pun. Kesalahan ini bukan kegagalan izin dalam arti tradisional — ini adalah sinyal bahwa lapisan autentikasi MySQL dilewati sepenuhnya untuk akun root.
Plugin auth_socket / unix_socket
Pada Debian, Ubuntu, dan turunannya yang modern, MySQL (dan MariaDB) mengonfigurasi pengguna root untuk mengautentikasi melalui plugin auth_socket secara default. Ketika plugin ini aktif, MySQL memverifikasi identitas pengguna OS yang terhubung alih-alih memeriksa kata sandi. Akibatnya, setiap upaya untuk menetapkan kata sandi menggunakan SET PASSWORD akan ditolak — server menganggap perintah tersebut tidak relevan untuk model autentikasi tersebut.
Anda dapat memverifikasi ini segera setelah masuk:
SELECT user, host, plugin, authentication_string
FROM mysql.user
WHERE user = 'root' AND host = 'localhost';Jika kolom plugin mengembalikan auth_socket (MySQL) atau unix_socket (MariaDB), inilah penyebab utamanya.
Faktor Penyebab Lainnya
- Hak istimewa tidak mencukupi: Pengguna yang menjalankan perintah tidak memiliki hak istimewa
SUPERatauSYSTEM_USERyang diperlukan untuk mengubah kredensial root. - Direktif
my.cnf/my.iniyang membatasi: Opsi sepertiskip-grant-tablesatau kebijakanvalidate_passwordkustom dapat mengganggu operasi kata sandi. - Ketidakcocokan versi MySQL: Sintaks
SET PASSWORDsudah tidak digunakan lagi di MySQL 8.0 dan dihapus dari konteks tertentu. Metode yang lebih disukai adalahALTER USER. - Tabel sistem hanya-baca: Pada beberapa deployment cloud atau terkontainerisasi, skema sistem
mysqlmungkin sebagian terkunci.
Perbandingan: SET PASSWORD vs. ALTER USER vs. UPDATE
Ketiga metode ini tidak dapat dipertukarkan. Memilih yang salah untuk versi MySQL atau plugin autentikasi Anda akan menghasilkan kesalahan yang dimaksud atau gagal secara diam-diam.
| Metode | Dukungan Versi MySQL | Berfungsi dengan auth_socket | Direkomendasikan |
|---|---|---|---|
SET PASSWORD | 5.x, sebagian 8.0 | Tidak | Tidak (sudah tidak digunakan) |
ALTER USER | 5.7+, 8.0+ | Ya (mengganti plugin) | Ya |
UPDATE mysql.user | Semua versi (dengan flush) | Ya (tingkat rendah) | Hanya darurat |
mysqladmin password | Semua versi | Tidak | Penggunaan terbatas |
Penyelesaian Langkah demi Langkah
Langkah 1: Masuk ke MySQL sebagai Root
Pada sistem yang menggunakan auth_socket, Anda harus masuk sebagai pengguna root OS — tidak akan ada prompt kata sandi yang muncul:
sudo mysql -u rootJika sistem Anda menggunakan autentikasi kata sandi dan Anda mengetahui kata sandi saat ini:
mysql -u root -pLangkah 2: Konfirmasi Plugin Autentikasi
Jalankan kueri diagnostik:
SELECT user, host, plugin, authentication_string
FROM mysql.user
WHERE user = 'root';Catat nilai di kolom plugin sebelum melanjutkan. Ini menentukan perbaikan mana yang berlaku untuk situasi Anda.
Langkah 3: Verifikasi Hak Istimewa Saat Ini
Sebelum mengubah autentikasi, konfirmasi set grant akun root:
SHOW GRANTS FOR 'root'@'localhost';Output harus menyertakan GRANT ALL PRIVILEGES ON *.* ... WITH GRANT OPTION. Jika tidak, Anda kemungkinan terhubung sebagai pengguna dengan hak yang tidak mencukupi — autentikasi ulang menggunakan sudo mysql untuk memanfaatkan kepercayaan tingkat OS.
Langkah 4: Beralih ke Autentikasi Kata Sandi dan Tetapkan Kata Sandi Baru
Ini adalah perbaikan utama ketika auth_socket atau unix_socket adalah plugin yang aktif. Pernyataan ALTER USER secara bersamaan mengubah plugin autentikasi dan menetapkan kata sandi dalam satu operasi atomik:
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'YourStrongPassword!9#';
FLUSH PRIVILEGES;Untuk MariaDB, yang setara adalah:
ALTER USER 'root'@'localhost'
IDENTIFIED VIA mysql_native_password
USING PASSWORD('YourStrongPassword!9#');
FLUSH PRIVILEGES;> Catatan keamanan: Pada MySQL 8.0.34 dan yang lebih baru, mysql_native_password sudah tidak digunakan lagi dan digantikan oleh caching_sha2_password. Untuk sistem produksi, gunakan:
>
> “`sql
> ALTER USER 'root'@'localhost'
> IDENTIFIED WITH caching_sha2_password
> BY 'YourStrongPassword!9#';
> “`
Langkah 5: Berikan Hak Istimewa Penuh (Jika Diperlukan)
Jika pemeriksaan hak istimewa di Langkah 3 mengungkapkan grant yang tidak lengkap, pulihkan secara eksplisit:
GRANT ALL PRIVILEGES ON *.*
TO 'root'@'localhost'
WITH GRANT OPTION;
FLUSH PRIVILEGES;Jangan gunakan sintaks GRANT ... IDENTIFIED BY lama pada MySQL 8.0+. Sintaks gabungan tersebut telah dihapus. Selalu pisahkan pernyataan GRANT dan ALTER USER.
Langkah 6: Verifikasi Perbaikan
Konfirmasi bahwa plugin telah diperbarui:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';Keluar dari MySQL dan sambungkan kembali menggunakan kata sandi baru untuk memvalidasi dari ujung ke ujung:
mysql -u root -pMetode Darurat: Mereset melalui skip-grant-tables
Jika Anda terkunci sepenuhnya dan tidak dapat mengautentikasi, gunakan mode skip-grant-tables. Ini melewati semua pemeriksaan hak istimewa dan hanya boleh digunakan dalam jendela pemeliharaan offline yang terkontrol.
1. Hentikan layanan MySQL:
sudo systemctl stop mysql
# or for MariaDB:
sudo systemctl stop mariadb2. Mulai MySQL dengan tabel grant dinonaktifkan:
sudo mysqld_safe --skip-grant-tables --skip-networking &Flag --skip-networking sangat penting — ini mencegah koneksi jarak jauh apa pun selama kondisi tidak aman ini.
3. Hubungkan tanpa kredensial:
mysql -u root4. Flush hak istimewa, lalu perbarui kata sandi:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'YourStrongPassword!9#';
FLUSH PRIVILEGES;5. Mulai ulang MySQL secara normal:
sudo systemctl restart mysqlMemeriksa dan Menyesuaikan File Konfigurasi MySQL
File my.cnf (Linux) atau my.ini (Windows) dapat berisi direktif yang mengganggu operasi kata sandi. Lokasi umum:
/etc/mysql/my.cnf/etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
Periksa direktif bermasalah ini di bagian [mysqld]:
skip-grant-tables # Disables all privilege enforcement — remove after recovery
validate_password # May reject passwords that don't meet complexity rules
bind-address # Affects remote access, not password changes directlyJika validate_password menerapkan kebijakan yang menolak kata sandi yang Anda pilih, penuhi persyaratan kebijakan atau sesuaikan sementara tingkat kebijakan:
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 8;Pertimbangan Khusus Platform
Lingkungan cPanel dan WHM
Pada instalasi VPS dengan cPanel, kredensial root MySQL dikelola oleh cPanel itu sendiri. Mengubah kata sandi root secara manual di luar WHM dapat merusak koneksi database internal cPanel. Selalu gunakan WHM > SQL Services > Change MySQL Root Password untuk lingkungan ini. Jika Anda harus menggunakan CLI, jalankan /usr/local/cpanel/scripts/mysqlpasswd setelahnya untuk menyinkronkan ulang kredensial tersimpan cPanel.
Lingkungan VPS Terkelola
Pada lingkungan VPS Hosting di mana Anda memiliki akses root OS penuh, pendekatan sudo mysql (memanfaatkan auth_socket) adalah titik masuk yang paling andal. Hindari menonaktifkan auth_socket kecuali tumpukan aplikasi Anda secara khusus memerlukan autentikasi root berbasis kata sandi — autentikasi tingkat OS secara arsitektur lebih aman.
Server Dedicated
Pada Dedicated Server yang menjalankan konfigurasi MySQL yang diperkuat, plugin validate_password sering diaktifkan dengan penerapan kebijakan STRONG. Pastikan kata sandi pengganti Anda memenuhi persyaratan minimum: setidaknya 8 karakter, huruf campuran, angka, dan karakter khusus. Anda dapat memeriksa pengaturan kebijakan saat ini dengan:
SHOW VARIABLES LIKE 'validate_password%';Praktik Keamanan Terbaik Setelah Menyelesaikan Kesalahan
Setelah masalah kata sandi root diselesaikan, terapkan langkah-langkah penguatan ini segera:
- Jalankan
mysql_secure_installationuntuk menghapus pengguna anonim, database uji, dan login root jarak jauh. - Nonaktifkan login root jarak jauh: Pastikan tidak ada entri
'root'@'%'dimysql.user. - Buat pengguna khusus aplikasi dengan hak istimewa minimum yang diperlukan daripada menggunakan root untuk koneksi aplikasi.
- Rotasi kredensial yang tersimpan dalam file konfigurasi aplikasi (
.env,wp-config.php,database.yml) agar sesuai dengan kata sandi baru. - Aktifkan SSL/TLS untuk koneksi MySQL — terutama relevan jika server aplikasi dan server database Anda berada di host yang terpisah. Padukan ini dengan Sertifikat SSL yang valid di lapisan web Anda.
- Audit tabel
mysql.usersecara berkala untuk mengidentifikasi akun dengan nilaiauthentication_stringkosong atau wildcard host yang terlalu luas.
Daftar Periksa Poin Penting Teknis
Gunakan ini sebagai matriks keputusan cepat ketika Anda menemukan kesalahan ini:
- Periksa plugin terlebih dahulu — jalankan
SELECT plugin FROM mysql.user WHERE user='root'sebelum mencoba perbaikan apa pun. - Gunakan
ALTER USER, bukanSET PASSWORD—SET PASSWORDsudah tidak digunakan lagi di MySQL 8.0+ dan tidak kompatibel dengan autentikasi berbasis socket. - Selalu gunakan
sudo mysqlpada sistem Ubuntu/Debian — kepercayaan tingkat OS melewati plugin socket tanpa menonaktifkannya. - Jangan pernah biarkan
skip-grant-tablesaktif di produksi — ini menghapus semua kontrol akses dari server database Anda. - Pisahkan
GRANTdariALTER USERpada MySQL 8.0+ — sintaks gabunganGRANT ... IDENTIFIED BYtidak lagi ada. - Pada server cPanel, gunakan WHM atau skrip resync cPanel — perubahan CLI langsung akan merusak sesi database internal cPanel.
- Validasi perbaikan dari ujung ke ujung — sambungkan kembali dengan
mysql -u root -psetelah setiap perubahan untuk mengonfirmasi kredensial baru berfungsi sebelum menutup sesi Anda. - Tinjau
my.cnfuntuk direktifvalidate_passwordjikaALTER USERberhasil tetapi kata sandi ditolak.
Pertanyaan yang Sering Diajukan
Mengapa SET PASSWORD berfungsi di beberapa server tetapi tidak di yang lain?
Perilakunya bergantung pada plugin autentikasi yang ditetapkan untuk akun root. Pada server yang menggunakan mysql_native_password atau caching_sha2_password, SET PASSWORD mungkin masih berfungsi di MySQL 5.7. Pada sistem Ubuntu/Debian di mana auth_socket adalah default, perintah tersebut ditolak karena tidak ada kata sandi yang disimpan atau diperiksa. MySQL 8.0 selanjutnya menghapus penggunaan SET PASSWORD, menjadikan ALTER USER satu-satunya metode yang andal lintas versi.
Bisakah saya mengaktifkan kembali auth_socket setelah beralih ke autentikasi kata sandi?
Ya. Jalankan ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket; lalu FLUSH PRIVILEGES;. Setelah ini, sudo mysql akan berfungsi lagi tanpa kata sandi, dan mysql -u root -p akan gagal. Ini adalah konfigurasi yang direkomendasikan untuk sistem di mana hanya akses root yang diautentikasi oleh OS lokal yang diperlukan.
Apa perbedaan antara FLUSH PRIVILEGES dan memulai ulang MySQL?
FLUSH PRIVILEGES memuat ulang tabel grant dari disk ke memori tanpa memulai ulang layanan. Ini cukup setelah modifikasi UPDATE mysql.user langsung. Pernyataan ALTER USER dan GRANT menulis langsung ke tabel grant dan langsung berlaku — FLUSH PRIVILEGES secara teknis berlebihan setelahnya tetapi tidak berbahaya dan banyak digunakan sebagai tindakan pengamanan.
Mengapa GRANT ALL PRIVILEGES ... IDENTIFIED BY gagal di MySQL 8.0?
MySQL 8.0 menghapus kemampuan untuk membuat atau memodifikasi pengguna secara implisit dalam pernyataan GRANT. Klausa IDENTIFIED BY dalam GRANT sudah tidak digunakan lagi di MySQL 5.7 dan dihapus di 8.0. Anda harus menggunakan CREATE USER atau ALTER USER secara terpisah, lalu mengeluarkan pernyataan GRANT tanpa klausa IDENTIFIED BY.
Apakah aman menjalankan database MySQL pada paket shared hosting?
Untuk proyek pribadi dengan lalu lintas rendah, Shared Web Hosting dengan MySQL terkelola sudah memadai. Namun, Anda tidak akan memiliki akses langsung ke mysql.user, manajemen GRANT, atau file konfigurasi. Untuk beban kerja apa pun yang memerlukan kontrol administratif langsung atas MySQL — termasuk menyelesaikan kesalahan seperti ini — lingkungan VPS Hosting dengan akses root OS adalah pilihan yang tepat.
