Bagikan melalui


Rakitan - Merancang

Berlaku untuk: SQL Server

Topik ini menjelaskan faktor-faktor berikut yang harus Anda pertimbangkan saat Merancang rakitan:

  • Rakitan kemasan

  • Mengelola keamanan perakitan

  • Pembatasan rakitan

Rakitan Kemasan

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 mungkin memanggil satu sama lain daripada yang kurang terkait tugas.

Saat Anda mengemas kode ke dalam rakitan, Anda harus mempertimbangkan hal berikut:

  • 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, umumnya lebih baik untuk memisahkan kode di mana 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 seperti itu. Untuk informasi selengkapnya, lihat Menerapkan Assembly dan ALTER ASSEMBLY (Transact-SQL).

  • 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.

Mengelola Keamanan Rakitan

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 mengubah assembly: SAFE, EXTERNAL_ACCESS, atau UNSAFE.

SAFE

SAFE adalah set izin default dan merupakan 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. Kode SAFE 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 merekomendasikan SAFE sebagai set izin perakitan.

EXTERNAL_ACCESS

EXTERNAL_ACCESS memungkinkan rakitan mengakses sumber daya sistem eksternal tertentu seperti file, jaringan, layanan Web, variabel lingkungan, dan registri. Hanya login SQL Server dengan izin AKSES EKSTERNAL yang dapat membuat rakitan EXTERNAL_ACCESS.

Rakitan AMAN dan EXTERNAL_ACCESS 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

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

Selain itu, menentukan TIDAK AMAN 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. Rakitan TIDAK AMAN juga dapat berpotensi membalikkan sistem keamanan SQL Server atau runtime bahasa umum. Izin TIDAK AMAN harus diberikan hanya kepada rakitan yang sangat tepercaya oleh pengembang atau administrator yang berpengalaman. Hanya anggota peran server tetap sysadmin yang dapat membuat rakitan TIDAK AMAN.

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 AMAN 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, rakitan SAFE dan EXTERNAL_ACCESS tidak dapat diannotasi dengan atribut kustom berikut:

System.Security.SuppressUnmanagedCodeSecurityAttribute  
System.Security.UnverifiableCodeAttribute  

API .NET Framework yang tidak diizinkan

Api Microsoft .NET Framework apa pun yang diannotasi dengan salah satu HostProtectionAttributes yang tidak diizinkan tidak dapat dipanggil dari rakitan SAFE dan EXTERNAL_ACCESS.

eSelfAffectingProcessMgmt  
eSelfAffectingThreading  
eSynchronization  
eSharedState   
eExternalProcessMgmt  
eExternalThreading  
eSecurityInfrastructure  
eMayLeakOnAbort  
eUI  

Rakitan .NET Framework yang didukung

Rakitan apa pun 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.

CustomMarshalers.dll  
Microsoft.VisualBasic.dll  
Microsoft.VisualC.dll  
mscorlib.dll  
System.dll  
System.Configuration.dll  
System.Core.dll  
System.Data.dll  
System.Data.OracleClient.dll  
System.Data.SqlXml.dll  
System.Deployment.dll  
System.Security.dll  
System.Transactions.dll  
System.Web.Services.dll  
system.Xml.dll  
System.Xml.Linq.dll  

Lihat Juga

Rakitan (Mesin Database)
Keamanan Integrasi CLR