Ini biasanya terjadi saat mengekspor tampilan/pemicu/prosedur dari satu database atau server ke yang lain karena pengguna yang membuat objek itu tidak ada lagi.
Anda memiliki dua opsi:
1. Ubah DEFINER
Ini mungkin paling mudah dilakukan ketika awalnya mengimpor objek database Anda, dengan menghapus DEFINER
pernyataan dari dump.
Mengubah definisi nanti sedikit lebih rumit:
Cara mengubah penentu tampilan
-
Jalankan SQL ini untuk menghasilkan pernyataan ALTER yang diperlukan
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Salin dan jalankan pernyataan ALTER
Cara mengubah penentu untuk prosedur tersimpan
Contoh:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Hati-hati, karena ini akan mengubah semua definisi untuk semua database.
2. Buat pengguna yang hilang
Jika Anda menemukan kesalahan berikut saat menggunakan database MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Kemudian Anda dapat menyelesaikannya dengan menggunakan berikut:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Dari http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Ini bekerja seperti pesona - Anda hanya perlu mengubah someuser
dengan nama pengguna yang hilang. Di server dev lokal, Anda biasanya hanya menggunakan root
.
Juga pertimbangkan apakah Anda benar-benar perlu memberi pengguna ALL
izin atau apakah mereka dapat melakukannya dengan lebih sedikit.