Bagikan melalui


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

SAFEadalah pengaturan izin yang direkomendasikan untuk rakitan yang melakukan tugas komputasi dan manajemen data tanpa mengakses sumber daya di luar SQL Server. EXTERNAL_ACCESSrakitan 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 SAFEkumpulan 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