Keamanan Akses Kode Integrasi CLR
Runtime bahasa umum (CLR) mendukung model keamanan yang disebut keamanan akses kode untuk kode terkelola. Dalam model ini, izin diberikan kepada rakitan berdasarkan identitas kode. Untuk informasi selengkapnya, lihat bagian "Keamanan Akses Kode" di kit pengembangan perangkat lunak .NET Framework.
Kebijakan keamanan yang menentukan izin yang diberikan kepada rakitan didefinisikan di tiga tempat berbeda:
Kebijakan komputer: Ini adalah kebijakan yang berlaku untuk semua kode terkelola yang berjalan di komputer tempat SQL Server diinstal.
Kebijakan pengguna: Ini adalah kebijakan yang berlaku untuk kode terkelola yang dihosting oleh proses. Untuk layanan SQL Server sedang berjalan.
Kebijakan host: Ini adalah kebijakan yang disiapkan oleh host CLR (dalam hal ini, SQL Server) yang berlaku untuk kode terkelola yang berjalan di host tersebut.
Mekanisme keamanan akses kode yang didukung oleh CLR didasarkan pada asumsi bahwa runtime dapat menghosting kode yang sepenuhnya tepercaya dan tepercaya sebagian. Sumber daya yang dilindungi oleh keamanan akses kode CLR biasanya dibungkus oleh antarmuka pemrograman aplikasi terkelola yang memerlukan izin yang sesuai sebelum mengizinkan akses ke sumber daya. Permintaanuntuk izin terpenuhi hanya jika semua penelepon (pada tingkat perakitan) di tumpukan panggilan memiliki izin sumber daya yang sesuai.
Sekumpulan izin keamanan akses kode yang diberikan ke kode terkelola saat berjalan di dalam SQL Server memberikan sekumpulan izin ke perakitan yang dimuat dalam SQL Server, serangkaian izin akhirnya yang diberikan kepada kode pengguna dapat dibatasi lebih lanjut oleh kebijakan tingkat pengguna dan mesin.
SQL Server Set Izin Tingkat Kebijakan Host
Kumpulan izin keamanan akses kode yang diberikan kepada rakitan oleh tingkat kebijakan host SQL Server ditentukan oleh set izin yang ditentukan saat membuat perakitan. Ada tiga set izin: SAFE
, EXTERNAL_ACCESS
dan UNSAFE
(ditentukan menggunakan opsi PERMISSION_SETDARI CREATE ASSEMBLY (Transact-SQL)).
SQL Server. Kebijakan ini tidak dimaksudkan untuk domain aplikasi default yang akan berlaku ketika SQL Server membuat instans CLR.
SQL Server fixedpolicy untuk rakitan sistem dan kebijakan yang ditentukan pengguna untuk rakitan pengguna.
Kebijakan tetap untuk rakitan CLR dan rakitan sistem SQL Server memberi mereka kepercayaan penuh.
Bagian yang ditentukan pengguna dari kebijakan host SQL Server didasarkan pada pemilik perakitan yang menentukan salah satu dari tiga wadah izin untuk setiap perakitan. Untuk informasi selengkapnya tentang izin keamanan yang tercantum di bawah ini, lihat SDK .NET Framework.
SAFE
Hanya komputasi internal dan akses data lokal yang diizinkan. SAFE
adalah set izin yang paling ketat. Kode yang dijalankan oleh rakitan dengan SAFE
izin tidak dapat mengakses sumber daya sistem eksternal seperti file, jaringan, variabel lingkungan, atau registri.
SAFE
rakitan memiliki izin dan nilai berikut:
Izin | Nilai/Deskripsi |
---|---|
SecurityPermission |
Execution: Izin untuk menjalankan kode terkelola. |
SqlClientPermission |
Context connection = true , context connection = yes : Hanya koneksi konteks yang dapat digunakan dan string koneksi hanya dapat menentukan nilai "context connection=true" atau "context connection=yes".AllowBlankPassword = false: Kata sandi kosong tidak diizinkan. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS rakitan memiliki izin yang sama dengan SAFE
rakitan, dengan kemampuan tambahan untuk mengakses sumber daya sistem eksternal seperti file, jaringan, variabel lingkungan, dan registri.
EXTERNAL_ACCESS
rakitan juga memiliki izin dan nilai berikut:
Izin | Nilai/Deskripsi |
---|---|
DistributedTransactionPermission |
Unrestricted: Transaksi terdistribusi diperbolehkan. |
DNSPermission |
Unrestricted: Izin untuk meminta informasi dari Server Nama Domain. |
EnvironmentPermission |
Unrestricted: Akses penuh ke variabel lingkungan sistem dan pengguna diizinkan. |
EventLogPermission |
Administer: Tindakan berikut diizinkan: membuat sumber peristiwa, membaca log yang ada, menghapus sumber peristiwa atau log, merespons entri, menghapus log peristiwa, mendengarkan peristiwa, dan mengakses koleksi semua log peristiwa. |
FileIOPermission |
Unrestricted: Akses penuh ke file dan folder diperbolehkan. |
KeyContainerPermission |
Unrestricted: Akses penuh ke kontainer kunci diizinkan. |
NetworkInformationPermission |
Access: Ping diizinkan. |
RegistryPermission |
Memungkinkan hak baca untuk HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG , dan HKEY_USERS. |
SecurityPermission |
Assertion: Kemampuan untuk menegaskan bahwa semua penelepon kode ini memiliki izin yang diperlukan untuk operasi.ControlPrincipal: Kemampuan untuk memanipulasi objek utama.Execution: Izin untuk menjalankan kode terkelola.SerializationFormatter: Kemampuan untuk menyediakan layanan serialisasi. |
SmtpPermission | Access: Koneksi keluar ke port host SMTP 25 diizinkan. |
SocketPermission |
Connect: Koneksi keluar (semua port, semua protokol) pada alamat transportasi diperbolehkan. |
SqlClientPermission |
Unrestricted: Akses penuh ke sumber data diizinkan. |
StorePermission |
Unrestricted: Akses penuh ke penyimpanan sertifikat X.509 diizinkan. |
WebPermission |
Connect: Koneksi keluar ke sumber daya web diperbolehkan. |
UNSAFE
TIDAK AMAN memungkinkan rakitan akses tidak terbatas ke sumber daya, baik di dalam maupun di luar SQL Server. Kode yang dijalankan dari dalam assembly UNSAFE
juga dapat memanggil kode yang tidak dikelola.
UNSAFE
rakitan diberikan FullTrust
.
Penting
SAFE
adalah pengaturan izin yang direkomendasikan untuk rakitan yang melakukan tugas komputasi dan manajemen data tanpa mengakses sumber daya di luar SQL Server. EXTERNAL_ACCESS
rakitan secara default dijalankan sebagai akun layanan SQL Server, izin untuk menjalankan EXTERNAL_ACCESS
hanya boleh diberikan kepada login yang dipercaya untuk dijalankan sebagai akun layanan. Dari perspektif keamanan, EXTERNAL_ACCESS
dan UNSAFE
rakitan identik. Namun, EXTERNAL_ACCESS
rakitan memberikan berbagai perlindungan keandalan dan ketahanan yang tidak berada dalam UNSAFE
rakitan. Menentukan UNSAFE
memungkinkan kode dalam assembly untuk melakukan operasi ilegal terhadap SQL Server. Untuk informasi selengkapnya tentang membuat rakitan CLR di SQL Server, lihat Mengelola Rakitan Integrasi CLR.
Mengakses Sumber Daya Eksternal
Jika jenis yang ditentukan pengguna (UDT), prosedur tersimpan, atau jenis rakitan konstruksi lainnya terdaftar dengan SAFE
set izin, maka kode terkelola yang dijalankan dalam konstruksi tidak dapat mengakses sumber daya eksternal. Namun, jika EXTERNAL_ACCESS
kumpulan izin atau UNSAFE
ditentukan, dan kode terkelola mencoba mengakses sumber daya eksternal, SQL Server menerapkan aturan berikut:
Jika | Maka |
---|---|
Konteks eksekusi sesuai dengan login SQL Server. | Upaya untuk mengakses sumber daya eksternal ditolak dan pengecualian keamanan dinaikkan. |
Konteks eksekusi sesuai dengan login Windows dan konteks eksekusi adalah pemanggil asli. | Sumber daya eksternal diakses di bawah konteks keamanan akun layanan SQL Server. |
Penelepon bukan penelepon asli. | Akses ditolak dan pengecualian keamanan dinaikkan. |
Konteks eksekusi sesuai dengan login Windows dan konteks eksekusi adalah pemanggil asli dan pemanggil telah ditiru. | Access menggunakan konteks keamanan penelepon; bukan akun layanan. |
Ringkasan Set Izin
Bagan berikut ini meringkas batasan dan izin yang diberikan ke SAFE
kumpulan izin , EXTERNAL_ACCESS
, dan UNSAFE
.
SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|
Code Access Security Permissions |
Jalankan saja | Jalankan + akses ke sumber daya eksternal | Tidak dibatasi (termasuk P/Invoke) |
Programming model restrictions |
Ya | Ya | Tanpa batasan |
Verifiability requirement |
Ya | Ya | Tidak |
Local data access |
Ya | Ya | Ya |
Ability to call native code |
Tidak | Tidak | Ya |
Lihat juga
Keamanan Integrasi CLR
Atribut Perlindungan Host dan Pemrograman Integrasi CLR
Pembatasan Model Pemrograman Integrasi CLR
Lingkungan yang Dihosting CLR