MENGUBAH RAKITAN (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Mengubah rakitan dengan memodifikasi properti katalog SQL Server dari rakitan. ALTER ASSEMBLY me-refreshnya ke salinan terbaru modul Microsoft .NET Framework yang menyimpan implementasinya dan menambahkan atau menghapus file yang terkait dengannya. Rakitan dibuat dengan menggunakan CREATE ASSEMBLY.

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.

Konvensi sintaks transact-SQL

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
Adalah 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 perakitan 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 assembly.

Pernyataan ALTER ASSEMBLY terpisah harus dikeluarkan untuk rakitan dependen apa pun yang juga memerlukan pembaruan.

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 properti set izin akses kode .NET Framework dari assembly. Untuk informasi selengkapnya tentang properti ini, lihat MEMBUAT RAKITAN (Transact-SQL).

Catatan

Opsi EXTERNAL_ACCESS dan TIDAK AMAN 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 NONAKTIF, 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 pernyataan ALTER ASSEMBLY meskipun ada tabel dalam database yang berisi yang berikut ini:

  • Kolom komputasi yang dipertahankan yang secara langsung atau tidak langsung mereferensikan metode dalam perakitan, melalui fungsi atau metode Transact-SQL.

  • PERIKSA batasan yang secara langsung atau tidak langsung mereferensikan metode dalam perakitan.

  • Kolom jenis yang ditentukan pengguna CLR yang bergantung pada rakitan, dan jenisnya mengimplementasikan format serialisasi UserDefined (non-Native).

  • Kolom jenis yang ditentukan pengguna CLR yang mereferensikan tampilan yang dibuat dengan menggunakan WITH SCHEMABINDING.

Jika ada batasan CHECK, 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.

Memerlukan izin UBAH SKEMA APA PUN 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 berikut, DROP FILE akan dijalankan 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 rakitan, seperti kode sumber, file debug, atau informasi terkait lainnya, ke server dan dibuat terlihat dalam tampilan katalog sys.assembly_files . 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.

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.

Jika klausa FROM ditentukan, ALTER ASSEMBLY memperbarui assembly 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 ditentukan terhadap rakitan, pernyataan ALTER ASSEMBLY menggabungkannya kembali ke implementasi terbaru rakitan. 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 dijalankan 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.

UBAH ASSEMBLY mengubah versi rakitan. Budaya dan token kunci publik assembly tetap sama.

PERNYATAAN ALTER ASSEMBLY tidak dapat digunakan untuk mengubah hal 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 dirujuk dalam properti DependentList assembly.

  • Pengindeksan metode, kecuali tidak ada indeks atau kolom komputasi yang dipertahankan tergantung pada metode tersebut, baik secara langsung maupun tidak langsung.

  • Atribut nama metode FillRow untuk fungsi bernilai tabel CLR.

  • Tanda tangan metode Akumulasi dan Hentikan untuk agregat yang ditentukan pengguna.

  • Rakitan sistem.

  • Kepemilikan rakitan. Gunakan ALTER AUTHORIZATION (Transact-SQL) 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 akan menghilangkan file apa pun yang terkait dengan assembly.

Jika ALTER ASSEMBLY dijalankan tanpa klausul data UNCHECKED, pemeriksaan dilakukan untuk memverifikasi bahwa versi rakitan baru tidak memengaruhi data yang ada dalam tabel. Tergantung pada jumlah data yang perlu diperiksa, ini dapat memengaruhi performa.

Izin

Memerlukan izin ALTER pada assembly. Persyaratan tambahan adalah sebagai berikut:

  • Untuk mengubah rakitan yang kumpulan izin yang ada EXTERNAL_ACCESS, memerlukanizin RAKITANAKSES EKSTERNAL di server.

  • Untuk mengubah rakitan yang kumpulan izin yang ada tidak AMAN memerlukan izin ASSEMBLY YANG TIDAK AMAN di server.

  • Untuk mengubah kumpulan izin rakitan menjadi EXTERNAL_ACCESS, memerlukanizin RAKITAN AKSES EKSTERNAL pada server.

  • Untuk mengubah kumpulan izin rakitan menjadi TIDAK AMAN, memerlukan izin ASSEMBLY YANG TIDAK AMAN di server.

  • Menentukan DENGAN DATA YANG TIDAK DICENTANG, memerlukan izin UBAH SKEMA APA PUN.

Izin dengan keamanan ketat CLR

Izin berikut diperlukan untuk mengubah rakitan CLR saat CLR strict security diaktifkan:

  • Pengguna harus memiliki ALTER 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 ke ON, dan database dimiliki oleh login yang memiliki UNSAFE ASSEMBLY izin di server. Opsi ini tidak disarankan.

Untuk informasi selengkapnya tentang kumpulan izin perakitan, lihat Merancang Rakitan.

Contoh

J. Menyegarkan rakitan

Contoh berikut memperbarui rakitan ComplexNumber ke salinan terbaru modul .NET Framework yang menyimpan implementasinya.

Catatan

Assembly ComplexNumber dapat dibuat dengan menjalankan skrip sampel UserDefinedDataType. 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;  

Lihat Juga

BUAT RAKITAN (Transact-SQL)
DROP ASSEMBLY (Transact-SQL)
EVENTDATA (Transact-SQL)