Integrasi CLR - Gambaran Umum

Berlaku untuk: SQL Server Azure SQL Managed Instance

Runtime bahasa umum (CLR) adalah jantung .NET Framework Microsoft dan menyediakan lingkungan eksekusi untuk semua kode .NET Framework. Kode yang berjalan dalam CLR disebut sebagai kode terkelola. CLR menyediakan berbagai fungsi dan layanan yang diperlukan untuk eksekusi program, termasuk kompilasi just-in-time (JIT), mengalokasikan dan mengelola memori, menegakkan keamanan jenis, penanganan pengecualian, manajemen utas, dan keamanan. Lihat SDK .NET Framework untuk informasi selengkapnya.

Dengan CLR yang di-host di Microsoft SQL Server (disebut integrasi CLR), Anda dapat menulis prosedur tersimpan, pemicu, fungsi yang ditentukan pengguna, jenis yang ditentukan pengguna, dan agregat yang ditentukan pengguna dalam kode terkelola. Karena kode terkelola dikompilasi ke kode asli sebelum eksekusi, Anda dapat mencapai peningkatan performa yang signifikan dalam beberapa skenario.

Kode terkelola menggunakan Code Access Security (CAS) untuk mencegah rakitan melakukan operasi tertentu. SQL Server menggunakan CAS untuk membantu mengamankan kode terkelola dan mencegah penyusupan sistem operasi atau server database.

Keuntungan dari Integrasi CLR

Transact-SQL dirancang khusus untuk akses dan manipulasi data langsung dalam database. Meskipun Transact-SQL unggul dalam akses dan manajemen data, ini bukan bahasa pemrograman lengkap. Misalnya, Transact-SQL tidak mendukung array, koleksi, untuk setiap perulangan, pergeseran bit, atau kelas. Meskipun beberapa konstruksi ini dapat disimulasikan dalam Transact-SQL, kode terkelola telah mengintegrasikan dukungan untuk konstruksi ini. Bergantung pada skenarionya, fitur-fitur ini dapat memberikan alasan yang menarik untuk menerapkan fungsionalitas database tertentu dalam kode terkelola.

Microsoft Visual Basic .NET dan Microsoft Visual C# menawarkan kemampuan berorientasi objek seperti enkaplasi, pewarisan, dan polimorfisme. Kode terkait sekarang dapat dengan mudah diatur ke dalam kelas dan namespace layanan. Ketika Anda bekerja dengan sejumlah besar kode server, ini memungkinkan Anda untuk lebih mudah mengatur dan memelihara kode Anda.

Kode terkelola lebih cocok daripada Transact-SQL untuk perhitungan dan logika eksekusi yang rumit, dan memiliki dukungan ekstensif untuk banyak tugas kompleks, termasuk penanganan string dan ekspresi reguler. Dengan fungsionalitas yang ditemukan di pustaka .NET Framework, Anda memiliki akses ke ribuan kelas dan rutinitas bawaan. Ini dapat dengan mudah diakses dari prosedur tersimpan, pemicu, atau fungsi yang ditentukan pengguna. Pustaka Kelas Dasar (BCL) mencakup kelas yang menyediakan fungsionalitas untuk manipulasi string, operasi matematika tingkat lanjut, akses file, kriptografi, dan banyak lagi.

Catatan

Meskipun banyak dari kelas ini tersedia untuk digunakan dari dalam kode CLR di SQL Server, kelas yang tidak sesuai untuk penggunaan sisi server (misalnya, kelas windowing), tidak tersedia. Untuk informasi selengkapnya, lihat Pustaka .NET Framework yang didukung.

Salah satu manfaat kode terkelola adalah keamanan jenis, atau jaminan bahwa kode mengakses jenis hanya dengan cara yang terdefinisi dengan baik dan diizinkan. Sebelum kode terkelola dijalankan, CLR memverifikasi bahwa kode aman. Misalnya, kode diperiksa untuk memastikan bahwa tidak ada memori yang dibaca yang sebelumnya belum ditulis. CLR juga dapat membantu memastikan bahwa kode tidak memanipulasi memori yang tidak dikelola.

Integrasi CLR menawarkan potensi peningkatan performa. Untuk informasi, lihat Performa Integrasi CLR.

Peringatan

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. Dimulai dengan SQL Server 2017 (14.x), opsi yang sp_configure disebut clr strict security diperkenalkan untuk 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 ini dapat dinonaktifkan untuk kompatibilitas mundur, tetapi ini tidak disarankan. Microsoft merekomendasikan agar semua rakitan ditandatangani oleh sertifikat atau kunci asimetris dengan login terkait yang telah diberikan UNSAFE ASSEMBLY izin dalam database master. Untuk informasi selengkapnya, lihat Keamanan ketat CLR.

Memilih Antara Transact-SQL dan Kode Terkelola

Saat menulis prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna, satu keputusan yang harus Anda buat adalah apakah akan menggunakan Transact-SQL tradisional, atau bahasa .NET Framework seperti Visual Basic .NET atau Visual C#. Gunakan Transact-SQL ketika kode sebagian besar akan melakukan akses data dengan sedikit atau tanpa logika prosedural. Gunakan kode terkelola untuk fungsi dan prosedur intensif CPU yang menampilkan logika kompleks, atau saat Anda ingin menggunakan BCL .NET Framework.

Memilih Antara Eksekusi di Server dan Eksekusi di Klien

Faktor lain dalam keputusan Anda tentang apakah akan menggunakan Transact-SQL atau kode terkelola adalah di mana Anda ingin kode Anda berada, komputer server atau komputer klien. Transact-SQL dan kode terkelola dapat dijalankan di server. Ini menempatkan kode dan data yang berdekatan, dan memungkinkan Anda untuk memanfaatkan kekuatan pemrosesan server. Di sisi lain, Anda mungkin ingin menghindari penempatan tugas intensif prosesor di server database Anda. Sebagian besar komputer klien saat ini sangat kuat, dan Anda mungkin ingin memanfaatkan daya pemrosesan ini dengan menempatkan kode sebanyak mungkin pada klien. Kode terkelola dapat berjalan di komputer klien, sementara Transact-SQL tidak dapat.

Memilih Antara Prosedur Tersimpan yang Diperluas dan Kode Terkelola

Prosedur tersimpan yang diperluas dapat dibangun untuk melakukan fungsionalitas yang tidak dimungkinkan dengan prosedur tersimpan Transact-SQL. Namun, prosedur tersimpan yang diperluas dapat membahayakan integritas proses SQL Server, sementara kode terkelola yang diverifikasi menjadi jenis aman tidak dapat dilakukan. Selanjutnya, manajemen memori, penjadwalan utas dan serat, dan layanan sinkronisasi lebih terintegrasi secara mendalam antara kode terkelola CLR dan SQL Server. Dengan integrasi CLR, Anda memiliki cara yang lebih aman daripada prosedur tersimpan yang diperluas untuk menulis prosedur tersimpan yang Anda butuhkan untuk melakukan tugas yang tidak dimungkinkan dalam Transact-SQL. Untuk informasi selengkapnya tentang integrasi CLR dan prosedur tersimpan yang diperluas, lihat Performa Integrasi CLR.

Lihat juga

Menginstal .NET Framework
Arsitektur Integrasi CLR
Akses Data dari Objek Database CLR
Memulai Integrasi CLR