Apakah ada cara untuk memberikan akses kepada pengguna ke semua tampilan database non-sistem?

9

Dalam SQL Server, saya memiliki pengguna di basis data tertentu dan saya diminta untuk memberi mereka akses ke semua tampilan non-sistem dari basis data saja. Saya percaya ini dapat dilakukan dengan mengedit sekuritas tampilan jenis dan memberikan pilih pada masing-masing, tetapi ada banyak, banyak tampilan. Apakah ada cara yang lebih efisien untuk mencapai ini?

Christopher Garcia
sumber

Jawaban:

8

Tidak ada sintaksis seperti

GRANT SELECT ON ALL::Views TO SomeUser 

Anda dapat GRANT SELECTizin pada objek individual , skema , atau seluruh database tetapi tidak difilter menurut jenis objek untuk hanya menyertakan Tampilan. Untuk jenis tugas adhoc ini saya mungkin akan membuat peran baru yang disebut ViewReader, tambahkan pengguna ke peran itu kemudian di jalankan SSMS

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

untuk menghasilkan skrip untuk menjalankan GRANTizin yang diperlukan.

Martin Smith
sumber
Terima kasih atas jawaban yang sangat anggun. Scriptnya sedikit melebihi kepala saya jadi saya akan melakukan beberapa bacaan sebelum mencoba untuk mengimplementasikan. Terima kasih lagi.
Christopher Garcia
1
@lush - Skrip hanya memberi Anda beberapa perintah untuk meninjau, menyalin, menempel, dan menjalankan. Anda dapat melakukan sesuatu yang lebih rumit untuk menggabungkan hasilnya dan EXECtetapi saya tidak akan repot-repot untuk satu tugas pun.
Martin Smith
Saya mengerti sekarang, ini adalah solusi sempurna untuk masalah ini, terima kasih!
Christopher Garcia
4

Saya mengambil pendekatan lain dalam kasus saya. Inilah yang saya lakukan:

  1. Buat login dan petakan ke database.
  2. Pergi ke database dan buat skema yang disebut Public_View misalnya. Pemilik skema ini haruslah pemilik tabel yang sama dengan yang akan dilihat oleh view.
  3. Berikan akses pengguna baru ke skema baru.
  4. Buat tampilan sebanyak yang Anda inginkan dalam skema baru dan pengguna baru akan memiliki akses ke sana.

Hal yang baik adalah bahwa pengguna baru tidak akan memiliki akses ke tabel, dia bahkan tidak akan dapat melihat tabel.

Saya harap ini membantu.

Francisco Goldenstein
sumber
4
+1 Bagi saya hal yang baik tentang solusi atas tambang ini adalah bahwa tidak perlu menetapkan izin secara eksplisit saat tampilan baru dibuat.
Martin Smith