Saat menggunakan PostgreSQL pada server Virtualmin, tidak jarang administrator atau developer menemui error berikut:
SQLSTATE[42501]: Insufficient privilege
ERROR: permission denied for table administrators
Error ini sering muncul pada aplikasi berbasis framework seperti Laravel, meskipun database dan user PostgreSQL sudah berhasil dibuat. Artikel ini akan membahas penyebab utama error insufficient privilege di PostgreSQL serta solusi yang tepat dan aman, khususnya pada lingkungan Virtualmin.
Gejala yang Ditemui
Beberapa gejala umum yang sering terjadi:
- Koneksi database berhasil
- Username dan password PostgreSQL valid
- Namun query
SELECT,INSERT, atauUPDATEgagal - Aplikasi menampilkan error permission denied for table
Hal ini sering menimbulkan kebingungan, terutama bagi pengguna yang sebelumnya terbiasa dengan MySQL.
Penyebab Error Insufficient Privilege di PostgreSQL
Cara Kerja Virtualmin
Virtualmin hanya:
- Membuat database PostgreSQL
- Membuat user database
Namun, Virtualmin tidak secara otomatis memberikan privilege ke tabel yang sudah ada.
Konsep Ownership di PostgreSQL
PostgreSQL memiliki konsep ownership yang ketat:
- Tabel dimiliki oleh user yang membuatnya
- User lain tidak otomatis mendapatkan akses
- Berbeda dengan MySQL yang lebih permisif
Skenario yang Paling Sering Terjadi
| Aktivitas | User |
|---|---|
| Migration / pembuatan tabel | postgres |
| Aplikasi (Laravel, dsb) | emakcell |
Akibatnya:
- Owner tabel adalah
postgres - User aplikasi (
emakcell) tidak memiliki privilege - Muncul error permission denied
Cara Memastikan Penyebab Masalah
Gunakan query berikut:
SELECT *
FROM information_schema.role_table_grants;
Jika hasilnya menunjukkan bahwa grantee hanya postgres, maka user aplikasi memang tidak memiliki hak akses ke tabel.
Solusi yang Direkomendasikan
Solusi terbaik adalah memberikan privilege ke user aplikasi, tanpa mengubah ownership tabel.
Login sebagai User postgres
sudo -u postgres psql -d emakcell
Memberikan Privilege ke User Aplikasi
GRANT USAGE ON SCHEMA public TO emakcell;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public
TO emakcell;
GRANT USAGE, SELECT
ON ALL SEQUENCES IN SCHEMA public
TO emakcell;
Mengatur Privilege Default untuk Tabel Baru (Sangat Penting)
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE
ON TABLES TO emakcell;
Langkah ini memastikan bahwa tabel yang dibuat di masa depan tidak mengalami error yang sama.
Verifikasi Akses User
Login menggunakan user aplikasi:
psql -h localhost -U emakcell -d emakcell
Kemudian jalankan:
SELECT * FROM administrators LIMIT 1;
Jika query berhasil dijalankan, maka masalah telah terselesaikan, atau bisa juga melihat dengan menjalankan
SELECT *
FROM information_schema.role_table_grants;
Best Practice PostgreSQL di Virtualmin
Untuk keamanan dan stabilitas sistem, gunakan pembagian role berikut:
| User | Fungsi |
|---|---|
postgres | Administrasi & migration |
emakcell | User aplikasi (CRUD) |
Hindari menggunakan user postgres langsung pada konfigurasi aplikasi.
Kesimpulan
Error Insufficient Privilege pada PostgreSQL di Virtualmin bukanlah bug, melainkan akibat dari:
- Konsep ownership PostgreSQL
- Perilaku default Virtualmin
- Pemisahan user antara migration dan aplikasi
Dengan melakukan konfigurasi privilege yang benar, aplikasi akan berjalan normal, aman, dan mudah dikelola dalam jangka panjang.





