Pembatasan model pemrograman integrasi CLR
Berlaku untuk: SQL Server
Azure SQL Managed Instance
Saat Anda membangun prosedur tersimpan terkelola atau objek database terkelola lainnya, SQL Server melakukan pemeriksaan kode tertentu yang perlu dipertimbangkan. Pemeriksaan ini dilakukan pada rakitan kode terkelola ketika pertama kali terdaftar dalam database, menggunakan CREATE ASSEMBLY
pernyataan, dan juga pada runtime. Kode terkelola juga diperiksa pada runtime karena dalam rakitan mungkin ada jalur kode yang mungkin tidak pernah benar-benar dicapai pada runtime.
Pemeriksaan kode ini memberikan fleksibilitas untuk mendaftarkan rakitan pihak ketiga terutama, sehingga rakitan tidak diblokir di mana ada kode tidak aman yang dirancang untuk berjalan di lingkungan klien, tetapi tidak akan pernah dijalankan dalam runtime bahasa umum (CLR) yang dihosting. Persyaratan yang harus dipenuhi kode terkelola bergantung pada apakah assembly terdaftar sebagai SAFE
, , EXTERNAL_ACCESS
atau UNSAFE
. SAFE
adalah tingkat keamanan yang paling ketat.
Selain pembatasan yang ditempatkan pada rakitan kode terkelola, ada juga izin keamanan kode yang diberikan. CLR mendukung model keamanan yang disebut keamanan akses kode (CAS) untuk kode terkelola. Dalam model ini, izin diberikan kepada rakitan berdasarkan identitas kode. SAFE
, EXTERNAL_ACCESS
, dan UNSAFE
rakitan memiliki izin CAS yang berbeda. Untuk informasi selengkapnya, lihat Keamanan Akses Kode Integrasi CLR.
Jika kebijakan penerbit diatur, CREATE ASSEMBLY
gagal.
MEMBUAT pemeriksaan ASSEMBLY
CREATE ASSEMBLY
Saat pernyataan berjalan, pemeriksaan berikut dilakukan untuk setiap tingkat keamanan. Jika ada pemeriksaan yang gagal, CREATE ASSEMBLY
gagal dengan pesan kesalahan.
Global (tingkat keamanan apa pun)
Semua rakitan yang dirujuk harus memenuhi satu atau beberapa kriteria berikut:
Rakitan sudah terdaftar dalam database.
Rakitan adalah salah satu rakitan yang didukung. Untuk informasi selengkapnya, lihat Pustaka .NET Framework yang didukung.
Anda menggunakan
CREATE ASSEMBLY FROM <location>
, dan semua rakitan yang direferensikan dan dependensinya tersedia di<location>
.Anda menggunakan
CREATE ASSEMBLY FROM <bytes ...>
, dan semua referensi ditentukan melalui byte yang dipisahkan spasi.
EXTERNAL_ACCESS
Semua EXTERNAL_ACCESS
rakitan harus memenuhi kriteria berikut:
Bidang statis tidak digunakan untuk menyimpan informasi. Bidang statis baca-saja diperbolehkan.
Tes PEVerify diteruskan. Alat PEVerify (
peverify.exe
), yang memeriksa apakah kode bahasa perantara umum (CIL) dan metadata terkait memenuhi persyaratan keamanan jenis, disediakan dengan .NET Framework SDK.Sinkronisasi, misalnya dengan
SynchronizationAttribute
kelas , tidak digunakan.Metode finalizer tidak digunakan.
Atribut kustom berikut tidak diizinkan dalam EXTERNAL_ACCESS
rakitan:
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
SAFE
- Semua
EXTERNAL_ACCESS
kondisi perakitan diperiksa.
Pemeriksaan runtime
Saat runtime, rakitan kode diperiksa untuk kondisi berikut. Jika salah satu kondisi ini ditemukan, kode terkelola tidak diizinkan untuk dijalankan, dan pengecualian dilemparkan.
UNSAFE
Anda tidak dapat memuat rakitan, baik secara eksplisit dengan memanggil System.Reflection.Assembly.Load()
metode dari array byte, atau secara implisit menggunakan Reflection.Emit
namespace.
EXTERNAL_ACCESS
Semua UNSAFE
kondisi diperiksa.
Semua jenis dan metode yang dianotasi dengan nilai atribut perlindungan host (HPA) berikut dalam daftar rakitan yang didukung tidak diizinkan.
SelfAffectingProcessMgmt
SelfAffectingThreading
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
Untuk informasi selengkapnya tentang HPAs dan daftar jenis dan anggota yang tidak diizinkan di rakitan yang didukung, lihat Atribut Perlindungan Host dan Pemrograman Integrasi CLR.
SAFE
Semua EXTERNAL_ACCESS
kondisi diperiksa.
Konten terkait
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