Saya memiliki pengguna MySQL dan saya ingin melihatnya HANYA pandangan yang saya inginkan dan bukan tabel lain dalam database. Saya telah memberikan izin pengguna ini hanya pada tampilan tertentu sebagai berikut:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Jika saya membuat show grants;
pernyataan, saya hanya bisa melihat izin ini seperti yang diharapkan. Namun saya ingin pengguna ini untuk query HANYA pandangan dan bukan tabel yang terkait dengan pandangan ini, tetapi saya tidak dapat menemukan cara untuk melakukan ini. Tampaknya jika saya ingin pengguna melakukan pilih pada tampilan, pilih juga harus diberikan untuk tabel, atau apakah saya salah?
Jika saya menolak select
pernyataan di sisa tabel, dan di baris perintah saya mencoba melakukan pilih saya mendapat yang berikut:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
Itu memang yang saya inginkan, tetapi saya juga ditolak jika saya memilih tampilan data.
Apakah ada cara agar saya bisa menyediakan bagi pengguna hanya tampilan dan bukan tabel?
sumber
Saya tahu ini sudah tua sekarang tetapi di sini adalah apa yang memecahkan masalah ini untuk saya ...
Jawabannya adalah dengan sintaks "SQL SECURITY".
definisi tampilan asli saya telah mengatur SQL SECURITY menjadi "INVOKER". Ini berarti pengguna terpaksa memiliki izin pilih pada tampilan dan tabel.
Ketika saya mengubah SQL SECURITY menjadi "DEFINER", saya dapat memberikan izin pilih pengguna hanya pada tampilan.
sumber