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
Artikel ini menjelaskan faktor-faktor berikut yang harus Anda pertimbangkan saat merancang rakitan:
- Packaging assemblies
- Mengelola keamanan perakitan
- Pembatasan rakitan
Package assemblies
Rakitan dapat berisi fungsionalitas untuk lebih dari satu rutinitas SQL Server atau mengetik di kelas dan metodenya. Sebagian besar waktu, masuk akal untuk mengemas fungsionalitas rutinitas yang melakukan fungsi terkait dalam rakitan yang sama, terutama jika rutinitas ini berbagi kelas yang metodenya memanggil satu sama lain. Misalnya, kelas yang melakukan tugas manajemen entri data untuk pemicu runtime bahasa umum (CLR) dan prosedur tersimpan CLR dapat dipaketkan dalam rakitan yang sama. Ini karena metode untuk kelas-kelas ini lebih cenderung memanggil satu sama lain daripada metode tugas yang kurang terkait.
Saat Anda mengemas kode ke dalam rakitan, pertimbangkan:
Jenis dan indeks yang ditentukan pengguna CLR yang bergantung pada fungsi yang ditentukan pengguna CLR dapat menyebabkan data yang bertahan berada dalam database yang bergantung pada perakitan. Memodifikasi kode rakitan sering kali lebih kompleks ketika ada data yang bertahan yang bergantung pada perakitan dalam database. Oleh karena itu, lebih baik memisahkan kode tentang dependensi data yang bertahan mengandalkan (seperti jenis dan indeks yang ditentukan pengguna menggunakan fungsi yang ditentukan pengguna) dari kode yang tidak memiliki dependensi data yang bertahan ini. For more information, see Implement assemblies and ALTER ASSEMBLY.
Jika sepotong kode terkelola memerlukan izin yang lebih tinggi, lebih baik memisahkan kode tersebut menjadi rakitan terpisah dari kode yang tidak memerlukan izin yang lebih tinggi.
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.
Mengelola keamanan perakitan
Anda dapat mengontrol berapa banyak rakitan yang dapat mengakses sumber daya yang dilindungi oleh .NET Code Access Security saat menjalankan kode terkelola. Anda melakukan ini dengan menentukan salah satu dari tiga set izin saat Membuat atau memodifikasi rakitan: SAFE, , EXTERNAL_ACCESSatau UNSAFE.
SAFE permission
SAFE adalah set izin default dan merupakan 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 kode dapat mengakses data dari database SQL Server lokal atau melakukan komputasi dan logika bisnis yang tidak melibatkan akses sumber daya di luar database lokal.
Sebagian besar rakitan melakukan tugas komputasi dan manajemen data tanpa harus mengakses sumber daya di luar SQL Server. Oleh karena itu, kami sarankan SAFE sebagai set izin perakitan.
EXTERNAL_ACCESS permission
EXTERNAL_ACCESS memungkinkan rakitan untuk mengakses sumber daya sistem eksternal tertentu seperti file, jaringan, layanan Web, variabel lingkungan, dan registri. Hanya login SQL Server dengan EXTERNAL ACCESS izin yang dapat membuat EXTERNAL_ACCESS rakitan.
SAFE dan EXTERNAL_ACCESS rakitan hanya dapat berisi kode yang dapat diverifikasi jenis-aman. Ini berarti bahwa rakitan ini hanya dapat mengakses kelas melalui titik masuk yang ditentukan dengan baik yang valid untuk definisi jenis. Oleh karena itu, mereka tidak dapat secara segan-segan mengakses buffer memori yang tidak dimiliki oleh kode. Selain itu, mereka tidak dapat melakukan operasi yang mungkin memiliki efek buruk pada ketahanan proses SQL Server.
UNSAFE permission
UNSAFE memberi rakitan akses tidak terbatas ke sumber daya, baik di dalam maupun di luar SQL Server. Kode yang berjalan dari dalam UNSAFE rakitan dapat memanggil kode yang tidak dikelola.
Selain itu, menentukan UNSAFE memungkinkan kode dalam perakitan untuk melakukan operasi yang dianggap tidak aman jenis oleh pemverifikasi CLR. Operasi ini berpotensi mengakses buffer memori di ruang proses SQL Server dengan cara yang tidak terkendali.
UNSAFE rakitan juga dapat berpotensi membalikkan sistem keamanan SQL Server atau runtime bahasa umum.
UNSAFE izin harus diberikan hanya kepada rakitan yang sangat tepercaya oleh pengembang atau administrator yang berpengalaman. Only members of the sysadmin fixed server role can create UNSAFE assemblies.
Pembatasan rakitan
SQL Server menempatkan batasan tertentu pada kode terkelola dalam rakitan untuk memastikan bahwa mereka dapat berjalan dengan cara yang andal dan dapat diskalakan. Ini berarti bahwa operasi tertentu yang dapat membahayakan ketahanan server tidak diizinkan dalam rakitan SAFE dan EXTERNAL_ACCESS.
Atribut kustom yang tidak diizinkan
Rakitan tidak dapat diannotasi dengan atribut kustom berikut:
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.STAThreadAttribute
System.ThreadStaticAttribute
Selain itu, SAFE dan EXTERNAL_ACCESS rakitan tidak dapat diannotasi dengan atribut kustom berikut:
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
API .NET Framework yang tidak diizinkan
SETIAP .NET Framework API yang diannotasi dengan salah satu HostProtectionAttributes yang tidak diizinkan tidak dapat dipanggil dari rakitan SAFE dan EXTERNAL_ACCESS.
HostProtectionAttribute.SelfAffectingProcessMgmt
HostProtectionAttribute.SelfAffectingThreading
HostProtectionAttribute.Synchronization
HostProtectionAttribute.SharedState
HostProtectionAttribute.ExternalProcessMgmt
HostProtectionAttribute.ExternalThreading
HostProtectionAttribute.SecurityInfrastructure
HostProtectionAttribute.MayLeakOnAbort
HostProtectionAttribute.UI
Rakitan .NET Framework yang didukung
Setiap rakitan yang direferensikan oleh rakitan kustom Anda harus dimuat ke SQL Server dengan menggunakan CREATE ASSEMBLY. Rakitan .NET Framework berikut sudah dimuat ke SQL Server dan, oleh karena itu, dapat dirujuk oleh rakitan kustom tanpa harus menggunakan CREATE ASSEMBLY.
mscorlib.dllCustomMarshalers.dllMicrosoft.VisualBasic.dllMicrosoft.VisualC.dllSystem.Configuration.dllSystem.Core.dllSystem.Data.OracleClient.dllSystem.Data.SqlXml.dllSystem.Data.dllSystem.Deployment.dllSystem.Security.dllSystem.Transactions.dllSystem.Web.Services.dllSystem.Xml.Linq.dllsystem.Xml.dllSystem.dll
Related content
- Rakitan (Mesin Database)
- keamanan integrasi CLR