BUAT RAKITAN (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Managed Instance
Membuat modul aplikasi terkelola yang berisi metadata kelas dan kode terkelola sebagai objek dalam instans SQL Server. Dengan mereferensikan modul ini, fungsi runtime bahasa umum (CLR), prosedur tersimpan, pemicu, agregat yang ditentukan pengguna, dan jenis yang ditentukan pengguna dapat dibuat dalam database.
Sintaks
CREATE ASSEMBLY assembly_name
[ AUTHORIZATION owner_name ]
FROM { <client_assembly_specifier> | <assembly_bits> [ , ...n ] }
[ WITH PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } ]
[ ; ]
<client_assembly_specifier> ::=
'[ \\computer_name\ ] share_name\ [ path\ ] manifest_file_name'
| '[ local_path\ ] manifest_file_name'
<assembly_bits> ::=
{ varbinary_literal | varbinary_expression }
Argumen
assembly_name
Nama assembly. Nama harus unik dalam database dan pengidentifikasi yang valid.
owner_name OTORISASI
Menentukan nama pengguna atau peran sebagai pemilik rakitan. owner_name harus menjadi nama peran di mana pengguna saat ini adalah anggota, atau pengguna saat ini harus memiliki IMPERSONATE
izin pada owner_name. Jika tidak ditentukan, kepemilikan diberikan kepada pengguna saat ini.
<client_assembly_specifier>
Menentukan jalur lokal atau lokasi jaringan tempat assembly yang sedang diunggah berada, dan juga nama file manifes yang sesuai dengan assembly. <client_assembly_specifier>
dapat dinyatakan sebagai string tetap atau ekspresi yang mengevaluasi ke string tetap, dengan variabel. CREATE ASSEMBLY
tidak mendukung pemuatan rakitan multimodule. SQL Server juga mencari rakitan dependen rakitan ini di lokasi yang sama dan juga mengunggahnya dengan pemilik yang sama dengan rakitan tingkat akar. Jika rakitan dependen ini tidak ditemukan dan belum dimuat dalam database saat ini, CREATE ASSEMBLY
gagal. Jika rakitan dependen sudah dimuat dalam database saat ini, pemilik rakitan tersebut harus sama dengan pemilik rakitan yang baru dibuat.
Penting
Azure SQL Database & Azure SQL Managed Instance tidak mendukung pembuatan rakitan dari file.
<client_assembly_specifier>
tidak dapat ditentukan jika pengguna yang masuk sedang ditiru.
<assembly_bits>
Daftar nilai biner yang membentuk rakitan dan rakitan dependennya. Nilai pertama dalam daftar dianggap sebagai rakitan tingkat akar. Nilai yang sesuai dengan rakitan dependen dapat disediakan dalam urutan apa pun. Nilai apa pun yang tidak sesuai dengan dependensi rakitan akar diabaikan.
Catatan
Opsi ini tidak tersedia dalam database mandiri.
varbinary_literal
Sebuah literal varbinary .
varbinary_expression
Ekspresi jenis varbinary.
PERMISSION_SET { AMAN | EXTERNAL_ACCESS | TIDAK AMAN }
Menentukan sekumpulan izin akses kode yang diberikan ke rakitan saat diakses oleh SQL Server. Jika tidak ditentukan, SAFE
diterapkan sebagai default.
Opsi PERMISSION_SET
ini dipengaruhi oleh konfigurasi Server: opsi keamanan ketat clr. Ketika clr strict security
diaktifkan, semua rakitan diperlakukan sebagai UNSAFE
.
Sebaiknya gunakan SAFE
. SAFE
adalah set izin yang paling ketat. Kode yang dijalankan oleh rakitan dengan SAFE
izin tidak dapat mengakses sumber daya sistem eksternal seperti file, jaringan, variabel lingkungan, atau registri.
EXTERNAL_ACCESS
memungkinkan rakitan untuk mengakses sumber daya sistem eksternal tertentu seperti file, jaringan, variabel lingkungan, dan registri.
UNSAFE
memungkinkan rakitan akses tidak terbatas ke sumber daya, baik di dalam maupun di luar instans SQL Server. Kode yang UNSAFE
berjalan dari dalam rakitan dapat memanggil kode yang tidak dikelola.
SAFE
adalah pengaturan izin yang direkomendasikan untuk rakitan yang melakukan tugas komputasi dan manajemen data tanpa mengakses sumber daya di luar instans SQL Server.
Catatan
Opsi EXTERNAL_ACCESS
dan UNSAFE
tidak tersedia dalam database mandiri.
Sebaiknya gunakan EXTERNAL_ACCESS
untuk rakitan yang mengakses sumber daya di luar instans SQL Server. EXTERNAL_ACCESS
rakitan termasuk perlindungan SAFE
keandalan dan skalabilitas rakitan, tetapi dari perspektif keamanan, mirip UNSAFE
dengan rakitan. Kode dalam EXTERNAL_ACCESS
rakitan berjalan secara default di bawah akun layanan SQL Server, dan mengakses sumber daya eksternal di bawah akun tersebut, kecuali kode secara eksplisit meniru pemanggil. Oleh karena itu, izin untuk membuat EXTERNAL_ACCESS
rakitan harus diberikan hanya untuk masuk yang dipercaya untuk menjalankan kode di bawah akun layanan SQL Server. Untuk informasi selengkapnya tentang peniruan identitas, lihat Keamanan Integrasi CLR.
Menentukan UNSAFE
memungkinkan kode dalam rakitan menyelesaikan kebebasan untuk melakukan operasi di ruang proses SQL Server yang berpotensi membahayakan ketahanan SQL Server. UNSAFE
rakitan juga dapat berpotensi membalikkan sistem keamanan SQL Server atau runtime bahasa umum. UNSAFE
izin harus diberikan hanya kepada rakitan yang sangat tepercaya. Hanya anggota peran server tetap sysadmin yang dapat membuat dan mengubah UNSAFE
rakitan.
Untuk informasi selengkapnya tentang kumpulan izin perakitan, lihat Merancang rakitan.
Keamanan akses kode tidak lagi didukung
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.
Keterangan
CREATE ASSEMBLY
mengunggah rakitan yang sebelumnya dikompilasi sebagai file .dll dari kode terkelola untuk digunakan di dalam instans SQL Server.
Saat diaktifkan, PERMISSION_SET
opsi dalam CREATE ASSEMBLY
pernyataan dan ALTER ASSEMBLY
diabaikan pada run-time, tetapi PERMISSION_SET
opsi dipertahankan dalam metadata. Mengabaikan opsi meminimalkan melanggar pernyataan kode yang ada.
SQL Server tidak mengizinkan pendaftaran versi rakitan yang berbeda dengan nama, budaya, dan kunci publik yang sama.
Saat mencoba mengakses rakitan yang ditentukan dalam <client_assembly_specifier>
, SQL Server meniru konteks keamanan login Windows saat ini. Jika <client_assembly_specifier>
menentukan lokasi jaringan (jalur UNC), peniruan login saat ini tidak dibawa ke lokasi jaringan karena batasan delegasi. Dalam hal ini, akses dibuat menggunakan konteks keamanan akun layanan SQL Server. Untuk informasi selengkapnya, lihat Kredensial (Mesin Database).
Selain rakitan akar yang ditentukan oleh assembly_name, SQL Server mencoba mengunggah rakitan apa pun yang dirujuk oleh rakitan akar yang diunggah. Jika rakitan yang direferensikan sudah diunggah ke database karena pernyataan sebelumnya CREATE ASSEMBLY
, rakitan ini tidak diunggah tetapi tersedia untuk rakitan akar. Jika rakitan dependen sebelumnya tidak diunggah, tetapi SQL Server tidak dapat menemukan file manifesnya di direktori sumber, CREATE ASSEMBLY
mengembalikan kesalahan.
Jika ada rakitan dependen yang direferensikan oleh rakitan akar belum ada di database dan secara implisit dimuat bersama dengan rakitan akar, mereka memiliki izin yang sama yang ditetapkan sebagai rakitan tingkat akar. Jika rakitan dependen harus dibuat dengan menggunakan set izin yang berbeda dari rakitan tingkat akar, mereka harus diunggah secara eksplisit sebelum rakitan tingkat akar dengan set izin yang sesuai.
Validasi Rakitan
SQL Server memindai biner rakitan yang diunggah oleh CREATE ASSEMBLY
pernyataan untuk menjamin pemeriksaan berikut:
Biner rakitan terbentuk dengan baik dengan segmen metadata dan kode yang valid, dan segmen kode memiliki instruksi Bahasa Perantara Microsoft (MSIL) yang valid.
Kumpulan rakitan sistem yang dirujuknya adalah salah satu rakitan yang didukung berikut di SQL Server:
Microsoft.VisualBasic.dll
, ,mscorlib.dll
,System.Data.dll
,System.dll
Microsoft.VisualC.dll
System.Xml.dll
, ,CustomMarshallers.dll
,System.Security.dll
,System.Web.Services.dll
, ,System.Data.SqlXml.dll
, ,System.Core.dll
, dan .System.Xml.Linq.dll
Rakitan sistem lain dapat direferensikan, tetapi harus didaftarkan secara eksplisit dalam database.Untuk rakitan yang dibuat dengan menggunakan
SAFE
atauEXTERNAL ACCESS
set izin:Kode rakitan harus berjenis aman. Keamanan jenis ditetapkan dengan menjalankan pemverifikasi runtime bahasa umum terhadap perakitan.
Rakitan tidak boleh berisi anggota data statis apa pun di kelasnya kecuali ditandai sebagai baca-saja.
Kelas dalam rakitan tidak dapat berisi metode finalizer.
Kelas atau metode assembly harus diannotasikan hanya dengan atribut kode yang diizinkan. Untuk informasi selengkapnya, lihat Integrasi CLR: atribut kustom untuk rutinitas CLR.
Selain pemeriksaan sebelumnya yang dilakukan saat CREATE ASSEMBLY
dijalankan, ada pemeriksaan tambahan yang dilakukan pada waktu eksekusi kode di rakitan:
Memanggil API .NET Framework tertentu yang memerlukan Izin Akses Kode tertentu mungkin gagal jika kumpulan izin rakitan tidak menyertakan izin tersebut.
Untuk
SAFE
danEXTERNAL_ACCESS
rakitan, setiap upaya untuk memanggil .NET Framework API yang diannotasikan dengan HostProtectionAttributes tertentu gagal.
Untuk informasi selengkapnya, lihat Mendesain rakitan.
Izin
Memerlukan CREATE ASSEMBLY
izin.
Jika PERMISSION_SET = EXTERNAL_ACCESS
ditentukan, memerlukan EXTERNAL ACCESS ASSEMBLY
izin pada server. Jika PERMISSION_SET = UNSAFE
ditentukan, memerlukan UNSAFE ASSEMBLY
izin pada server.
Pengguna harus menjadi pemilik rakitan apa pun yang direferensikan oleh rakitan yang akan diunggah jika rakitan sudah ada di database. Untuk mengunggah rakitan dengan menggunakan jalur file, pengguna saat ini harus merupakan login terautentikasi Windows atau anggota peran server tetap sysadmin . Login Windows pengguna yang dijalankan CREATE ASSEMBLY
harus memiliki izin baca pada berbagi dan file yang dimuat dalam pernyataan.
Izin dengan keamanan ketat CLR
Izin berikut diperlukan untuk membuat rakitan CLR saat CLR strict security
diaktifkan:
- Pengguna harus memiliki
CREATE ASSEMBLY
izin - Dan salah satu kondisi berikut juga harus benar:
- Rakitan ditandatangani dengan sertifikat atau kunci asimetris yang memiliki login yang sesuai dengan
UNSAFE ASSEMBLY
izin di server. Penandatanganan rakitan disarankan. - Database memiliki properti yang
TRUSTWORTHY
diatur keON
, dan database dimiliki oleh login yang memilikiUNSAFE ASSEMBLY
izin di server. Opsi ini tidak disarankan.
- Rakitan ditandatangani dengan sertifikat atau kunci asimetris yang memiliki login yang sesuai dengan
Untuk informasi selengkapnya tentang kumpulan izin perakitan, lihat Merancang rakitan.
Contoh
J. Membuat assembly dari DLL
Contoh berikut mengasumsikan bahwa sampel Mesin Database SQL Server diinstal di lokasi default komputer lokal, dan HelloWorld.csproj
aplikasi sampel dikompilasi. Untuk informasi selengkapnya, lihat Sampel Halo Dunia.
CREATE ASSEMBLY HelloWorld
FROM '<system_drive>:\Program Files\Microsoft SQL Server\100\Samples\HelloWorld\CS\HelloWorld\bin\debug\HelloWorld.dll'
WITH PERMISSION_SET = SAFE;
Penting
Azure SQL Database tidak mendukung pembuatan rakitan dari file.
B. Membuat rakitan dari bit rakitan
Ganti bit sampel (yang tidak lengkap atau valid) dengan bit rakitan Anda.
CREATE ASSEMBLY HelloWorld
FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;
Konten terkait
- MENGUBAH RAKITAN (Transact-SQL)
- DROP ASSEMBLY (Transact-SQL)
- CREATE FUNCTION (Transact-SQL)
- CREATE PROCEDURE (Transact-SQL)
- BUAT PEMICU (Transact-SQL)
- CREATE TYPE (Transact-SQL)
- BUAT AGREGAT (Transact-SQL)
- EVENTDATA (Transact-SQL)
- Skenario Penggunaan dan Contoh untuk Integrasi Common Language Runtime (CLR)