Saya memiliki pengguna, yang ingin saya berikan semua izin BACA pada skema db.
Salah satu caranya adalah ini:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Apakah ada cara untuk mengelompokkan semua operasi baca dalam bentuk hibah?
Saya memiliki pengguna, yang ingin saya berikan semua izin BACA pada skema db.
Salah satu caranya adalah ini:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Apakah ada cara untuk mengelompokkan semua operasi baca dalam bentuk hibah?
Jawaban:
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 SELECT
hak istimewa. Jika itu yang Anda maksud dengan "semua baca" maka ya:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
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.
GRANT SELECT, 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 |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
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
memiliki EXECUTE
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.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Ini akan membuat pengguna dengan SELECT
hak istimewa untuk semua database termasuk Tampilan.
Berbagai izin yang dapat Anda berikan kepada pengguna adalah
ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or 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’;
Saya menemukan artikel ini sangat membantu
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:
mysql -u root -p
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:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
Jika kolektor akan diinstal pada host yang sama dengan database, ketik perintah berikut:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
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:
grant select on 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:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
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) -
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
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-
Catatan untuk MySQL 8 itu berbeda
Anda perlu melakukannya dalam dua langkah:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
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"?