Bagikan melalui


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.

Konvensi sintaks transact-SQL

Sintaks

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

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 dan Terminate 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, memerlukan EXTERNAL ACCESS ASSEMBLY izin di server.

  • Untuk mengubah rakitan yang set UNSAFE izin yang ada memerlukan UNSAFE ASSEMBLY izin pada server.

  • Untuk mengubah kumpulan izin rakitan menjadi EXTERNAL_ACCESS, memerlukan EXTERNAL ACCESS ASSEMBLY izin di server.

  • Untuk mengubah kumpulan izin rakitan menjadi UNSAFE, memerlukan UNSAFE ASSEMBLY izin di server.

  • Menentukan WITH UNCHECKED DATA memerlukan ALTER 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 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. 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;