Hak istimewanya adalah SHOW VIEW, bukan SHOW_VIEW, tetapi Anda tidak perlu memberikan ini kepada pengguna kecuali Anda ingin mereka dapat SHOW CREATE VIEWmelihat ... mereka dapat memilih dari tampilan dengan satu-satunya SELECThak istimewa. Apa yang Anda maksud dengan "kelompokkan semua operasi baca dalam hibah"?
Michael - sqlbot
Jika ada satu hak istimewa yang mewakili SEMUA operasi BACA di database. Saya memahami bahwa mereka menyediakan akses yang sangat baik, tetapi abstraksi tingkat tinggi yang nyaman akan membantu kami.
Ajeet Ganga
Jawaban:
163
Jika ada satu hak istimewa yang mewakili SEMUA operasi BACA di database.
Itu tergantung pada bagaimana Anda mendefinisikan "semua baca."
"Membaca" dari tabel dan tampilan adalah SELECThak istimewa. Jika itu yang Anda maksud dengan "semua baca" maka ya:
Namun, kedengarannya seperti yang Anda maksud adalah kemampuan untuk "melihat" segalanya, untuk "melihat tetapi tidak menyentuh". Jadi, inilah jenis bacaan lain yang muncul di benak:
"Membaca" definisi pandangan adalah SHOW VIEWhak istimewa.
"Membaca" daftar kueri yang sedang dijalankan oleh pengguna lain adalah PROCESShak istimewa.
"Membaca" status replikasi saat ini adalah REPLICATION CLIENThak istimewa.
Perhatikan bahwa salah satu atau semua ini mungkin mengungkap lebih banyak informasi daripada yang ingin Anda ungkapkan, bergantung pada sifat pengguna yang bersangkutan.
Jika itu pembacaan yang ingin Anda lakukan, Anda dapat menggabungkan salah satu dari itu (atau hak istimewa lain yang tersedia ) dalam satu GRANTpernyataan.
GRANTSELECT, SHOW VIEW, PROCESS,REPLICATION CLIENT ON*.*TO...
Namun, tidak ada satu pun hak istimewa yang memberikan sebagian hak istimewa lainnya, seperti yang terdengar seperti yang Anda minta.
Jika Anda melakukan sesuatu secara manual dan mencari cara yang lebih mudah untuk melakukannya tanpa perlu mengingat hibah persis yang biasanya Anda buat untuk kelas pengguna tertentu, Anda dapat mencari pernyataan untuk membuat ulang hibah pengguna yang sebanding, dan mengubahnya. untuk membuat pengguna baru dengan hak yang sama:
mysql> SHOW GRANTS FOR'not_leet'@'localhost';+------------------------------------------------------------------------------------------------------------------------------------+| Grants for not_leet@localhost |+------------------------------------------------------------------------------------------------------------------------------------+|GRANTSELECT,REPLICATION CLIENT ON*.*TO'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'|+------------------------------------------------------------------------------------------------------------------------------------+1rowinset(0.00 sec)
Mengubah 'not_leet' dan 'localhost' agar cocok dengan pengguna baru yang ingin Anda tambahkan, bersama dengan kata sandinya, akan menghasilkan GRANTpernyataan yang dapat digunakan kembali untuk membuat pengguna baru.
Tentu, jika Anda ingin satu operasi untuk menyiapkan dan memberikan sekumpulan hak istimewa terbatas kepada pengguna, dan mungkin menghapus hak istimewa yang tidak layak, itu dapat dilakukan dengan membuat prosedur tersimpan yang merangkum semua yang ingin Anda lakukan. Di dalam tubuh prosedur, Anda akan membuat GRANTpernyataan dengan SQL dinamis dan / atau secara langsung memanipulasi tabel hibah itu sendiri.
Dalam pertanyaan baru-baru ini tentang Administrator Basis Data , poster menginginkan kemampuan bagi pengguna yang tidak memiliki hak untuk memodifikasi pengguna lain, yang tentu saja bukanlah sesuatu yang biasanya dapat dilakukan - pengguna yang dapat memodifikasi pengguna lain, secara definisi, tidak pengguna yang tidak DEFINERmemiliki EXECUTEhak istimewa - bagaimanapun - prosedur yang tersimpan memberikan solusi yang baik dalam kasus itu, karena mereka berjalan dengan konteks keamanan pengguna mereka , memungkinkan siapa pun dengan hak istimewa pada prosedur untuk sementara mengambil hak istimewa yang ditingkatkan untuk memungkinkan mereka melakukan hal-hal spesifik prosedur selesai.
Terima kasih. Selain jawaban yang bagus, saya juga menyukai kata sandi Anda. :)
Ajeet Ganga
2
Perlu diperhatikan: PROSES dan KLIEN REPLIKASI adalah jenis hak istimewa "global", sehingga sintaksisnya akan gagal saat ditentukan dengan pengecualian "per database". PROSES GRANT ON mydb. * Tidak valid, tetapi GRANT PROCESS ON *. * Tidak masalah.
Bee Kay
GRANT SELECT ON db_name. * TO 'demo' @ '%' WITH GRANT OPTION;
Berbagai izin yang dapat Anda berikan kepada pengguna adalah
ALL PRIVILEGES- This would allow a MySQL userall access to a designated database(orif no databaseis selected, across the system)
CREATE- allows them tocreate new tables or databases
DROP- allows them to them todelete tables or databases
DELETE- allows them todeleterowsfrom tables
INSERT- allows them toinsertrowsinto tables
SELECT- allows them touse the Select command toread through databases
UPDATE- allow them toupdatetablerowsGRANT OPTION- allows them tograntor remove other users' privileges
Untuk memberikan izin kepada pengguna tertentu, Anda dapat menggunakan kerangka kerja ini:
GRANT[type of permission]ON[database name].[table name]TO‘[username]’@'localhost’;
Perintah ini memberi pengguna akses baca-saja ke database dari host lokal saja. Jika Anda mengetahui nama host atau alamat IP dari host tempat pengumpul akan diinstal, ketik perintah berikut:
grantselecton database_name.*to'read-only_user_name'@'host_name or IP_address' identified by'password';
Nama host harus dapat diselesaikan oleh DNS atau dengan file host lokal. Pada prompt mysql, ketik perintah berikut:
flush privileges;
Ketik quit.
Berikut ini adalah daftar contoh perintah dan pesan konfirmasi:
Bahkan pengguna telah mendapat jawaban dan @Michael - sqlbot telah membahas sebagian besar poin dengan sangat baik di posnya tetapi satu poin hilang, jadi coba tutupi saja.
Jika Anda ingin memberikan izin baca kepada pengguna sederhana (Bukan semacam admin) -
Catatan: EXECUTE diperlukan di sini, sehingga pengguna dapat membaca data jika ada prosedur tersimpan yang menghasilkan laporan (memiliki beberapa pernyataan pilih).
Ganti localhost dengan IP tertentu dari mana pengguna akan terhubung ke DB.
Izin Baca Tambahan adalah-
SHOW VIEW: Jika Anda ingin menampilkan skema tampilan.
KLIEN REPLIKASI: Jika pengguna perlu memeriksa status replikasi / budak. Tapi perlu memberi izin pada semua DB.
PROSES: Jika pengguna perlu memeriksa proses yang sedang berjalan. Akan bekerja dengan semua DB saja.
Ini adalah satu-satunya solusi yang berhasil untuk saya. Tampaknya solusi lain sudah usang seperti yang Anda katakan. Terima kasih telah memberikan solusi terbaru ini.
Kyle Bridenstine
0
Jika Anda ingin tampilan hanya dibaca setelah memberikan izin baca, Anda dapat menggunakan ALGORITHM = TEMPTABLE dalam definisi DDL tampilan Anda.
SHOW VIEW
, bukanSHOW_VIEW
, tetapi Anda tidak perlu memberikan ini kepada pengguna kecuali Anda ingin mereka dapatSHOW CREATE VIEW
melihat ... mereka dapat memilih dari tampilan dengan satu-satunyaSELECT
hak istimewa. Apa yang Anda maksud dengan "kelompokkan semua operasi baca dalam hibah"?Jawaban:
Itu tergantung pada bagaimana Anda mendefinisikan "semua baca."
"Membaca" dari tabel dan tampilan adalah
SELECT
hak istimewa. Jika itu yang Anda maksud dengan "semua baca" maka ya:Namun, kedengarannya seperti yang Anda maksud adalah kemampuan untuk "melihat" segalanya, untuk "melihat tetapi tidak menyentuh". Jadi, inilah jenis bacaan lain yang muncul di benak:
"Membaca" definisi pandangan adalah
SHOW VIEW
hak istimewa."Membaca" daftar kueri yang sedang dijalankan oleh pengguna lain adalah
PROCESS
hak istimewa."Membaca" status replikasi saat ini adalah
REPLICATION CLIENT
hak istimewa.Perhatikan bahwa salah satu atau semua ini mungkin mengungkap lebih banyak informasi daripada yang ingin Anda ungkapkan, bergantung pada sifat pengguna yang bersangkutan.
Jika itu pembacaan yang ingin Anda lakukan, Anda dapat menggabungkan salah satu dari itu (atau hak istimewa lain yang tersedia ) dalam satu
GRANT
pernyataan.Namun, tidak ada satu pun hak istimewa yang memberikan sebagian hak istimewa lainnya, seperti yang terdengar seperti yang Anda minta.
Jika Anda melakukan sesuatu secara manual dan mencari cara yang lebih mudah untuk melakukannya tanpa perlu mengingat hibah persis yang biasanya Anda buat untuk kelas pengguna tertentu, Anda dapat mencari pernyataan untuk membuat ulang hibah pengguna yang sebanding, dan mengubahnya. untuk membuat pengguna baru dengan hak yang sama:
Mengubah 'not_leet' dan 'localhost' agar cocok dengan pengguna baru yang ingin Anda tambahkan, bersama dengan kata sandinya, akan menghasilkan
GRANT
pernyataan yang dapat digunakan kembali untuk membuat pengguna baru.Tentu, jika Anda ingin satu operasi untuk menyiapkan dan memberikan sekumpulan hak istimewa terbatas kepada pengguna, dan mungkin menghapus hak istimewa yang tidak layak, itu dapat dilakukan dengan membuat prosedur tersimpan yang merangkum semua yang ingin Anda lakukan. Di dalam tubuh prosedur, Anda akan membuat
GRANT
pernyataan dengan SQL dinamis dan / atau secara langsung memanipulasi tabel hibah itu sendiri.Dalam pertanyaan baru-baru ini tentang Administrator Basis Data , poster menginginkan kemampuan bagi pengguna yang tidak memiliki hak untuk memodifikasi pengguna lain, yang tentu saja bukanlah sesuatu yang biasanya dapat dilakukan - pengguna yang dapat memodifikasi pengguna lain, secara definisi, tidak pengguna yang tidak
DEFINER
memilikiEXECUTE
hak istimewa - bagaimanapun - prosedur yang tersimpan memberikan solusi yang baik dalam kasus itu, karena mereka berjalan dengan konteks keamanan pengguna mereka , memungkinkan siapa pun dengan hak istimewa pada prosedur untuk sementara mengambil hak istimewa yang ditingkatkan untuk memungkinkan mereka melakukan hal-hal spesifik prosedur selesai.sumber
Ini akan membuat pengguna dengan
SELECT
hak istimewa untuk semua database termasuk Tampilan.sumber
Berbagai izin yang dapat Anda berikan kepada pengguna adalah
Untuk memberikan izin kepada pengguna tertentu, Anda dapat menggunakan kerangka kerja ini:
Saya menemukan artikel ini sangat membantu
sumber
Panduan langkah demi langkah yang saya temukan di sini .
Untuk membuat akun pengguna database read-only untuk MySQL
Pada prompt UNIX, jalankan program baris perintah MySQL, dan masuk sebagai administrator dengan mengetikkan perintah berikut:
Ketik kata sandi untuk akun root. Pada prompt mysql, lakukan salah satu dari langkah-langkah berikut:
Untuk memberi pengguna akses ke database dari sembarang host, ketik perintah berikut:
Jika kolektor akan diinstal pada host yang sama dengan database, ketik perintah berikut:
Perintah ini memberi pengguna akses baca-saja ke database dari host lokal saja. Jika Anda mengetahui nama host atau alamat IP dari host tempat pengumpul akan diinstal, ketik perintah berikut:
Nama host harus dapat diselesaikan oleh DNS atau dengan file host lokal. Pada prompt mysql, ketik perintah berikut:
Ketik
quit
.Berikut ini adalah daftar contoh perintah dan pesan konfirmasi:
sumber
Bahkan pengguna telah mendapat jawaban dan @Michael - sqlbot telah membahas sebagian besar poin dengan sangat baik di posnya tetapi satu poin hilang, jadi coba tutupi saja.
Jika Anda ingin memberikan izin baca kepada pengguna sederhana (Bukan semacam admin) -
Catatan: EXECUTE diperlukan di sini, sehingga pengguna dapat membaca data jika ada prosedur tersimpan yang menghasilkan laporan (memiliki beberapa pernyataan pilih).
Ganti localhost dengan IP tertentu dari mana pengguna akan terhubung ke DB.
Izin Baca Tambahan adalah-
sumber
Catatan untuk MySQL 8 itu berbeda
Anda perlu melakukannya dalam dua langkah:
sumber
Jika Anda ingin tampilan hanya dibaca setelah memberikan izin baca, Anda dapat menggunakan ALGORITHM = TEMPTABLE dalam definisi DDL tampilan Anda.
sumber