Gambaran umum integrasi CLR
Berlaku untuk: SQL Server Azure SQL Managed Instance
Runtime bahasa umum (CLR) adalah inti dari Microsoft .NET Framework 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. Untuk informasi selengkapnya, lihat panduan pengembangan .NET Framework.
Catatan
Untuk informasi selengkapnya tentang menggunakan .NET baru dengan Ekstensi Bahasa SQL Server, lihat Cara memanggil runtime .NET di Ekstensi Bahasa SQL Server.
Dengan CLR yang dihosting di 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.
Keamanan akses kode
Di SQL Server 2016 (13.x) dan versi yang lebih lama, Code Access Security (CAS) mencegah rakitan melakukan operasi tertentu.
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. Untuk informasi selengkapnya, lihat sys.sp_add_trusted_assembly.
Keuntungan integrasi CLR
Transact-SQL dirancang 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 memiliki dukungan terintegrasi untuk konstruksi ini. Bergantung pada skenarionya, fitur-fitur ini dapat memberikan alasan kuat untuk menerapkan fungsionalitas database tertentu dalam kode terkelola.
Visual Basic dan C# menawarkan kemampuan berorientasi objek seperti enkapsulasi, warisan, dan polimorfisme. Kode terkait sekarang dapat dengan mudah diatur ke dalam kelas dan namespace layanan. Saat Anda bekerja dengan sejumlah besar kode server, kemampuan 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 fitur 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. Kelas-kelas 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 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 tidak ditulis. CLR juga dapat membantu memastikan bahwa kode tidak memanipulasi memori yang tidak dikelola.
Integrasi CLR menawarkan potensi peningkatan performa. Untuk informasi, lihat Performa arsitektur integrasi CLR.
Pilih antara Transact-SQL dan kode terkelola
Saat Anda menulis prosedur tersimpan, pemicu, dan fungsi yang ditentukan pengguna, Anda harus memutuskan apakah akan menggunakan Transact-SQL tradisional, atau bahasa .NET Framework seperti Visual Basic atau C#. Gunakan Transact-SQL ketika kode sebagian besar melakukan akses data dengan sedikit atau tanpa logika prosedural. Gunakan kode terkelola untuk fungsi dan prosedur intensif CPU yang menampilkan logika kompleks, atau ketika Anda ingin menggunakan BCL dari .NET Framework.
Pilih 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. Baik Transact-SQL maupun kode terkelola dapat dijalankan di server. Ini menempatkan kode dan data 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 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.
Pilih 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 sebagai 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 arsitektur integrasi CLR.