Bagaimana cara membuat peran server hanya baca di SQL Server 2012?


15

Saya memberikan izin "Lihat basis data apa pun" saat membuat peran server baru, tetapi menyadari izin ini hanya memungkinkan pengguna untuk melihat basis data sistem.

Saya mencoba membuat peran server yang hanya baca dan dapat membaca basis data apa pun.

Apakah ada cara untuk membuat peran server yang ditentukan pengguna untuk membaca basis data pengguna? Atau apakah saya harus melakukan ini melalui pemetaan pengguna per pengguna?

Jawaban:


16

Posting ini sebagai jawaban hanya karena terlalu panjang untuk dikomentari, dan karena akan relevan untuk pengguna lain segera.

SQL Server 2014 menambahkan beberapa izin tingkat server baru yang akan membantu dengan tepat skenario jenis ini - mereka dirancang dengan mempertimbangkan audit, tetapi jenis persyaratan ini tampaknya sesuai dengan tagihan itu juga. Anda bisa menambahkan dua izin berikut ke login tingkat server:

CONNECT ANY DATABASE

SELECT ALL USER SECURABLES

Yang pertama, seperti kedengarannya, memungkinkan login untuk terhubung ke basis data apa pun. Hal yang menyenangkan tentang ini adalah bahwa hal itu akan memungkinkan ini bahkan untuk database yang dibuat di masa depan (asalkan Anda tidak menetapkan penolakan eksplisit, yang bagaimana Anda dapat melindungi database pengguna tertentu dari login yang memiliki izin ini). Yang terakhir memungkinkan login untuk melakukan operasi baca pada basis data apa pun yang mereka akses - sehingga mereka dapat SELECTdari tabel, tampilan, UDF, dll. Tetapi mereka tidak akan dapat melakukan UPDATEoperasi apa pun (saya belum menguji apakah izin ini memahami kapan suatu prosedur tersimpan melakukan DML). Ini bekerja sangat baik dalam kombinasi jika Anda ingin memberikan akses baca terbuka yang luas untuk seluruh server, atau agar lebih halus Anda dapat memberikan CONNECThak istimewa tradisional ke database tertentu, dan SELECT ALL USER SECURABLEShak akanhanya berfungsi untuk basis data tersebut di mana login memiliki akses eksplisit ke.

The 2014 Perubahan keamanan didokumentasikan di sini - baik, sebagian; mereka lupa tentang izin tingkat basis data ALTER ANY DATABASE EVENT SESSION- meskipun itu tidak relevan di sini.


Terima kasih atas jawaban yang diperluas ini untuk server yang akan datang. Menjadi bahwa operasi ini / periksa berada di tingkat server. Apakah ada komentar jika Level Kompatibilitas DB. Jadi jika DB CL 2012, apakah fitur 2014 masih berfungsi?
SnapJag

@SnapJag Tingkat kompatibilitas tidak ada kaitannya dengan fitur keamanan, sebagian besar tentang bagaimana T-SQL diurai dan bagaimana pengoptimal menghasilkan rencana kueri.
Aaron Bertrand

@AaronBertrand Tahukah Anda jika ada izin yang bisa kita atur pada peran tingkat server untuk memungkinkan pembaruan pada basis data apa pun juga? (Peran tetap sysadmin pasti, tetapi bisakah kita melakukannya untuk peran server yang ditentukan pengguna?)
MaxiWheat

@ MaxiWheat Tidak, tidak bisa memikirkan cara sepele untuk melakukan itu, maaf.
Aaron Bertrand

FWIW ini tidak akan berfungsi untuk Azure SQL Database. GRANT CONNECT SETIAP DATABASE KE [NameOfUserOrGroup] Kelas 'server' yang aman tidak didukung dalam versi SQL Server ini.
Dzejms

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.