MENGUBAH RAKITAN (Transact-SQL)
Berlaku untuk: SQL Server
Azure SQL Managed Instance
Mengubah rakitan dengan memodifikasi properti katalog SQL Server dari rakitan. ALTER ASSEMBLY
merefreshnya ke salinan terbaru modul .NET Framework yang menyimpan implementasinya dan menambahkan atau menghapus file yang terkait dengannya. Rakitan dibuat dengan menggunakan CREATE ASSEMBLY.
Sintaksis
ALTER ASSEMBLY assembly_name
[ FROM <client_assembly_specifier> | <assembly_bits> ]
[ WITH <assembly_option> [ , ...n ] ]
[ DROP FILE { file_name [ , ...n ] | ALL } ]
[ ADD FILE FROM
{
client_file_specifier [ AS file_name ]
| file_bits AS file_name
} [ , ...n ]
] [ ; ]
<client_assembly_specifier> ::=
'\\computer_name\share-name\ [ path\ ] manifest_file_name '
| '[ local_path\ ] manifest_file_name'
<assembly_bits> ::=
{ varbinary_literal | varbinary_expression }
<assembly_option> ::=
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
| VISIBILITY = { ON | OFF }
| UNCHECKED DATA
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
assembly_name
Nama rakitan yang ingin Anda ubah. assembly_name harus sudah ada di database.
DARI <client_assembly_specifier> | <assembly_bits>
Memperbarui rakitan ke salinan terbaru modul .NET Framework yang menyimpan implementasinya. Opsi ini hanya dapat digunakan jika tidak ada file terkait dengan rakitan yang ditentukan.
<client_assembly_specifier>
menentukan jaringan atau lokasi lokal tempat assembly yang sedang disegarkan berada. Lokasi jaringan mencakup nama komputer, nama berbagi, dan jalur dalam berbagi tersebut. manifest_file_name menentukan nama file yang berisi manifes rakitan.
Penting
Azure SQL Database tidak mendukung referensi file.
<assembly_bits>
adalah nilai biner untuk rakitan.
Pernyataan terpisah ALTER ASSEMBLY
harus dikeluarkan untuk rakitan dependen apa pun yang juga memerlukan pembaruan.
PERMISSION_SET = { AMAN | EXTERNAL_ACCESS | TIDAK AMAN }
Menentukan properti set izin akses kode .NET Framework dari assembly. Untuk informasi selengkapnya tentang properti ini, lihat MEMBUAT RAKITAN.
Opsi PERMISSION_SET
ini dipengaruhi oleh opsi keamanan ketat clr. Ketika clr strict security
diaktifkan, semua rakitan diperlakukan sebagai UNSAFE
.
Opsi EXTERNAL_ACCESS
dan UNSAFE
tidak tersedia dalam database mandiri.
VISIBILITAS = { AKTIF | NONAKTIF }
Menunjukkan apakah rakitan terlihat untuk membuat fungsi runtime bahasa umum (CLR), prosedur tersimpan, pemicu, jenis yang ditentukan pengguna, dan fungsi agregat yang ditentukan pengguna terhadapnya. Jika diatur ke OFF
, rakitan dimaksudkan untuk dipanggil hanya oleh rakitan lain. Jika ada objek database CLR yang sudah dibuat terhadap rakitan, visibilitas rakitan tidak dapat diubah. Setiap rakitan yang direferensikan oleh assembly_name diunggah sebagai tidak terlihat secara default.
DATA YANG TIDAK DICENTANG
Secara default, ALTER ASSEMBLY
gagal jika harus memverifikasi konsistensi baris tabel individual. Opsi ini memungkinkan penundaan pemeriksaan hingga di lain waktu dengan menggunakan DBCC CHECKTABLE
. Jika ditentukan, SQL Server menjalankan ALTER ASSEMBLY
pernyataan bahkan jika ada tabel dalam database yang berisi kondisi berikut:
Kolom komputasi yang dipertahankan yang secara langsung atau tidak langsung mereferensikan metode dalam perakitan, melalui fungsi atau metode Transact-SQL.
CHECK
batasan yang secara langsung atau tidak langsung mereferensikan metode dalam rakitan.Kolom jenis yang ditentukan pengguna CLR yang bergantung pada rakitan, dan jenisnya mengimplementasikan
UserDefined
format serialisasi (non-Native
).Kolom jenis yang ditentukan pengguna CLR yang mereferensikan tampilan yang dibuat dengan menggunakan
WITH SCHEMABINDING
.
Jika ada CHECK
batasan, batasan tersebut dinonaktifkan dan ditandai tidak tepercaya. Tabel apa pun yang berisi kolom tergantung pada rakitan ditandai sebagai berisi data yang tidak dicentang hingga tabel tersebut diperiksa secara eksplisit.
Hanya anggota peran database tetap db_owner dan db_ddlowner yang dapat menentukan opsi ini.
ALTER ANY SCHEMA
Memerlukan izin untuk menentukan opsi ini.
Untuk informasi selengkapnya, lihat Menerapkan rakitan.
DROP FILE { file_name [ , ... n ] | SEMUA }
Menghapus nama file yang terkait dengan rakitan, atau semua file yang terkait dengan rakitan, dari database. Jika digunakan dengan ADD FILE
hal berikut, DROP FILE
jalankan terlebih dahulu. Ini memungkinkan Anda mengganti file dengan nama file yang sama.
Catatan
Opsi ini tidak tersedia dalam database mandiri atau Azure SQL Database.
TAMBAHKAN FILE DARI { client_file_specifier [ AS file_name ] | file_bits AS file_name }
Mengunggah file yang akan dikaitkan dengan assembly, seperti kode sumber, file debug, atau informasi terkait lainnya, ke server dan dibuat terlihat dalam sys.assembly_files
tampilan katalog. client_file_specifier menentukan lokasi tempat mengunggah file. file_bits dapat digunakan sebagai gantinya untuk menentukan daftar nilai biner yang membentuk file. file_name menentukan nama tempat file harus disimpan dalam instans SQL Server. file_name harus ditentukan jika file_bits ditentukan, dan bersifat opsional jika client_file_specifier ditentukan. Jika file_name tidak ditentukan, bagian file_name dari client_file_specifier digunakan sebagai file_name.
Catatan
Opsi ini tidak tersedia dalam database mandiri atau Azure SQL Database.
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
ALTER ASSEMBLY
tidak mengganggu sesi yang sedang berjalan yang menjalankan kode dalam rakitan yang sedang dimodifikasi. Sesi saat ini menyelesaikan eksekusi dengan menggunakan bit assembly yang tidak diubah.
FROM
Jika klausul ditentukan, ALTER ASSEMBLY
perbarui rakitan sehubungan dengan salinan terbaru modul yang disediakan. Karena mungkin ada fungsi CLR, prosedur tersimpan, pemicu, jenis data, dan fungsi agregat yang ditentukan pengguna dalam instans SQL Server yang sudah didefinisikan terhadap perakitan, pernyataan menggabungkannya ALTER ASSEMBLY
kembali ke implementasi terbaru perakitan. Untuk mencapai pengikatan ulang ini, metode yang memetakan ke fungsi CLR, prosedur tersimpan, dan pemicu masih harus ada di rakitan yang dimodifikasi dengan tanda tangan yang sama. Kelas yang mengimplementasikan jenis yang ditentukan pengguna CLR dan fungsi agregat yang ditentukan pengguna harus tetap memenuhi persyaratan untuk menjadi jenis atau agregat yang ditentukan pengguna.
Perhatian
Jika WITH UNCHECKED DATA
tidak ditentukan, SQL Server mencoba mencegah ALTER ASSEMBLY
eksekusi jika versi rakitan baru memengaruhi data yang ada dalam tabel, indeks, atau situs persisten lainnya. Namun, SQL Server tidak menjamin bahwa kolom komputasi, indeks, tampilan atau ekspresi terindeks akan konsisten dengan rutinitas dan jenis yang mendasar ketika rakitan CLR diperbarui. Berhati-hatilah saat Anda menjalankan ALTER ASSEMBLY
untuk memastikan bahwa tidak ada ketidakcocokan antara hasil ekspresi dan nilai berdasarkan ekspresi yang disimpan dalam rakitan.
ALTER ASSEMBLY
mengubah versi rakitan. Budaya dan token kunci publik assembly tetap sama.
Pernyataan ALTER ASSEMBLY
tidak dapat digunakan untuk mengubah item berikut:
Tanda tangan fungsi CLR, fungsi agregat, prosedur tersimpan, dan pemicu dalam instans SQL Server yang mereferensikan perakitan. ALTER ASSEMBLY gagal ketika SQL Server tidak dapat mengikat ulang objek database .NET Framework di SQL Server dengan versi baru rakitan.
Tanda tangan metode dalam rakitan yang dipanggil dari rakitan lain.
Daftar rakitan yang bergantung pada perakitan, seperti yang
DependentList
dirujuk dalam properti perakitan.Pengindeksan metode, kecuali tidak ada indeks atau kolom komputasi yang dipertahankan tergantung pada metode tersebut, baik secara langsung maupun tidak langsung.
Atribut
FillRow
nama metode untuk fungsi bernilai tabel CLR.Tanda
Accumulate
tangan metode danTerminate
untuk agregat yang ditentukan pengguna.Rakitan sistem.
Kepemilikan rakitan. Gunakan ALTER AUTHORIZATION sebagai gantinya.
Selain itu, untuk rakitan yang menerapkan jenis yang ditentukan pengguna, ALTER ASSEMBLY
hanya dapat digunakan untuk membuat perubahan berikut:
Memodifikasi metode publik kelas jenis yang ditentukan pengguna, selama tanda tangan atau atribut tidak diubah.
Menambahkan metode publik baru.
Memodifikasi metode privat dengan cara apa pun.
Bidang yang terkandung dalam jenis yang ditentukan pengguna berserialisasi asli, termasuk anggota data atau kelas dasar, tidak dapat diubah dengan menggunakan ALTER ASSEMBLY
. Semua perubahan lainnya tidak didukung.
Jika ADD FILE FROM
tidak ditentukan, ALTER ASSEMBLY
menghilangkan file apa pun yang terkait dengan assembly.
Jika ALTER ASSEMBLY
dijalankan tanpa UNCHECKED
klausul data, pemeriksaan dilakukan untuk memverifikasi bahwa versi rakitan baru tidak memengaruhi data yang ada dalam tabel. Bergantung pada jumlah data yang perlu diperiksa, langkah ini mungkin memengaruhi performa.
Izin
ALTER
Memerlukan izin pada assembly. Persyaratan tambahan adalah sebagai berikut:
Untuk mengubah rakitan yang set izin yang ada adalah
EXTERNAL_ACCESS
, memerlukanEXTERNAL ACCESS ASSEMBLY
izin di server.Untuk mengubah rakitan yang set
UNSAFE
izin yang ada memerlukanUNSAFE ASSEMBLY
izin pada server.Untuk mengubah kumpulan izin rakitan menjadi
EXTERNAL_ACCESS
, memerlukanEXTERNAL ACCESS ASSEMBLY
izin di server.Untuk mengubah kumpulan izin rakitan menjadi
UNSAFE
, memerlukanUNSAFE ASSEMBLY
izin di server.Menentukan
WITH UNCHECKED DATA
memerlukanALTER ANY SCHEMA
izin.
Izin dengan keamanan ketat CLR
Izin berikut diperlukan untuk mengubah rakitan CLR saat clr strict security
diaktifkan:
Pengguna harus memiliki
ALTER ASSEMBLY
izinDan 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.
Untuk informasi selengkapnya tentang kumpulan izin perakitan, lihat Merancang rakitan.
Contoh
J. Merefresh rakitan
Contoh berikut memperbarui rakitan ComplexNumber
ke salinan terbaru modul .NET Framework yang menyimpan implementasinya.
Catatan
Assembly ComplexNumber
dapat dibuat dengan menjalankan UserDefinedDataType
skrip sampel. Untuk informasi selengkapnya, lihat Jenis yang Ditentukan Pengguna.
ALTER ASSEMBLY ComplexNumber
FROM 'C:\Program Files\Microsoft SQL Server\130\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'
Penting
Azure SQL Database tidak mendukung referensi file.
B. Menambahkan file untuk dikaitkan dengan rakitan
Contoh berikut mengunggah file Class1.cs
kode sumber yang akan dikaitkan dengan assembly MyClass
. Contoh ini mengasumsikan assembly MyClass
sudah dibuat dalam database.
ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';
Penting
Azure SQL Database tidak mendukung referensi file.
C. Mengubah izin rakitan
Contoh berikut mengubah kumpulan izin assembly ComplexNumber
dari SAFE ke EXTERNAL ACCESS
.
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;