Buat peran basis data untuk memungkinkan akses baca ke semua tabel; akses tulis ke beberapa

9

Kami memiliki database dengan lebih dari 1000 tabel. Saya perlu membuat peran yang memungkinkan hanya baca di semua tabel, serta akses tulis ke dua tabel tertentu.

Saya bermain-main dengan peran basis data, tetapi setiap kali saya menambahkan tabel, saya harus memilih semua 1000 ... apakah ada cara yang lebih baik untuk melakukan ini?

Wes
sumber
Itu sebenarnya mungkin cara paling sederhana ... Apakah ada cara untuk skrip itu? Saya perlu menyimpan satu set skrip untuk setiap kali kita me-refresh salah satu dari database ini, saya bisa mendapatkan semua pengaturan kembali secara instan.
Wes

Jawaban:

9

Pemberian izin pada skema (misalnya dbo) akan mengalir ke semua objek dalam skema itu. Untuk pengecualian individual, Anda dapat mencantumkannya secara eksplisit:

GRANT SELECT ON SCHEMA::dbo TO [role];
GO

GRANT INSERT, UPDATE --, DELETE
  ON dbo.table_they_can_write_to TO [role];

DENY SELECT ON dbo.table_they_cannot_read TO [role];
Aaron Bertrand
sumber
3
Cukup mudah. Senang kami memiliki komunitas seperti ini.
Wes
1

Coba ini :

EXEC sp_MSForEachTable 'GRANT INSERT, UPDATE ON ? to [ROLE]'
druzin
sumber
3
FYI ini memberikan penulisan tetapi tidak ada akses baca ke semua tabel, dan juga mengabaikan skema sama sekali. Juga sp_MSForEachTabletidak terdokumentasi, tidak didukung, dan mungkin mengalami masalah skipping yang sama sepertisp_MSForEachDB .
Aaron Bertrand