BUAT RAKITAN (Transact-SQL)
Berlaku untuk:SQL ServerAzure 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.
Peringatan
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. Dimulai dengan SQL Server 2017 (14.x), opsi yang sp_configure
disebut clr strict security
diperkenalkan untuk 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 ini tidak disarankan. Microsoft menyarankan agar semua rakitan ditandatangani oleh sertifikat atau kunci asimetris dengan login terkait yang telah diberikan UNSAFE ASSEMBLY
izin dalam database master. Untuk informasi selengkapnya, lihat Keamanan ketat CLR.
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
Adalah 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 izin IMPERSONATE 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 multimodul. 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 ditiru.
<assembly_bits>
Adalah 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
Adalah harfiah varbinary.
varbinary_expression
Adalah ekspresi jenis varbinary.
PERMISSION_SET { AMAN | EXTERNAL_ACCESS | TIDAK AMAN }
Penting
Opsi PERMISSION_SET
dipengaruhi oleh clr strict security
opsi , dijelaskan dalam peringatan pembukaan. Ketika clr strict security
diaktifkan, semua rakitan diperlakukan sebagai UNSAFE
.
Menentukan sekumpulan izin akses kode yang diberikan ke rakitan saat diakses oleh SQL Server. Jika tidak ditentukan, SAFE diterapkan sebagai default.
Sebaiknya gunakan SAFE. SAFE adalah set izin yang paling ketat. Kode yang dijalankan oleh rakitan dengan izin SAFE 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.
Catatan
Opsi ini tidak tersedia dalam database mandiri.
UNSAFE memungkinkan rakitan akses tidak terbatas ke sumber daya, baik di dalam maupun di luar instans SQL Server. Kode yang berjalan dari dalam rakitan TIDAK AMAN dapat memanggil kode yang tidak dikelola.
Catatan
Opsi ini tidak tersedia dalam database mandiri.
Penting
SAFE adalah pengaturan izin yang direkomendasikan untuk rakitan yang melakukan tugas komputasi dan manajemen data tanpa mengakses sumber daya di luar instans SQL Server.
Sebaiknya gunakan EXTERNAL_ACCESS untuk rakitan yang mengakses sumber daya di luar instans SQL Server. EXTERNAL_ACCESS rakitan termasuk perlindungan keandalan dan skalabilitas rakitan SAFE, tetapi dari perspektif keamanan mirip dengan rakitan YANG TIDAK AMAN. Ini karena kode dalam rakitan EXTERNAL_ACCESS 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 rakitan EXTERNAL_ACCESS 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 TIDAK AMAN memungkinkan kode dalam kebebasan lengkap perakitan untuk melakukan operasi di ruang proses SQL Server yang berpotensi membahayakan ketahanan SQL Server. Rakitan TIDAK AMAN juga dapat berpotensi membalikkan sistem keamanan SQL Server atau runtime bahasa umum. Izin TIDAK AMAN harus diberikan hanya kepada rakitan yang sangat tepercaya. Hanya anggota peran server tetap sysadmin yang dapat membuat dan mengubah rakitan TIDAK AMAN.
Untuk informasi selengkapnya tentang kumpulan izin perakitan, lihat Merancang Rakitan.
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 diteruskan 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 CREATE ASSEMBLY sebelumnya, rakitan ini tidak diunggah tetapi tersedia untuk rakitan root. 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 melakukan pemeriksaan pada biner rakitan yang diunggah oleh pernyataan CREATE ASSEMBLY untuk menjamin hal 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, System.Xml.dll, Microsoft.Visualc.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 kumpulan izin AKSES AMAN atau EKSTERNAL:
Kode rakitan harus berjenis aman. Keamanan jenis ditetapkan dengan menjalankan pemverifikasi runtime bahasa umum terhadap perakitan.
Rakitan tidak boleh berisi anggota data statis di kelasnya kecuali ditandai sebagai baca-saja.
Kelas dalam rakitan tidak boleh berisi metode finalizer.
Kelas atau metode assembly harus diannotasikan hanya dengan atribut kode yang diizinkan. Untuk informasi selengkapnya, lihat 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 Microsoft .NET Framework tertentu yang memerlukan Izin Akses Kode tertentu mungkin gagal jika kumpulan izin perakitan tidak menyertakan izin tersebut.
Untuk rakitan SAFE dan EXTERNAL_ACCESS, setiap upaya untuk memanggil API .NET Framework yang diannotasi dengan HostProtectionAttributes tertentu akan gagal.
Untuk informasi selengkapnya, lihat Merancang Rakitan.
Izin
Memerlukan izin CREATE ASSEMBLY.
Jika PERMISSION_SET = EXTERNAL_ACCESS ditentukan, memerlukan izin RAKITAN AKSES EKSTERNAL di server. Jika PERMISSION_SET = TIDAK AMAN ditentukan, memerlukan izin ASSEMBLY YANG TIDAK AMAN di 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 menjalankan 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
Contoh A: Membuat rakitan dari dll
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
Contoh berikut mengasumsikan bahwa sampel Mesin Database SQL Server diinstal di lokasi default komputer lokal dan aplikasi sampel HelloWorld.csproj 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.
Contoh B: Membuat rakitan dari bit perakitan
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.
Ganti bit sampel (yang tidak lengkap atau valid) dengan bit rakitan Anda.
CREATE ASSEMBLY HelloWorld
FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;
Lihat Juga
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)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk