Bagikan melalui


Membuat Assembly

Objek database terkelola, seperti prosedur atau pemicu tersimpan, dikompilasi lalu disebarkan dalam unit yang disebut assembly. Rakitan DLL terkelola harus didaftarkan di 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. Ketika rakitan dibuat di 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 perakitan ke dalam database SQL Server, Anda dapat menentukan salah satu dari tiga tingkat keamanan yang berbeda di mana kode Anda dapat menjalankan: SAFE, EXTERNAL_ACCESS, atau UNSAFE. CREATE ASSEMBLY Ketika pernyataan dijalankan, pemeriksaan tertentu dilakukan pada rakitan kode yang dapat menyebabkan rakitan gagal mendaftar di server. Untuk informasi selengkapnya, lihat sampel Peniruan di CodePlex.

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 perakitan dengan izin yang SAFE ditetapkan hanya dengan menghilangkan baris ketiga kode di atas:

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

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

Membuat Rakitan EXTERNAL_ACCESS dan TIDAK AMAN

EXTERNAL_ACCESS mengatasi 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.

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

Untuk membuat EXTERNAL_ACCESS atau UNSAFE assembly 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 EXTERNAL ACCESS ASSEMBLY izin (untuk rakitan akses eksternal) atau UNSAFE ASSEMBLY izin (untuk rakitan yang tidak aman).

  2. Pemilik database (DBO) memiliki EXTERNAL ACCESS ASSEMBLY izin (untuk EXTERNAL ACCESS rakitan) atau UNSAFE ASSEMBLY (untuk UNSAFE rakitan), dan database memiliki Properti Database TRUSTWORTHY yang diatur ke ON.

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 ON 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 EXTERNAL ACCESS ASSEMBLY atau UNSAFE ASSEMBLY izin.

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 assembly EXTERNAL ACCESS , pembuat harus memiliki EXTERNAL ACCESS izin. Ini ditentukan saat membuat rakitan:

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

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 UNSAFE izin, Anda menentukan UNSAFE kumpulan izin 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
Memperbolehkan Pemanggil Tepercaya Sebagian