ALTER ASSEMBLY (Transact-SQL)

Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği

Bir assembly'nin SQL Server kataloğu özelliklerini değiştirerek bir assembly'yi değiştirir. ALTER ASSEMBLYuygulamasını saklayan .NET Framework modüllerinin en son kopyasına yeniler ve onunla ilişkili dosyaları ekler veya kaldırırlar. Montajlar CREATE ASSEMBLY, kullanılarak oluşturulur.

Transact-SQL söz dizimi kuralları

Syntax

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

Arguments

assembly_name

Değiştirmek istediğiniz montajın adı. assembly_name zaten veritabanında var olmalı.

DENİŞTAN <client_assembly_specifier> | <assembly_bits>

Bir assembly'yi, uygulamasını saklayan .NET Framework modüllerinin en son kopyasına günceller. Bu seçenek, yalnızca belirtilen montajla ilişkili dosya yoksa kullanılabilir.

<client_assembly_specifier> yenilenen montajın bulunduğu ağ veya yerel konumu belirtir. Ağ konumu, bilgisayar adı, paylaşım adı ve bu paylaşım içindeki bir yolu içerir. manifest_file_name , montaj manifestosunu içeren dosyanın adını belirtir.

Important

Azure SQL Veritabanı dosyaya referans vermeyi desteklemez.

<assembly_bits> montaj için ikili değerdir.

Güncellenmesi gereken bağımlı meclisler için ayrı ALTER ASSEMBLY açıklamalar verilmelidir.

PERMISSION_SET = { GÜVENLI | EXTERNAL_ACCESS | GÜVENLİ }

Assembly'nin .NET Framework kodu erişim izni seti özelliğini belirler. Bu özellik hakkında daha fazla bilgi için bkz.CREATE ASSEMBLY

Bu PERMISSION_SET seçenek, clr sıkı güvenlik seçeneğinden etkilenir. Etkinleştirildiğinde clr strict security , tüm derlemeler olarak UNSAFEdeğerlendirilir.

EXTERNAL_ACCESS ve UNSAFE seçenekleri, kapsanan bir veritabanında kullanılamaz.

GÖRÜNÜRLÜK = { AÇIK | KAPALI }

Assembly'nin ortak dil çalışma zamanı (CLR) fonksiyonları, depolanmış prosedürler, tetikleyiciler, kullanıcı tanımlı türler ve kullanıcı tanımlı toplu fonksiyonlar oluşturmak için görünür olup olmadığını gösterir. Eğer ayarlanırsa OFF, assembly yalnızca diğer montajlar tarafından çağrılmak üzere tasarlanmıştır. Eğer assembly karşısında zaten oluşturulmuş mevcut CLR veritabanı nesneleri varsa, montajın görünürlüğü değiştirilemez. assembly_name tarafından referans verilen tüm montajlar varsayılan olarak görünmüyor olarak yüklenir.

KONTROLLENMEZ VERILER

Varsayılan olarak, ALTER ASSEMBLY bireysel tablo satırlarının tutarlılığını doğrulamak gerekiyorsa başarısız olur. Bu seçenek, kontrollerin daha sonra ertelemesine olanak tanır ve .DBCC CHECKTABLE Belirtilirse, SQL Server veritabanında aşağıdaki koşulları içeren tablolar olsa bile ifadeyi ALTER ASSEMBLY çalıştırır:

  • Montajda doğrudan veya dolaylı olarak metodlara referans veren sürekli hesaplanan sütunlar, Transact-SQL fonksiyonlar veya yöntemler aracılığıyla.

  • CHECK birleştirmedeki yöntemlere doğrudan veya dolaylı olarak referans veren kısıtlamalar.

  • Derlemeye bağlı clr kullanıcı tanımlı türün sütunları ve türü bir UserDefined (Nativeolmayan) serileştirme biçimi uygular.

  • CLR kullanıcı tanımlı tipli sütunlar, kullanılarak WITH SCHEMABINDINGoluşturulan görünümlere referans olur.

Herhangi bir CHECK kısıtlama varsa, bunlar devre dışı bırakılır ve güvenilmez olarak işaretlenir. Montaja bağlı olarak sütunları içeren tablolar, bu tablolar açıkça kontrol edilene kadar kontrol edilmemiş veri içeriyor olarak işaretlenir.

Yalnızca db_owner ve db_ddlowner sabit veritabanı rollerinin üyeleri bu seçeneği belirtebilir.

Bu seçeneği belirtmek için izin gerekiyor ALTER ANY SCHEMA .

Daha fazla bilgi için bkz. Montajların uygulanması.

DOSYA BIRAKMA { file_name [ ,... n ] | HEPSI }

Assembly ile ilişkili dosya adını veya assembly ile ilişkili tüm dosyaları veritabanından kaldırır. Eğer bu ADD FILE ile kullanılırsa, DROP FILE önce çalıştırılır. Bu, aynı dosya adıyla bir dosyayı değiştirmenizi sağlar.

Note

Bu seçenek, içinde barındırılmış veritabanında veya Azure SQL Veritabanı'de mevcut değildir.

{ client_file_specifier [ AS file_name ] | ADRESINDEN DOSYA EKLE file_bitsAS file_name }

Kaynak kodu, hata ayıklama dosyaları veya diğer ilgili bilgiler gibi bir dosyayı sunucuya yükler ve katalog görünümünde sys.assembly_files görünür hale getirir. client_file_specifier , dosyanın yükleneceği yeri belirtir. file_bits bunun yerine dosyayı oluşturan ikili değerler listesini belirtmek için kullanılabilir. file_name, dosyanın SQL Server örneğinde hangi isimle saklanması gerektiğini belirtir. file_name belirtilmişse file_bits belirtilmelidir ve client_file_specifier belirtilmişse isteğe bağlıdır. Eğer file_name belirtilmemişse, client_file_specifier'in file_name kısmı file_name olarak kullanılır.

Note

Bu seçenek, içinde barındırılmış veritabanında veya Azure SQL Veritabanı'de mevcut değildir.

Kod erişim güvenliği artık desteklenmiyor

CLR, artık güvenlik sınırı olarak desteklenmeyen .NET Framework'te Kod Erişim Güvenliği'ni (CAS) kullanır. PERMISSION_SET = SAFE ile oluşturulan bir CLR derlemesi dış sistem kaynaklarına erişebilir, yönetilmeyen kodu çağırabilir ve sysadmin ayrıcalıkları alabilir. SQL Server 2017 (14.x) ve sonraki sürümlerinde, sp_configure seçeneği, clr katı güvenlik, CLR derlemelerinin güvenliğini artırır. clr strict security varsayılan olarak etkinleştirilir ve SAFE ve EXTERNAL_ACCESS derlemeleri UNSAFEolarak işaretlenmiş gibi değerlendirir. geriye dönük uyumluluk için clr strict security seçeneği devre dışı bırakılabilir, ancak önerilmez.

Tüm derlemeleri, UNSAFE ASSEMBLY veritabanında master izni verilmiş ilgili oturum ile bir sertifika veya asimetrik anahtarla imzalamanızı öneririz. SQL Server yöneticileri, Veritabanı Motoru'nun güvenmesi gereken bir derleme listesine de derleme ekleyebilir. Daha fazla bilgi için bkz. sys.sp_add_trusted_assembly.

Remarks

ALTER ASSEMBLY Değiştirilen montajda kod çalıştıran ve şu anda çalışan oturumları bozmaz. Mevcut oturumlar, montajın değiştirilmemiş kısımları kullanılarak yürütmeyi tamamlar.

Eğer madde FROM belirtilmişse, ALTER ASSEMBLY montajı sağlanan modüllerin en son kopyalarına göre günceller. SQL Server örneğinde zaten assembly karşısında tanımlanmış CLR fonksiyonları, depolanmış prosedürler, tetikleyiciler, veri tipleri ve kullanıcı tanımlı toplu fonksiyonlar olabileceği için, ifade ALTER ASSEMBLY bunları assembly uygulamasının en son uygulamasına yeniden bağlar. Bu yeniden bağlamayı gerçekleştirmek için, CLR fonksiyonlarına, depolanan prosedürlere ve tetikleyicilere eşlenen yöntemlerin modifiye edilmiş montajda aynı imzalarla hâlâ var olması gerekir. CLR kullanıcı tanımlı tipleri ve kullanıcı tanımlı toplu fonksiyonları uygulayan sınıflar, kullanıcı tanımlı bir tür veya agregat olma gereksinimlerini karşılamaya devam etmelidir.

Caution

WITH UNCHECKED DATA belirtilmezse, yeni derleme sürümü tablolar, dizinler veya diğer kalıcı sitelerdeki mevcut verileri etkiliyorsa SQL Server ALTER ASSEMBLY yürütülmesini engellemeye çalışır. Ancak, SQL Server, CLR assembly güncellendiğinde hesaplanan sütunlar, indeksler, indekslenmiş görünümler veya ifadelerin altta yatan rutinler ve tiplerle tutarlı olacağını garanti etmez. Çalıştırırken ALTER ASSEMBLY dikkatli olun; bir ifadenin sonucu ile assembly içinde saklanan ifadeye dayalı bir değer arasında uyumsuzluk olmadığından emin olun.

ALTER ASSEMBLY derleme sürümünü değiştirir. Derlemenin kültürü ve ortak anahtar belirteci aynı kalır.

Bu ALTER ASSEMBLY ifa, aşağıdaki maddeleri değiştirmek için kullanılamaz:

  • SQL Server'ın bir örneğinde montaja referans veren CLR fonksiyonlarının, toplu fonksiyonların, depolanmış prosedürlerin ve tetikleyicilerin imzaları. ALTER ASSEMBLYSQL Server, SQL Server'da .NET Framework veritabanı nesnelerini montajın yeni sürümüyle yeniden bağlayamadığında başarısız olur.

  • Montajdaki diğer montajlardan çağrılan yöntemlerin imzaları.

  • Montajın özelliğinde referans verilen montaja DependentList bağlı montajların listesi.

  • Bir yöntemin indekslenebilirliği, eğer o yönteme bağlı olarak doğrudan veya dolaylı olarak sürekli hesaplanan sütunlar yoksa.

  • FillRow CLR tablo değerli fonksiyonlar için metod adı özniteliği.

  • Kullanıcı Accumulate tanımlı agregalar için ve Terminate metod imzası ile karşılaştırılabilir.

  • Sistem montajları.

  • Meclis mülkiyeti. Bunun yerine ALTER AUTHORIZATION kullanın.

Ayrıca, kullanıcı tanımlı türleri uygulayan montajlar için, ALTER ASSEMBLY yalnızca aşağıdaki değişiklikleri yapmak için kullanılabilir:

  • Kullanıcı tarafından tanımlanan tür sınıfının kamuya açık metotlarını, imzalar veya öznitelikler değişmediği sürece değiştirmek.

  • Yeni kamusal yöntemler eklemek.

  • Özel yöntemleri herhangi bir şekilde değiştirmek.

Yerel serileştirilmiş kullanıcı tanımlı türde bulunan alanlar, veri üyeleri veya temel sınıflar dahil, kullanılarak değiştirilemez ALTER ASSEMBLY. Diğer tüm değişiklikler desteklenmiyor.

Belirtilmediyse ADD FILE FROM , ALTER ASSEMBLY montajla ilgili dosyaları düşürür.

Veri ALTER ASSEMBLY maddesi UNCHECKED olmadan çalıştırılırsa, yeni assembly sürümünün tablolardaki mevcut verileri etkilemediğini doğrulamak için kontroller yapılır. Kontrol edilmesi gereken veri miktarına bağlı olarak, bu adım performansı etkileyebilir.

Permissions

Montaj için izin gerekiyor ALTER . Ek gereksinimler şunlardır:

  • Mevcut izin kümesi EXTERNAL_ACCESSolan bir montajı değiştirmek için sunucuda izin gerekir EXTERNAL ACCESS ASSEMBLY .

  • Mevcut izin seti UNSAFE olan bir assembly'yi değiştirmek için sunucuda izin gereklidir UNSAFE ASSEMBLY .

  • Bir assembly'nin izin kümesini 'ye EXTERNAL_ACCESSdeğiştirmek için sunucuda izin gerekir EXTERNAL ACCESS ASSEMBLY .

  • Bir assembly'nin izin kümesini 'ye UNSAFEdeğiştirmek için sunucuda izin gerekir UNSAFE ASSEMBLY .

  • Belirtmek WITH UNCHECKED DATA için izin gerekir ALTER ANY SCHEMA .

CLR katı güvenliğine sahip izinler

Bir CLR montajını etkinleştirdiğinde clr strict security değiştirmek için aşağıdaki izinler gereklidir:

  • Kullanıcının ALTER ASSEMBLY iznine sahip olması gerekir

  • Ve aşağıdaki koşullardan biri de geçerli olmalıdır:

    • Derleme, sunucuda UNSAFE ASSEMBLY iznine sahip olan ilgili bir oturum açma bilgileriyle ilişkili sertifika veya asimetrik anahtarla imzalanır. Derlemeyi imzalamanız önerilir.

    • Veritabanında TRUSTWORTHY özelliği olarak ONayarlanmıştır ve veritabanı, sunucuda izni olan bir oturum açma bilgilerine UNSAFE ASSEMBLY aittir. Bu seçenek önerilmez.

Montaj izin setleri hakkında daha fazla bilgi için bkz. Montajların tasarımı.

Examples

A. Bir montajı yenile

Aşağıdaki örnek, assembly ComplexNumber uygulamasını saklayan .NET Framework modüllerinin en son kopyasına günceller.

Note

Assembly ComplexNumber örnek betikleri UserDefinedDataType çalıştırarak oluşturulabilir. Daha fazla bilgi için bkz. Kullanıcı Tanımlı Tip.

 ALTER ASSEMBLY ComplexNumber
 FROM 'C:\Program Files\Microsoft SQL Server\130\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'

Important

Azure SQL Veritabanı dosyaya referans vermeyi desteklemez.

B. Bir assembly ile ilişkilendirilecek bir dosya ekleyin

Aşağıdaki örnek, assembly MyClassile ilişkilendirilecek kaynak kod dosyasını Class1.cs yükler. Bu örnek, assembly MyClass veritabanında zaten oluşturulmuş olduğunu varsayıyor.

ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';

Important

Azure SQL Veritabanı dosyaya referans vermeyi desteklemez.

C. Bir meclisin izinlerini değiştir

Aşağıdaki örnek, assembly ComplexNumber izin kümesini SAFE'den 'a 'ye EXTERNAL ACCESSdeğiştirir.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;