Bagikan melalui


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.