Apa implikasi keamanan sp_executesql?

9

Secara default, di SQL Server, [public]peran memiliki EXECUTEhak aktif sp_executesql.

Namun, saya telah mewarisi server database di mana DBA sebelumnya telah mencabut EXECUTEhaknya sp_executesql.

Sebagai solusi sementara, saya telah memberikan EXECUTEhak sp_executesqlatas dasar yang diperlukan (melalui peran dalam database master). Tapi ini mulai menjadi sakit pemeliharaan.

Jika saya memberikan EXECUTEkembali kepada publik, apakah ada dampak yang perlu saya ketahui?

AlexLostDba
sumber

Jawaban:

8

Tidak ada sp_executesqlmengeksekusi SQL, di bawah konteks dan hak istimewa yang sama persis dengan penelepon asli akan mengeksekusi SQL yang sama . Ada banyak, banyak, kasus ketika SQL dinamis tidak dapat dihindari.

Remus Rusanu
sumber
3
-1 karena jawabannya tidak menunjukkan bahwa microsoft mencatat bahwa mungkin ada risiko keamanan msdn.microsoft.com/en-us/library/ms188001(v=sql.105).aspx
miracle173
@ miracle173 - Agar adil itu adalah SQL dinamis yang ditulis dengan buruk yang merupakan risiko keamanan tidak sp_executesql. Dengan asumsi persyaratan SQL dinamis maka penonaktifan sp_executesqlsebenarnya dapat meningkatkan risiko sebagai setidaknya yang memungkinkan Anda untuk parameterisasi pertanyaan (tidak seperti EXEC)
Martin Smith
2
Sementara risiko injeksi sql tidak pernah bisa diremehkan, penonaktifan sp_executesqlbukanlah mitigasi yang tepat. Mayoritas kesalahan injeksi SQL terjadi pada klien ketika pernyataan SQL dibuat 'dengan tangan' dengan menggabungkan potongan-potongan SQL dengan variabel input dan kemudian mengeksekusi 'apa adanya'. Untuk semua kasus sp_executesqlyang dinonaktifkan tidak membantu.
Remus Rusanu