Bagikan melalui


Keamanan Akses Kode Integrasi CLR

Berlaku untuk:SQL Server

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 mesin: 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 SQL Server, kebijakan pengguna khusus untuk akun Windows tempat layanan SQL Server 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. Permintaan untuk izin terpenuhi hanya jika semua pemanggil (pada tingkat perakitan) di tumpukan panggilan memiliki izin sumber daya yang sesuai.

Kumpulan izin keamanan akses kode yang diberikan ke kode terkelola saat berjalan di dalam SQL Server adalah persimpangan dari serangkaian izin yang diberikan oleh tiga tingkat kebijakan di atas. Bahkan jika SQL Server memberikan sekumpulan izin ke rakitan yang dimuat di SQL Server, serangkaian izin akhirnya yang diberikan untuk kode pengguna dapat dibatasi lebih lanjut oleh kebijakan tingkat pengguna dan mesin.

Set Izin Tingkat Kebijakan Host SQL Server

Kumpulan izin keamanan akses kode yang diberikan kepada rakitan oleh tingkat kebijakan host SQL Server ditentukan oleh set izin yang ditentukan saat membuat rakitan. Ada tiga set izin: SAFE, EXTERNAL_ACCESS dan UNSAFE (ditentukan menggunakan opsi PERMISSION_SET CREATE ASSEMBLY (Transact-SQL)).

SQL Server menyediakan tingkat kebijakan keamanan tingkat host ke CLR saat menghostingnya; kebijakan ini adalah tingkat kebijakan tambahan di bawah dua tingkat kebijakan yang selalu berlaku. Kebijakan ini diatur untuk setiap domain aplikasi yang dibuat oleh SQL Server. Kebijakan ini tidak dimaksudkan untuk domain aplikasi default yang akan berlaku ketika SQL Server membuat instans CLR.

Kebijakan tingkat host SQL Server adalah kombinasi dari kebijakan tetap SQL Server 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 rakitan. Untuk informasi selengkapnya tentang izin keamanan yang tercantum di bawah ini, lihat .NET Framework SDK.

SAFE

Hanya komputasi internal dan akses data lokal yang diizinkan. SAFE adalah set izin yang paling ketat. Kode yang dijalankan oleh rakitan dengan izin SAFE tidak dapat mengakses sumber daya sistem eksternal seperti file, jaringan, variabel lingkungan, atau registri.

Rakitan SAFE memiliki izin dan nilai berikut:

Izin Nilai/Deskripsi
SecurityPermission Eksekusi: Izin untuk menjalankan kode terkelola.
SqlClientPermission Koneksi konteks = true, koneksi konteks = ya: 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 rakitan AMAN , 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 Tidak dibatasi: Transaksi terdistribusi diizinkan.
DNSPermission Tidak dibatasi: Izin untuk meminta informasi dari Server Nama Domain.
EnvironmentPermission Tidak dibatasi: 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, menanggapi entri, menghapus log peristiwa, mendengarkan peristiwa, dan mengakses kumpulan semua log peristiwa.
FileIOPermission Tidak dibatasi: Akses penuh ke file dan folder diizinkan.
KeyContainerPermission Tidak dibatasi: Akses penuh ke kontainer kunci diizinkan.
NetworkInformationPermission Akses: Pinging diizinkan.
RegistryPermission Memungkinkan hak baca untuk HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, dan HKEY_USERS.
SecurityPermission Pernyataan: Kemampuan untuk menegaskan bahwa semua pemanggil kode ini memiliki izin yang diperlukan untuk operasi.

ControlPrincipal: Kemampuan untuk memanipulasi objek utama.

Eksekusi: Izin untuk menjalankan kode terkelola.

SerializationFormatter: Kemampuan untuk menyediakan layanan serialisasi.
SmtpPermission Akses: Koneksi keluar ke port host SMTP 25 diizinkan.
SocketPermission Koneksi: Koneksi keluar (semua port, semua protokol) pada alamat transportasi diizinkan.
SqlClientPermission Tidak dibatasi: Akses penuh ke sumber data diizinkan.
StorePermission Tidak dibatasi: Akses penuh ke penyimpanan sertifikat X.509 diizinkan.
WebPermission Koneksi: Koneksi keluar ke sumber daya web diperbolehkan.

UNSAFE

UNSAFE memungkinkan rakitan akses tidak terbatas ke sumber daya, baik di dalam maupun di luar SQL Server. Kode yang dijalankan dari dalam rakitan TIDAK AMAN juga dapat memanggil kode yang tidak dikelola.

Rakitan tidak aman diberikan FullTrust.

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 direkomendasikan untuk rakitan yang mengakses sumber daya di luar SQL Server. EXTERNAL_ACCESS rakitan secara default dijalankan sebagai akun layanan SQL Server. Dimungkinkan bagi kode EXTERNAL_ACCESS untuk secara eksplisit meniru konteks keamanan Autentikasi Windows penelepon. Karena defaultnya adalah menjalankan 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, rakitan EXTERNAL_ACCESS dan TIDAK AMAN identik. Namun, rakitan EXTERNAL_ACCESS memberikan berbagai perlindungan keandalan dan ketahanan yang tidak berada dalam rakitan YANG TIDAK AMAN .

Menentukan TIDAK AMAN memungkinkan kode dalam perakitan untuk melakukan operasi ilegal terhadap ruang proses SQL Server, dan karenanya dapat berpotensi membahayakan ketahanan dan skalabilitas SQL Server. Untuk informasi selengkapnya tentang membuat rakitan CLR di SQL Server, lihat Mengelola Rakitan Integrasi CLR.

Penting

SQL Server berisi rakitan CLR yang digunakan mesin database untuk menyediakan fungsionalitas tertentu. Rakitan Microsoft.SQLServer.Types yang disertakan dengan penginstalan SQL Server muncul dalam metadata sebagai rakitan YANG TIDAK AMAN . Ini memang disengaja. Rakitan ini dianggap tepercaya & aman secara default.

Mengakses Sumber Daya Eksternal

Jika jenis yang ditentukan pengguna (UDT), prosedur tersimpan, atau jenis rakitan konstruksi lainnya terdaftar dengan kumpulan izin SAFE , maka kode terkelola yang dijalankan dalam konstruksi tidak dapat mengakses sumber daya eksternal. Namun, jika kumpulan izin EXTERNAL_ACCESS atau TIDAK AMAN ditentukan, dan kode terkelola mencoba mengakses sumber daya eksternal, SQL Server menerapkan aturan berikut:

Jika Kemudian
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.
Pemanggil bukan pemanggil 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 pemanggil; bukan akun layanan.

Ringkasan Set Izin

Bagan berikut ini meringkas batasan dan izin yang diberikan ke kumpulan izin AMAN, EXTERNAL_ACCESS, dan TIDAK AMAN .

Fungsi BRANKAS EXTERNAL_ACCESS TIDAK AMAN
Izin Keamanan Akses Kode Jalankan saja Jalankan + akses ke sumber daya eksternal Tidak dibatasi (termasuk P/Panggil)
Pembatasan model pemrograman Ya Ya Tanpa batasan
Persyaratan keterverifikasian Ya Ya Tidak
Akses data lokal Ya Ya Ya
Kemampuan untuk memanggil kode asli Tidak No Ya

Lihat Juga

Keamanan Integrasi CLR
Atribut Perlindungan Host dan Pemrograman Integrasi CLR
Pembatasan Model Pemrograman Integrasi CLR
Lingkungan yang Dihosting CLR