15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
16.11.2023

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 SUPER atau SYSTEM_USER yang diperlukan untuk mengubah kredensial root.
  • Direktif my.cnf / my.ini yang membatasi: Opsi seperti skip-grant-tables atau kebijakan validate_password kustom dapat mengganggu operasi kata sandi.
  • Ketidakcocokan versi MySQL: Sintaks SET PASSWORD sudah tidak digunakan lagi di MySQL 8.0 dan dihapus dari konteks tertentu. Metode yang lebih disukai adalah ALTER USER.
  • Tabel sistem hanya-baca: Pada beberapa deployment cloud atau terkontainerisasi, skema sistem mysql mungkin 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.

MetodeDukungan Versi MySQLBerfungsi dengan auth_socketDirekomendasikan
SET PASSWORD5.x, sebagian 8.0TidakTidak (sudah tidak digunakan)
ALTER USER5.7+, 8.0+Ya (mengganti plugin)Ya
UPDATE mysql.userSemua versi (dengan flush)Ya (tingkat rendah)Hanya darurat
mysqladmin passwordSemua versiTidakPenggunaan 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 root

Jika sistem Anda menggunakan autentikasi kata sandi dan Anda mengetahui kata sandi saat ini:

mysql -u root -p

Langkah 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 -p

Metode 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 mariadb

2. 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 root

4. 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 mysql

Memeriksa 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 directly

Jika 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_installation untuk menghapus pengguna anonim, database uji, dan login root jarak jauh.
  • Nonaktifkan login root jarak jauh: Pastikan tidak ada entri 'root'@'%' di mysql.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.user secara berkala untuk mengidentifikasi akun dengan nilai authentication_string kosong 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, bukan SET PASSWORDSET PASSWORD sudah tidak digunakan lagi di MySQL 8.0+ dan tidak kompatibel dengan autentikasi berbasis socket.
  • Selalu gunakan sudo mysql pada sistem Ubuntu/Debian — kepercayaan tingkat OS melewati plugin socket tanpa menonaktifkannya.
  • Jangan pernah biarkan skip-grant-tables aktif di produksi — ini menghapus semua kontrol akses dari server database Anda.
  • Pisahkan GRANT dari ALTER USER pada MySQL 8.0+ — sintaks gabungan GRANT ... IDENTIFIED BY tidak 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 -p setelah setiap perubahan untuk mengonfirmasi kredensial baru berfungsi sebelum menutup sesi Anda.
  • Tinjau my.cnf untuk direktif validate_password jika ALTER USER berhasil 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.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai