Membuat Assembly

Berlaku untuk:SQL Server

Objek database terkelola, seperti prosedur atau pemicu tersimpan, dikompilasi lalu disebarkan dalam unit yang disebut assembly. Rakitan DLL terkelola harus didaftarkan di Microsoft SQL Server sebelum fungsionalitas yang disediakan perakitan dapat digunakan. Untuk mendaftarkan assembly dalam database SQL Server, gunakan pernyataan CREATE ASSEMBLY. Topik ini membahas cara mendaftarkan perakitan dalam database menggunakan pernyataan CREATE ASSEMBLY, dan cara menentukan pengaturan keamanan untuk perakitan.

Pernyataan CREATE ASSEMBLY

Pernyataan CREATE ASSEMBLY digunakan untuk membuat rakitan dalam database. Ini contohnya:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll';  

Klausa FROM menentukan nama jalur rakitan yang akan dibuat. Jalur ini dapat berupa jalur Universal Naming Convention (UNC) atau jalur file fisik yang bersifat lokal ke komputer.

SQL Server tidak mengizinkan pendaftaran versi perakitan yang berbeda dengan nama, budaya, dan kunci publik yang sama.

Dimungkinkan untuk membuat rakitan yang mereferensikan rakitan lain. Saat rakitan dibuat di SQL Server, SQL Server juga membuat rakitan yang direferensikan oleh rakitan tingkat akar, jika rakitan yang direferensikan belum dibuat ke dalam database.

Pengguna database atau peran pengguna diberi izin untuk membuat, dan dengan demikian sendiri, rakitan dalam database. Untuk membuat rakitan, pengguna atau peran database harus memiliki izin CREATE ASSEMBLY.

Rakitan hanya dapat berhasil merujuk rakitan lain jika:

  • Rakitan yang disebut atau direferensikan dimiliki oleh pengguna atau peran yang sama.

  • Rakitan yang disebut atau direferensikan dibuat dalam database yang sama.

Menentukan keamanan saat membuat Rakitan

Saat membuat rakitan ke dalam database SQL Server, Anda dapat menentukan salah satu dari tiga tingkat keamanan berbeda di mana kode Anda dapat berjalan: AMAN, EXTERNAL_ACCESS, atau TIDAK AMAN. Ketika pernyataan CREATE ASSEMBLY dijalankan, pemeriksaan tertentu dilakukan pada rakitan kode yang dapat menyebabkan rakitan gagal mendaftar di server.

SAFE adalah kumpulan izin default dan berfungsi untuk sebagian besar skenario. Untuk menentukan tingkat keamanan tertentu, Anda memodifikasi sintaks pernyataan CREATE ASSEMBLY sebagai berikut:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll'  
WITH PERMISSION_SET = SAFE;  

Dimungkinkan juga untuk membuat assembly dengan izin SAFE yang ditetapkan hanya dengan menghilangkan baris ketiga kode di atas:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll';  

Ketika kode dalam rakitan berjalan di bawah kumpulan izin AMAN , kode hanya dapat melakukan komputasi dan akses data dalam server melalui penyedia terkelola dalam proses.

Membuat Rakitan EXTERNAL_ACCESS dan TIDAK AMAN

EXTERNAL_ACCESS membahas skenario di mana kode perlu mengakses sumber daya di luar server, seperti file, jaringan, registri, dan variabel lingkungan. Setiap kali server mengakses sumber daya eksternal, server meniru konteks keamanan pengguna yang memanggil kode terkelola.

Izin kode TIDAK AMAN adalah untuk situasi di mana perakitan tidak aman secara terverifikasi atau memerlukan akses tambahan ke sumber daya terbatas, seperti Microsoft Win32 API.

Untuk membuat rakitan EXTERNAL_ACCESS atau TIDAK AMAN di SQL Server, salah satu dari dua kondisi berikut harus dipenuhi:

  1. Rakitan adalah nama kuat yang ditandatangani atau Authenticode ditandatangani dengan sertifikat. Nama kuat (atau sertifikat) ini dibuat di dalam SQL Server sebagai kunci asimetris (atau sertifikat), dan memiliki login yang sesuai dengan izin RAKITAN AKSES EKSTERNAL (untuk rakitan akses eksternal) atau izin RAKITAN TIDAK AMAN (untuk rakitan yang tidak aman).

  2. Pemilik database (DBO) memiliki izin RAKITAN AKSES EKSTERNAL (untuk rakitan AKSES EKSTERNAL ) atau RAKITAN TIDAK AMAN (untuk rakitan TIDAK AMAN ), dan database memiliki Properti Database TERPERCAYA yang diatur ke AKTIF.

Dua kondisi yang tercantum di atas juga diperiksa pada waktu pemuatan perakitan (yang mencakup eksekusi). Setidaknya salah satu kondisi harus dipenuhi untuk memuat assembly.

Kami menyarankan agar Properti Database TRUSTWORTHY pada database tidak diatur ke AKTIF hanya untuk menjalankan kode runtime bahasa umum (CLR) dalam proses server. Sebagai gantinya, kami menyarankan agar kunci asimetris dibuat dari file assembly dalam database master. Login yang dipetakan ke kunci asimetris ini kemudian harus dibuat, dan login harus diberikan izin RAKITAN AKSES EKSTERNAL atau RAKITAN TIDAK AMAN.

Pernyataan Transact-SQL berikut melakukan langkah-langkah yang diperlukan untuk membuat kunci asimetris, memetakan login ke kunci ini, lalu memberikan izin EXTERNAL_ACCESS ke login. Anda harus menjalankan pernyataan Transact-SQL berikut sebelum menjalankan pernyataan CREATE ASSEMBLY.

USE master;   
GO    
  
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll'     
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey     
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;   
GO   

Catatan

Anda harus membuat login baru untuk mengaitkan dengan kunci asimetris. Login ini hanya digunakan untuk memberikan izin; tidak harus dikaitkan dengan pengguna, atau digunakan dalam aplikasi.

Untuk membuat rakitan AKSES EKSTERNAL , pembuat harus memiliki izin AKSES EKSTERNAL . Ini ditentukan saat membuat rakitan:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll'  
WITH PERMISSION_SET = EXTERNAL_ACCESS;  

Pernyataan Transact-SQL berikut melakukan langkah-langkah yang diperlukan untuk membuat kunci asimetris, memetakan login ke kunci ini, lalu memberikan izin TIDAK AMAN ke login. Anda harus menjalankan pernyataan Transact-SQL berikut sebelum menjalankan pernyataan CREATE ASSEMBLY.

USE master;   
GO    
  
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';     
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey ;    
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin ;  
GO  

Untuk menentukan bahwa rakitan dimuat dengan izin TIDAK AMAN , Anda menentukan kumpulan izin TIDAK AMAN saat memuat rakitan ke server:

CREATE ASSEMBLY SQLCLRTest  
FROM 'C:\MyDBApp\SQLCLRTest.dll'  
WITH PERMISSION_SET = UNSAFE;  

Untuk detail selengkapnya tentang izin untuk setiap pengaturan, lihat Keamanan Integrasi CLR.

Lihat juga

Mengelola Rakitan Integrasi CLR
Mengubah Assembly
Menjatuhkan Assembly
Keamanan Akses Kode Integrasi CLR
Properti Database TERPERCAYA