SQL Server Atribut Pemrograman dan Perlindungan Host
Kemampuan untuk memuat dan menjalankan kode terkelola dalam host SQL Server memerlukan pemenuhan persyaratan host untuk keamanan akses kode dan perlindungan sumber daya host. Persyaratan keamanan akses kode ditentukan oleh salah satu dari tiga kumpulan izin SQL Server: SAFE, EXTERNAL-ACCESS, atau UNSAFE. Kode yang dijalankan dalam kumpulan izin SAFE atau EXTERNAL-ACCESS harus menghindari jenis atau anggota tertentu yang menerapkan atribut HostProtectionAttribute. HostProtectionAttribute bukanlah izin keamanan melainkan jaminan keandalan karena mengidentifikasi konstruksi kode tertentu, baik jenis maupun metode, yang mungkin tidak diizinkan oleh host. Penggunaan HostProtectionAttribute memberlakukan model pemrograman yang membantu melindungi stabilitas host.
Catatan
Keamanan Akses Kode (CAS) tidak digunakan lagi di semua versi .NET Framework dan .NET. Versi terbaru .NET tidak mematuhi anotasi CAS dan menghasilkan kesalahan jika API terkait CAS digunakan. Pengembang harus mencari cara alternatif untuk menyelesaikan tugas keamanan.
Atribut Perlindungan Tuan Rumah
Atribut perlindungan host mengidentifikasi jenis atau anggota yang tidak sesuai dengan model pemrograman host dan menunjukkan tingkat ancaman keandalan berikut:
Jika berbahaya.
Dapat menyebabkan destabilisasi kode pengguna yang dikelola server.
Dapat menyebabkan destabilisasi proses server itu sendiri.
SQL Server melarang penggunaan jenis atau anggota yang memiliki HostProtectionAttribute yang menetapkan nilai HostProtectionResourceSharedState, Synchronization, MayLeakOnAbort, atau ExternalProcessMgmt. Ini mencegah rakitan memanggil anggota yang mengaktifkan status berbagi, melakukan sinkronisasi, dapat menyebabkan kebocoran sumber daya saat penghentian, atau memengaruhi integritas proses SQL Server.
Jenis dan Anggota yang Dilarang
Tabel berikut mengidentifikasi jenis dan anggota yang nilai HostProtectionResource-nya tidak diizinkan oleh SQL Server.
Kumpulan Izin SQL Server
SQL Server memungkinkan pengguna menentukan persyaratan keandalan untuk kode yang disebarkan ke dalam database. Saat rakitan diunggah ke dalam database, pembuat rakitan dapat menentukan salah satu dari tiga kumpulan izin untuk perakitan tersebut: SAFE, EXTERNAL-ACCESS, atau UNSAFE.
Kumpulan izin | SAFE | EXTERNAL-ACCESS | UNSAFE |
---|---|---|---|
Keamanan akses kode | Jalankan saja | Jalankan + akses ke sumber daya eksternal | Tidak dibatasi |
Pembatasan model pemrograman | Ya | Ya | Tanpa batasan |
Persyaratan keterverifikasian | Ya | Ya | Tidak |
Kemampuan untuk memanggil kode asli | Tidak | No | Ya |
SAFE adalah mode yang paling andal dan aman dengan pembatasan terkait dalam hal model pemrograman yang diizinkan. Kode SAFE memiliki fitur keandalan dan keamanan yang tinggi. Rakitan SAFE diberi izin yang cukup untuk menjalankan, melakukan komputasi, dan memiliki akses ke database lokal. Rakitan SAFE harus berjenis aman dan tidak diizinkan untuk memanggil kode yang tidak dikelola.
EXTERNAL-ACCESS menyediakan opsi keamanan perantara, memungkinkan kode mengakses sumber daya di luar database, tetapi masih memiliki keandalan dan keamanan SAFE.
UNSAFE adalah untuk kode yang sangat tepercaya yang hanya dapat dibuat oleh administrator database. Kode tepercaya ini tidak memiliki batasan akses kode, dan dapat memanggil kode tak dikelola (asli).
SQL Server menggunakan lapisan kebijakan keamanan akses kode tingkat host untuk menyiapkan kebijakan host yang memberikan salah satu dari tiga kumpulan izin berdasarkan kumpulan izin yang disimpan dalam katalog SQL Server. Kode terkelola yang berjalan di dalam database selalu mendapatkan salah satu kumpulan izin akses kode ini.
Pembatasan Model Pemrograman
Model pemrograman untuk kode terkelola di SQL Server memerlukan fungsi, prosedur, dan jenis yang tidak memerlukan penggunaan status yang disimpan di beberapa pemanggilan atau berbagi status di beberapa sesi pengguna. Selanjutnya, seperti yang dijelaskan sebelumnya, keberadaan status bersama dapat menyebabkan pengecualian kritis yang berdampak pada skalabilitas dan keandalan aplikasi.
Mengingat pertimbangan ini, SQL Server melarang penggunaan variabel statik dan anggota data statik. Untuk rakitan SAFE dan EXTERNAL-ACCESS, SQL Server memeriksa metadata rakitan pada waktu CREATE ASSEMBLY, dan gagal membuat rakitan tersebut jika menemukan penggunaan anggota dan variabel data statik.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk