Artikel ini membahas cara memecahkan masalah yang mungkin terjadi saat DEFINER atribut digunakan dengan objek tersimpan MySQL (tampilan, pemicu, fungsi, dan prosedur tersimpan).
Masalah
Anda mungkin mengalami masalah saat melihat atau menjalankan objek tersimpan MySQL (tampilan, pemicu, fungsi, dan prosedur tersimpan). Misalnya, Anda mungkin menerima pesan kesalahan berikut di phpMyAdmin:
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.
Atau, Anda mungkin mengalami kesalahan yang tampaknya acak selama pengoperasian situs web, atau hilangnya fungsionalitas basis data.
Penyebab
DEFINER atribut digunakan untuk menentukan akun pengguna MySQL yang dapat mengakses objek tersimpan tertentu. Namun, masalah dapat terjadi saat akun pengguna MySQL di DEFINER atribut tidak cocok dengan pengguna MySQL yang saat ini masuk. Misalnya, ini dapat terjadi saat menggunakan phpMyAdmin cPanel, yang selalu masuk sebagai pengguna akun utama (cPanel), dan bukan sebagai pengguna basis data yang ditentukan pengguna.
Demikian pula, masalah ini dapat terjadi setelah migrasi situs jika DEFINER atribut dalam database tidak diperbarui dengan pengguna database lingkungan hosting baru.
Resolusi
Untuk mengatasi masalah ini, Anda dapat mencoba masuk ke database sebagai pengguna database yang dirujuk di DEFINER atribut. (Untuk menentukan pengguna database yang benar, Anda mungkin perlu membuang database dan memeriksa DEFINER atribut.) Ada beberapa cara Anda dapat masuk sebagai pengguna basis data yang berbeda:
Metode #1:Menggunakan aplikasi klien MySQL
Anda dapat menggunakan aplikasi klien MySQL, seperti MySQL Workbench, untuk masuk ke database sebagai pengguna database yang benar. Anda kemudian akan dapat mengedit dan menjalankan objek yang disimpan menggunakan identitas yang benar. Untuk informasi tentang cara menggunakan aplikasi klien MySQL untuk terhubung ke database Anda, silakan lihat artikel ini.
Metode #2:Gunakan program baris perintah 'mysql'
Atau, Anda dapat menggunakan mysql program baris perintah untuk masuk ke database sebagai pengguna database yang benar. Anda kemudian akan dapat mengedit dan menjalankan objek yang disimpan menggunakan identitas yang benar. Untuk informasi tentang cara menggunakan mysql program baris perintah, silakan lihat artikel ini.
Metode #3:Gunakan instal kustom phpMyAdmin
Jika Anda tidak ingin menggunakan aplikasi klien MySQL atau baris perintah, Anda dapat membuat instalasi phpMyAdmin mandiri di akun hosting Anda. Instalasi kustom ini memungkinkan Anda untuk masuk ke database sebagai pengguna database yang benar, bukan sebagai pengguna akun utama (cPanel). Untuk informasi tentang cara membuat instalasi phpMyAdmin khusus, silakan lihat artikel ini.
Terkadang, Anda tidak dapat masuk ke database sebagai pengguna database yang dirujuk di DEFINER atribut. Misalnya, situs yang telah dimigrasikan dari penyedia hosting lain mungkin memiliki konvensi penamaan MySQL yang berbeda, dan tidak mungkin membuat pengguna database dengan nama yang benar. Dalam hal ini, Anda harus melakukan hal berikut:
- Buang seluruh database ke file. Untuk informasi tentang cara melakukannya, silakan lihat artikel ini.
- Gunakan editor teks pilihan Anda untuk memperbarui DEFINER . secara manual atribut untuk mereferensikan pengguna database yang Anda kontrol.
- Impor database yang dimodifikasi ke akun Anda. Untuk informasi tentang cara melakukannya, silakan lihat artikel ini.
- Uji database baru. Sekarang Anda seharusnya dapat mengedit dan menjalankan objek tersimpan menggunakan identitas yang benar.
Informasi Lebih Lanjut
Untuk informasi lebih lanjut tentang pendefinisi, silakan kunjungi https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.