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:
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) atauUNSAFE ASSEMBLY
izin (untuk rakitan yang tidak aman).Pemilik database (DBO) memiliki
EXTERNAL ACCESS ASSEMBLY
izin (untukEXTERNAL ACCESS
rakitan) atauUNSAFE ASSEMBLY
(untukUNSAFE
rakitan), dan database memiliki Properti Database TRUSTWORTHY yang diatur keON
.
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