Saya ingin mengatur pengguna "membaca" pada contoh SQL Server 2012 saya. Saya ingin memberinya hak untuk menjalankan prosedur tersimpan, atau fungsi, atau pernyataan SQL langsung, yang mengambil data dari semua tabel dan tampilan, tetapi tidak untuk memperbarui atau memasukkan (yaitu membaca apa pun dan tidak menulis apa pun).
Bisakah saya mengatur ini tanpa secara khusus memberikan hak untuk setiap fungsi atau prosedur tersimpan dengan nama, tetapi memberinya eksekusi tepat pada fungsi atau prosedur tersimpan, hanya menghilangkan hak untuk mengubah tabel?
Adakah yang akan berubah jika saya menjalankan SQL Server 2008?
Klarifikasi dan tambahan:
- Jika prosedur tersimpan mengubah data, pengguna harus menerima pesan kesalahan (baik menolak modifikasi atau menolak akses ke prosedur tersimpan sepenuhnya).
- Jika solusi potensial melibatkan penolakan izin, bisakah saya tidak memberikan izin tertentu alih-alih menolak?
- Dapatkah penolakan diterapkan pada semua tabel, tampilan dll. (Ada sekarang dan di masa depan) dalam database dalam satu pernyataan?
GRANT
untuk memberikan izin,DENY
untuk menolak izin, danREVOKE
untuk menghapusGRANT
atauDENY
. Tanpa aGRANT
atauDENY
pengguna dapat mewarisi izin, katakanlah dari mendapatkan akses ke prosedur yang tersimpan.DENY DELETE, INSERT, UPDATE
menggunakan database atau skema, saya yakin itu hanya akan memengaruhi tabel dan tampilan.Jawaban:
Ini tidak semudah yang Anda bayangkan. Salah satu caranya adalah membuat peran basis data yang ditentukan pengguna baru, memberikan semua izin yang diperlukan untuk peran itu, lalu menambahkan pengguna ke peran baru. Paling tidak ini membuat lebih mudah untuk memberi pengguna (atau peran yang ditentukan pengguna lain) set izin ini di masa depan. Langkah-langkah berikut ini adalah awal yang baik:
Setelah ini, Bob akan memiliki hak akses read-only yang luas dalam database. Dia akan dapat membaca dari semua tabel, tampilan pada tabel itu, dan fungsi in-line. Namun, dia tidak akan dapat menjalankan prosedur atau menggunakan fungsi-fungsi non-inline.
Anda perlu memberikan izin khusus kepada peran Pembaca untuk fungsi dan prosedur yang aman yang Anda inginkan untuk diakses oleh Pembaca. Mungkin ada langkah-langkah yang dapat Anda ambil untuk membuat proses ini lebih mudah (seperti mengelompokkan objek ke dalam skema dan memberikan izin eksekusi pada skema daripada objek individual) tetapi ada terlalu banyak detail untuk dibahas di sini.
Satu hal yang perlu diperhatikan adalah bahwa kurangnya hak modifikasi data tidak akan mencegah Pembaca mengubah data melalui prosedur tersimpan yang telah diberikan izin eksekusi padanya, jika prosedur dan objek yang dimodifikasi berbagi dengan pemilik yang sama. Juga tidak akan ditolak secara eksplisit dalam kasus ini. Fitur ini dikenal sebagai Chaining Kepemilikan .
sumber