Ketika saya menjalankan kueri berikut, saya mendapatkan kesalahan:
SELECT
`a`.`sl_id` AS `sl_id`,
`a`.`quote_id` AS `quote_id`,
`a`.`sl_date` AS `sl_date`,
`a`.`sl_type` AS `sl_type`,
`a`.`sl_status` AS `sl_status`,
`b`.`client_id` AS `client_id`,
`b`.`business` AS `business`,
`b`.`affaire_type` AS `affaire_type`,
`b`.`quotation_date` AS `quotation_date`,
`b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`,
`b`.`STATUS` AS `status`,
`b`.`customer_name` AS `customer_name`
FROM `tbl_supplier_list` `a`
LEFT JOIN `view_quotes` `b`
ON (`b`.`quote_id` = `a`.`quote_id`)
LIMIT 0, 30
Pesan kesalahan adalah:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist
Mengapa saya mendapatkan kesalahan itu? Bagaimana saya memperbaikinya?
mysql
permissions
MLG teknologi
sumber
sumber
view_quotes
tampilan.Jawaban:
Ini biasanya terjadi ketika mengekspor tampilan / pemicu / prosedur dari satu basis data 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 pertama kali mengimpor objek basis data Anda, dengan menghapus
DEFINER
pernyataan apa pun dari dump.Mengubah definisi kemudian sedikit lebih rumit:
Cara mengubah definisi untuk tampilan
Jalankan SQL ini untuk menghasilkan pernyataan ALTER yang diperlukan
Salin dan jalankan pernyataan ALTER
Bagaimana mengubah definisi untuk prosedur tersimpan
Contoh:
Hati-hati, karena ini akan mengubah semua definisi untuk semua database.
2. Buat pengguna yang hilang
Dari http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Ini berfungsi seperti pesona - Anda hanya perlu mengubah
someuser
nama pengguna yang hilang. Di server dev lokal, Anda biasanya hanya menggunakanroot
.Juga pertimbangkan apakah Anda benar-benar perlu memberikan
ALL
izin kepada pengguna atau apakah mereka dapat melakukan lebih sedikit.sumber
mysql
.proc
P SET definer = 'user @%' WHERE definer = 'root @%'" permintaan karena definisi untuk prosedur hanya di-refresh kemudian.DEFINER=`user`@`host`
dan mengimpornya kembali. Bekerja seperti pesona. : ok_hand:Pengguna yang awalnya membuat tampilan atau prosedur SQL telah dihapus. Jika Anda membuat ulang pengguna itu, itu harus mengatasi kesalahan Anda.
sumber
SELECT
danEXECUTE
hak istimewa kepada pengguna yang ditambahkan. Saya mengalami ini ketika saya mengekspor cadangan DB dari satu server ke yang lain di mana pengguna yang membuat rutinitas tidak ada di server pengujian.DROP
lalu kembaliCREATE
) menggunakan pengguna yang valid pada sistem target harus melakukan trik.UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Saya mendapat kesalahan yang sama setelah memperbarui mysql.
Kesalahan telah diperbaiki setelah perintah ini:
sumber
Jika pengguna ada, maka:
sumber
Buat pengguna yang dihapus seperti ini:
atau
sumber
ERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'
dan harus menambahkan perintah inigrant all on *.* to 'web2vi'@'%' identified by ''
setelah membuat penggunaIkuti langkah ini:
Semoga ini bisa membantu
sumber
Solusi hanyalah satu baris permintaan seperti di bawah ini:
Ganti
ROOT
dengan nama pengguna mysql Anda. GantiPASSWORD
dengan kata sandi mysql Anda.sumber
flush privileges
setelah ini dan itu berhasil. Terima kasih.Diperbaiki dengan menjalankan komentar berikut ini.
jika Anda mendapatkan
some_other
alih-alihweb2vi
maka Anda harus mengubah nama yang sesuai.sumber
Untuk googler masa depan: Saya mendapat pesan serupa yang mencoba memperbarui tabel dalam database yang tidak mengandung tampilan. Setelah beberapa penggalian, ternyata saya telah mengimpor pemicu pada tabel itu, dan itu adalah hal-hal yang didefinisikan oleh pengguna yang tidak ada. Menjatuhkan pemicu menyelesaikan masalah.
sumber
Pengguna 'web2vi' tidak ada di server mysql Anda.
Lihat http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user
Jika pengguna itu memang ada, periksa dari server mana ia dapat mengakses, meskipun saya akan berpikir itu akan menjadi kesalahan yang berbeda (EG Anda mungkin memiliki web2vi @ localhost, tetapi Anda mengakses db sebagai web2vi @% (Apa pun)
sumber
perbaikan cepat untuk mengatasi dan membuang file:
sumber
--single-transaction
mengubah cara Lock Tables diimplementasikan saat dump. Atau semacam itu. Saya tidak ingat di mana saya membacanya, tetapi itu membantu saya merasa nyaman dengan "hanya melempar bendera". Saya juga merasa tidak nyaman dengan jawaban "just do this" yang tidak dijelaskan. Either way, itu berhasil untuk kasus saya.contoh:
sumber
Ini terjadi pada saya setelah memindahkan DB dari satu server ke server lain. Awalnya, definer menggunakan localhost dan pengguna. Di server baru kami tidak memiliki pengguna itu, dan host juga telah diubah. Saya mengambil kembali tabel itu dan menghapus semua pemicu secara manual dari phpmyadmin . Setelah itu bekerja dengan baik untuk saya.
sumber
Saya memiliki masalah yang sama dengan pengguna root dan ini berhasil ketika saya diganti
oleh
Jadi, jika pengguna 'web2vi' diizinkan untuk terhubung dari 'localhost', Anda dapat mencoba:
Saya terhubung dari jauh ke database.
sumber
5 sen saya.
Saya memiliki kesalahan yang sama ketika saya mencoba untuk memilih dari tampilan.
Namun masalah tampaknya adalah tampilan ini, dipilih dari tampilan lain yang dipulihkan dari cadangan dari server yang berbeda.
dan pada kenyataannya, YA, pengguna tidak valid, tetapi tidak jelas ke mana harus dari tampilan pertama.
sumber
Saya mengalami masalah Anda yang sama beberapa menit yang lalu, saya mengalami masalah ini setelah menghapus pengguna yang tidak digunakan dari tabel mysql.user, tetapi melakukan perubahan tampilan memperbaikinya, berikut adalah perintah praktis yang membuatnya sangat sederhana:
Campurkan ini dengan baris perintah mysql (dengan asumsi * nix, tidak terbiasa dengan windows):
Catatan: perintah menghasilkan dan CONCAT PILIH tambahan pada file, membuat
mysql -uuser -ppass databasename < alterView.sql
gagal jika Anda tidak menghapusnya.Sumber: /dba/4129/modify-definer-on-many-views
sumber
Cobalah untuk mengatur prosedur Anda sebagai
SECURITY INVOKER
Standar Mysql menetapkan prosedur keamanan sebagai "DEFINER" (PENCIPTA) .. Anda harus mengatur keamanan ke "penyerang".
sumber
Tampilan Anda, "view_quotes" mungkin telah disalin dari database yang berbeda di mana "web2vi" adalah pengguna yang valid ke dalam database di mana "web2vi" bukan pengguna yang valid.
Baik menambahkan pengguna "web2vi" ke database atau mengubah tampilan (biasanya menghapus DEFINER = 'web2vi' @ '%' dan menjalankan skrip akan melakukan trik)
sumber
Dalam kasus saya, tabel memiliki pemicu dengan pengguna DEFINER yang tidak ada.
sumber
Dari referensi MySQL tentang
CREATE VIEW
:Pengguna ini harus ada dan selalu lebih baik menggunakan 'localhost' sebagai nama host. Jadi saya pikir jika Anda memeriksa apakah ada pengguna dan mengubahnya ke 'localhost' di buat tampilan Anda tidak akan memiliki kesalahan ini.
sumber
Masalahnya jelas - MySQL tidak dapat menemukan pengguna yang ditentukan sebagai definisi.
Saya mengalami masalah ini setelah menyinkronkan model database dari server pengembangan, menerapkannya ke localhost, membuat perubahan pada model dan kemudian menerapkannya kembali ke localhost. Rupanya ada tampilan (saya modifikasi) yang ditentukan dan jadi saya tidak bisa memperbarui versi lokal saya.
Cara memperbaiki (dengan mudah) :
Catatan: ini melibatkan penghapusan sehingga berfungsi dengan baik untuk tampilan tetapi pastikan Anda memiliki cadangan data jika Anda mencoba ini pada tabel.
PS Ini bukan perbaikan yang tepat atau yang terbaik. Saya hanya mempostingnya sebagai solusi yang mungkin (dan sangat sederhana).
sumber
Anda dapat mencoba ini:
sumber
Saya menghabiskan satu jam sebelum menemukan keputusan untuk masalah seperti ini. Tetapi, dalam kasus saya, saya menjalankan ini:
Jika Anda benar-benar ingin menemukan masalah, jalankan perintah ini satu per satu:
... dan, setelah masing-masing, cari bidang 'definisi'.
Dalam kasus saya itu adalah pemicu tua berjanggut, bahwa seseorang pengembang lupa untuk menghapus.
sumber
Buka bagian edit rutin dan dan di bagian bawah, ubah Jenis Keamanan dari Definer menjadi Invoker.
sumber
Satu atau beberapa tampilan Anda di mana dibuat / didaftarkan oleh pengguna lain. Anda harus memeriksa pemilik tampilan dan:
'web2vi'
menggunakan ALTER VIEWSaya pernah mengalami masalah ini.
Saya mencoba memigrasi tampilan, dari BD1 ke BD2, menggunakan SQLYog. SQLYog menciptakan kembali pandangan di DataBase lain (DB2), tetapi itu membuat pengguna BD1 (mereka di mana berbeda). Kemudian saya menyadari bahwa pandangan yang saya gunakan dalam permintaan saya memiliki kesalahan yang sama dengan Anda, bahkan ketika saya tidak membuat tampilan apa pun.
Semoga bantuan ini.
sumber
Jika ini adalah prosedur tersimpan, Anda dapat melakukan:
Tapi ini tidak disarankan.
Bagi saya, solusi yang lebih baik adalah membuat definisi:
sumber
ketika mysql.proc kosong, tetapi sistem selalu memperhatikan "[email protected].%" karena table_name tidak ada, Anda cukup root di baris perintah mysql dan ketik:
lebih!
sumber
Ini terjadi pada saya setelah saya mengimpor dump pada Windows 10 dengan MYSQL Workbench 6.3 Community, dengan "root @% tidak ada". Meskipun pengguna ada. Pertama saya mencoba mengomentari DEFINER namun, ini tidak berhasil. Saya kemudian melakukan penggantian string pada "root @%" dengan "root @ localhost" dan mengimpor kembali dump. Ini berhasil bagi saya.
sumber
Coba ini Ini solusi sederhana
lebih lanjut di https://stackoverflow.com/a/42183702/5407056
sumber
Pengguna basis data juga tampaknya peka terhadap huruf besar-kecil, jadi sementara saya memiliki root '@'% pengguna, saya tidak memiliki ROOT '@'% pengguna. Saya mengubah pengguna menjadi huruf besar melalui meja kerja dan masalahnya teratasi!
sumber