Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Applies to: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 Code Access Security.
Kebijakan keamanan yang menentukan izin yang diberikan kepada rakitan didefinisikan di tiga tempat berbeda:
Machine policy: This policy is in effect for all managed code running in the machine on which SQL Server is installed.
User policy: This policy is in effect for managed code hosted by a process. Untuk SQL Server, kebijakan pengguna khusus untuk akun Windows tempat layanan SQL Server berjalan.
Host policy: This policy is set up by the host of the CLR (in this case, SQL Server) that is in effect for managed code running in that host.
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 sebelumnya. Bahkan jika SQL Server memberikan sekumpulan izin ke rakitan yang dimuat di SQL Server, serangkaian izin akhirnya yang diberikan ke kode pengguna mungkin dibatasi lebih lanjut oleh kebijakan tingkat pengguna dan mesin.
Keamanan akses kode tidak lagi didukung
Runtime bahasa umum menggunakan Keamanan Akses Kode (CAS) dalam .NET Framework, yang tidak lagi didukung sebagai batas keamanan. Rakitan CLR yang dibuat dengan PERMISSION_SET = SAFE mungkin dapat mengakses sumber daya sistem eksternal, memanggil kode yang tidak dikelola, dan memperoleh hak istimewa sysadmin. Di SQL Server 2017 (14.x) dan versi yang lebih baru, sp_configure opsi, keamanan ketat clr, meningkatkan keamanan rakitan CLR.
clr strict security diaktifkan secara default, dan memperlakukan SAFE dan EXTERNAL_ACCESS rakitan seolah-olah ditandai UNSAFE. Opsi clr strict security dapat dinonaktifkan untuk kompatibilitas mundur, tetapi tidak disarankan.
Kami menyarankan agar Anda menandatangani semua rakitan dengan sertifikat atau kunci asimetris, dengan login terkait yang telah diberikan UNSAFE ASSEMBLY izin dalam master database. Administrator SQL Server juga dapat menambahkan rakitan ke daftar rakitan, yang harus dipercaya oleh Mesin Database. For more information, see sys.sp_add_trusted_assembly.
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. There are three permission sets: SAFE, EXTERNAL_ACCESS, and UNSAFE (specified using the PERMISSION_SET option of CREATE ASSEMBLY).
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 berikut ini, lihat .NET Framework SDK.
SAFE
Hanya komputasi internal dan akses data lokal yang diizinkan.
SAFE adalah kumpulan 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.
SAFE rakitan memiliki izin dan nilai berikut:
| Permission | 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 rakitan SAFE, dengan kemampuan tambahan untuk mengakses sumber daya sistem eksternal seperti file, jaringan, variabel lingkungan, dan registri.
Rakitan EXTERNAL_ACCESS juga memiliki izin dan nilai berikut:
| Permission | 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, menanggapi entri, menghapus log peristiwa, mendengarkan peristiwa, dan mengakses kumpulan semua log peristiwa. |
FileIOPermission |
Unrestricted: Akses penuh ke file dan folder diizinkan. |
KeyContainerPermission |
Unrestricted: Akses penuh ke kontainer kunci diizinkan. |
NetworkInformationPermission |
Access: Pinging 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 pemanggil 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 diizinkan. |
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 diizinkan. |
UNSAFE
UNSAFE memungkinkan rakitan akses tidak terbatas ke sumber daya, baik di dalam maupun di luar SQL Server. Kode yang dijalankan dari dalam rakitan UNSAFE juga dapat memanggil kode yang tidak dikelola.
Rakitan UNSAFE diberikan FullTrust.
Pengaturan izin yang direkomendasikan
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 UNSAFE identik. Namun, rakitan EXTERNAL_ACCESS memberikan berbagai perlindungan keandalan dan ketahanan yang tidak ada dalam rakitan UNSAFE.
Menentukan UNSAFE 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.
Important
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 UNSAFE. 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 set izin EXTERNAL_ACCESS atau UNSAFE ditentukan, dan kode terkelola mencoba mengakses sumber daya eksternal, SQL Server menerapkan aturan berikut:
| If | Then |
|---|---|
| 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 ditiru. | Access menggunakan konteks keamanan pemanggil, dan bukan akun layanan. |
Ringkasan kumpulan izin
Bagan berikut ini meringkas batasan dan izin yang diberikan ke kumpulan izin SAFE, EXTERNAL_ACCESS, dan UNSAFE.
| Functionality | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
|---|---|---|---|
| Izin Keamanan Akses Kode | Execute only | Jalankan + akses ke sumber daya eksternal | Tidak dibatasi (termasuk P/Panggil) |
| Pembatasan model pemrograman | Yes | Yes | No restrictions |
| Verifiability requirement | Yes | Yes | No |
| Akses data lokal | Yes | Yes | Yes |
| Kemampuan untuk memanggil kode asli | No | No | Yes |
Related content
- keamanan integrasi CLR
- Atribut perlindungan host dan pemrograman integrasi CLR
- pembatasan model pemrograman integrasi CLR
- arsitektur integrasi CLR - lingkungan yang dihosting CLR