Bagikan melalui


Membuat Rakitan

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 rakitan dalam database SQL Server, gunakan pernyataan CREATE ASSEMBLY. Topik ini membahas cara mendaftarkan assembly dalam database menggunakan pernyataan CREATE ASSEMBLY, dan cara menentukan pengaturan keamanan untuk assembly.

Pernyataan CREATE ASSEMBLY

Pernyataan CREATE ASSEMBLY digunakan untuk membuat rakitan dalam database. Berikut adalah contoh:

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 rakitan yang berbeda dengan nama, budaya, dan kunci publik yang sama.

Dimungkinkan untuk membuat rakitan yang mereferensikan rakitan lain. Ketika 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, 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 dipanggil 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 yang 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 set 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 rakitan 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 SAFE , kode hanya dapat melakukan akses komputasi dan 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 RAKITAN AKSES EKSTERNAL (untuk rakitan AKSES EKSTERNAL) atau RAKITAN TIDAK AMAN (untuk rakitan TIDAK AMAN ), dan database memiliki Properti Database TRUSTWORTHY 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 rakitan.

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 rakitan dalam database master. Login yang dipetakan ke kunci asimetris ini kemudian harus dibuat, dan login harus diberikan izin EXTERNAL ACCESS ASSEMBLY atau UNSAFE ASSEMBLY .

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 EXTERNAL ACCESS , 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 Rakitan
Keamanan Akses Kode Integrasi CLR
Properti Database TERPERCAYA