05 April 2018

MySQL (MariaDB) ERROR 1698 (28000): Access denied for user 'root'@'localhost'

SN Blog - Setelah saya menginstall MariaDB Server serta phpmyadmin pada Xubuntu 16.04. Saat hendak login via phpmyadmin saya mendapatkan pesan error "ERROR 1698 (28000): Access denied for user 'root'@'localhost'".

Ketika saya coba login ke MariaDB Server via console terminal dengan user "root" bisa login, lalu saya coba login kembali via phpmyadmin dan hasilnya tetap sama.

Setelah googling akhirnya saya menemukan pencerahan. Berdasarkan dokumentasi, MariaDB Server 10 secara default pada installasi baru MariaDB Server, user "root" tidak ter-set password dan authentikasi menggunakan unix socket sehingga hanya bisa login dengan user root dari lokal saja.

Pada dokumentasi juga dijelaskan bahwa sebaiknya tidak menghapus user "root" meskipun tidak ada password yang di set. Plugin unix_auth memastikan bahwa hanya bisa menjalankan user root dari lokal.

Solusi supaya tetap bisa login via phpmyadmin adalah dengan membuat user baru selain root yang digunakan untuk administrasi MariaDB Server.

Cara membuat user pada MariaDB Server sebagai berikut:

1. Login  MySQL/MariaDB via console terminal lokal dengan user "root"

sudo mysql -u root
2. Setelah masuk ke mysqld prompt
CREATE USER 'namauser'@'localhost' IDENTIFIED BY 'password';
namauser = nama user baru yang akan dibuat
localhost = host name localhost user baru hanya dapat login dari lokal, jika ingin login dari host lain bisa diganti dengan ip address atau range ip address dengan "base_ip/netmask" atau jika ingin bisa login dari semua host gunakan "%"
password = password yang akan digunakan oleh user baru untuk login

3. Memberikan hak akse ke user baru
GRANT ALL PRIVILEGES ON * . * TO 'namauser'@'localhost';
Karakter bintang pada command diatas mengacu ke database dan tabel. Bintang mengindikasikan bahwa user baru diijinkan untuk membaca, mengubah, mengeksekusi, dan melakukan semua pekerjaan ke semua database dan tabel. Jika ingin spesifik ke database dan tabel tertentu ganti karakter bintang dengan nama database dan tabel.

4. Setelah membuat dan memberi hak akses user baru kita harus mereload privilieges supaya perubahan yang kita buat berlaku.
FLUSH PRIVILEGES;

Bagaimana cara memberikan hak akses berbeda ke user?

Berikut daftar singkat hak akses umum yang dapat diberikan ke user.

ALL PRIVILEGES- seperti yang kita lihat sebelumnya, ini akan memungkinkan akses penuh pengguna ke database yang ditunjuk (atau jika tidak ada database yang dipilih, akses global di seluruh sistem)
CREATE- mengijinkan membuat database
DROP- mengijinkan menghapus database atau tabel
DELETE- mengijinkan menghapus baris dari tabel
INSERT- mengijinkan memasukkan baris pada tabel
SELECT- mengijinkan menggunakan perintah SELECT untuk membaca database
UPDATE- mengijinkan memperbarui baris tabel
GRANT OPTION- mengijinkan user untuk bisa memberikan/menghapus hak akses user lain

Contoh:
1. Memberikan hak akses
GRANT tipe_hak_akses ON nama_database.nama_table TO ‘namauser’@'localhost’;
2. Menghapus hak akses
REVOKE tipe_hak_akses ON nama_database.nama_table TO ‘namauser’@'localhost’;
Kita bisa melihat hak akses user jika ingin mereview hak akses pengguna
SHOW GRANTS namauser;
Menghapus user hampir sama dengan menghapus database
DROP USER ‘namauser’@‘localhost’;
NB: Pastikan untuk mereload privilieges supaya perubahan yang kita buat berlaku.

Referensi:
MariaDB Documentation
Super User Q&A
Digital Ocean Community

Mohon gunakan bahasa yang sopan dan santun. Terimakasih

EmoticonEmoticon