ALTER ASSEMBLY (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Изменяет сборку, изменяя при этом свойства каталога SQL Server сборки. ALTER ASSEMBLYОбновляет его до последней копии модулей платформа .NET Framework, которые содержат ее реализацию и добавляют или удаляют файлы, связанные с ним. Сборки создаются при помощи инструкции CREATE ASSEMBLY.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

assembly_name

Имя сборки, которую необходимо изменить. Аргумент assembly_name уже должен существовать в базе данных.

FROM <client_assembly_specifier> | <assembly_bits>

Обновляет сборку до последней копии модулей .NET Framework, содержащих ее реализацию. Этот параметр может использоваться при условии, что файлы, связанные с указанной сборкой, отсутствуют.

<client_assembly_specifier> указывает сетевое или локальное расположение, в котором находится обновляемая сборка. Сетевое расположение включает имя компьютера, имя общего ресурса и путь в этой общей папке. Аргумент manifest_file_name указывает имя файла, содержащего манифест сборки.

Внимание

База данных SQL Azure не поддерживает ссылку на файл.

<assembly_bits> является двоичным значением для сборки.

Отдельные ALTER ASSEMBLY инструкции должны быть выданы для всех зависимых сборок, требующих обновления.

PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }

Указывает для сборки свойство набора разрешений на доступ к коду .NET Framework. Дополнительные сведения об этом свойстве см. в статье CREATE ASSEMBLY.

Этот PERMISSION_SET параметр зависит от параметра строгой безопасности clr. Когда clr strict security включено, все сборки считаются UNSAFE.

Параметры EXTERNAL_ACCESS и UNSAFE параметры недоступны в автономной базе данных.

VISIBILITY = { ON | OFF }

Указывает, видима ли сборка для создания на ее основе функций среды CLR, хранимых процедур, триггеров, определяемых пользователем типов и определяемых пользователем агрегатных функций. Если задано значение OFF, сборка должна вызываться только другими сборками. Если для сборки уже созданы существующие объекты базы данных CLR, видимость сборки не может быть изменена. Сборки, на которые ссылается аргумент assembly_name, передаются по умолчанию как невидимые.

UNCHECKED DATA

По умолчанию происходит сбой, ALTER ASSEMBLY если он должен проверить согласованность отдельных строк таблицы. Этот параметр позволяет отложить проверки до последующего времени с помощью DBCC CHECKTABLE. Если задано, SQL Server выполняет инструкцию ALTER ASSEMBLY , даже если в базе данных есть таблицы, содержащие следующие условия:

  • материализованные вычисляемые столбцы, которые непосредственно или косвенно ссылаются на методы в сборке при помощи функций или методов языка Transact-SQL;

  • CHECK ограничения, которые непосредственно или косвенно ссылались на методы в сборке.

  • Столбцы определяемого пользователем типа СРЕДЫ CLR, зависящее от сборки, и тип реализует UserDefined формат сериализации (несериализацииNative).

  • Столбцы определяемого пользователем типа СРЕДЫ CLR, ссылающиеся на представления, созданные с помощью WITH SCHEMABINDING.

Если существуют какие-либо CHECK ограничения, они отключены и помечены ненадежными. Таблицы, содержащие столбцы, зависящие от сборки, помечаются как содержащие непроверенные данные, и сохраняют эту метку до тех пор, пока не будут проверены явно.

Указывать этот параметр могут только члены предопределенных ролей базы данных db_owner и db_ddlowner.

ALTER ANY SCHEMA Требуется разрешение на указание этого параметра.

Дополнительные сведения см. в разделе "Реализация сборок".

DROP FILE { file_name [ ,... n ] | ALL }

Удаляет из базы данных файл, связанный со сборкой, или все файлы, связанные со сборкой. При использовании с ADD FILE этим действием DROP FILE выполняется сначала. Это позволяет заменить файл одинаковым именем.

Примечание.

Этот параметр недоступен в автономной базе данных или База данных SQL Azure.

ДОБАВЛЕНИЕ ФАЙЛА ИЗ { client_file_specifier [ AS file_name ] | file_bits AS file_name }

Отправляет файл, связанный с сборкой, например исходный код, отладочные файлы или другие связанные сведения, на сервер и отображается в представлении sys.assembly_files каталога. client_file_specifier указывает расположение, откуда передаются файлы. Вместо этого можно указать список двоичных значений, составляющих файл, с помощью file_bits. file_name указывает имя, под которым файл должен храниться на экземпляре SQL Server. file_name обязателен, если указан аргумент file_bits, и необязателен, если указан аргумент client_file_specifier. Если file_name не указано, file_name часть client_file_specifier используется в качестве file_name.

Примечание.

Этот параметр недоступен в автономной базе данных или База данных SQL Azure.

Безопасность доступа к коду больше не поддерживается

Среда CLR использует управление доступом для кода (CAS) в .NET Framework, которое больше не поддерживается в качестве границы безопасности. Сборка СРЕДЫ CLR, созданная с PERMISSION_SET = SAFE возможностью доступа к ресурсам внешней системы, вызову неуправляемого кода и получению привилегий sysadmin. В SQL Server 2017 (14.x) и более поздних версиях sp_configure параметр, clr strict security, повышает безопасность сборок СРЕДЫ CLR. clr strict security включен по умолчанию и рассматривает сборки SAFE и EXTERNAL_ACCESS, как если бы они были помечены UNSAFE. Параметр clr strict security можно отключить для обратной совместимости, но не рекомендуется.

Рекомендуется подписать все сборки сертификатом или асимметричным ключом с соответствующим именем входа, предоставленным UNSAFE ASSEMBLY в master базе данных. Администраторы SQL Server также могут добавлять сборки в список сборок, которым должен доверять ядро СУБД. Дополнительные сведения см. в разделе sys.sp_add_trusted_assembly.

Замечания

ALTER ASSEMBLY не нарушает работу сеансов, выполняющих код в измененной сборке. Текущие сеансы завершают выполнение с неизмененной сборкой.

FROM Если предложение указано, ALTER ASSEMBLY обновите сборку в отношении последних копий предоставленных модулей. Так как могут существовать функции CLR, хранимые процедуры, триггеры, типы данных и определяемые пользователем агрегатные функции в экземпляре SQL Server, которые уже определены для сборки, ALTER ASSEMBLY инструкция повторно привязывает их к последней реализации сборки. Для выполнения этой привязки в измененной сборке должны существовать методы с подписями, с которыми сопоставлены функции CLR, хранимые процедуры и триггеры. Классы, реализующие определяемые пользователем типы данных CLR и пользовательские агрегатные функции, должны удовлетворять требованиям для определяемых пользователем типов или агрегатных функций.

Внимание

Если WITH UNCHECKED DATA не указано, SQL Server пытается предотвратить ALTER ASSEMBLY выполнение, если новая версия сборки влияет на существующие данные в таблицах, индексах или других постоянных сайтах. Однако SQL Server не гарантирует, что вычисляемые столбцы, индексы, индексированные представления или выражения будут согласованы с базовыми подпрограммами и типами при обновлении сборки СРЕДЫ CLR. Используйте осторожность при выполнении ALTER ASSEMBLY , чтобы убедиться, что между результатом выражения и значением не соответствует это выражение, хранящееся в сборке.

ALTER ASSEMBLY изменяет версию сборки. Культура и токен открытого ключа сборки не изменяются.

Инструкцию ALTER ASSEMBLY нельзя использовать для изменения следующих элементов:

  • Подписи функций CLR, агрегатных функций, хранимых процедур и триггеров в экземпляре SQL Server, на которые ссылается сборка. ALTER ASSEMBLY завершается ошибкой, если SQL Server не может повторно привязыть объекты базы данных платформа .NET Framework в SQL Server с новой версией сборки.

  • Подписи методов сборки, вызываемых из других сборок.

  • Список сборок, зависящих от сборки, как указано в DependentList свойстве сборки.

  • Возможность использования индексов в методе и в том числе, если только не существует индексов или постоянных вычисляемых столбцов, прямо или косвенно зависящих от этого метода.

  • FillRow Атрибут имени метода для функций с табличным значением среды CLR.

  • Сигнатура Accumulate метода Terminate для определяемых пользователем агрегатов.

  • Системные сборки.

  • Владение сборкой. Вместо этого используйте ALTER AUTHORIZATION .

Кроме того, для сборок, реализующих определяемые пользователем типы, ALTER ASSEMBLY можно использовать только для внесения следующих изменений:

  • Изменение общедоступных методов определяемого пользователем класса типа, если подписи или атрибуты не изменяются.

  • добавление новых общих методов;

  • изменение приватных методов любым образом.

Поля, содержащиеся в собственном сериализованном пользовательском типе, включая члены данных или базовые классы, нельзя изменять с помощью ALTER ASSEMBLY. Любые другие изменения не поддерживаются.

Если ADD FILE FROM он не указан, удаляет все файлы, ALTER ASSEMBLY связанные с сборкой.

Если ALTER ASSEMBLY предложение данных не выполняется UNCHECKED без предложения данных, выполняется проверка, чтобы убедиться, что новая версия сборки не влияет на существующие данные в таблицах. В зависимости от объема данных, которые необходимо проверить, этот шаг может повлиять на производительность.

Разрешения

Требуется ALTER разрешение на сборку. Дополнительные требования.

  • Чтобы изменить сборку, имеющуюся EXTERNAL_ACCESSгруппу разрешений, требуется EXTERNAL ACCESS ASSEMBLY разрешение на сервере.

  • Чтобы изменить сборку, имеющуюся группу разрешений, требуется UNSAFE UNSAFE ASSEMBLY разрешение на сервере.

  • Чтобы изменить набор разрешений сборки EXTERNAL_ACCESS, требуется EXTERNAL ACCESS ASSEMBLY разрешение на сервере.

  • Чтобы изменить набор разрешений сборки UNSAFE, требуется UNSAFE ASSEMBLY разрешение на сервере.

  • Указание WITH UNCHECKED DATA обязательного ALTER ANY SCHEMA разрешения.

Разрешения со строгой безопасностью среды CLR

Для изменения сборки среды CLR при включении clr strict security требуются следующие разрешения:

  • Пользователь должен иметь разрешение ALTER ASSEMBLY.

  • Кроме того, должно выполняться одно из следующих условий:

    • Сборка должна была подписана сертификатом или асимметричным ключом, имеющим соответствующее имя входа с разрешением UNSAFE ASSEMBLY на сервере. Рекомендуется использовать подпись сборки.

    • База данных имеет TRUSTWORTHY свойство со значением ON и базы данных, принадлежащие имени входа, имеющем разрешение UNSAFE ASSEMBLY на сервере. Этот параметр использовать не рекомендуется.

Дополнительные сведения о наборах разрешений сборки см. в разделе "Проектирование сборок".

Примеры

А. Обновление сборки

На следующем примере показано, как сборка ComplexNumber обновляется до последней копии модулей .NET Framework, содержащих ее реализацию.

Примечание.

Сборку ComplexNumber UserDefinedDataType можно создать, выполнив примеры скриптов. Дополнительные сведения см. в статье Определяемый пользователем тип.

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

Внимание

База данных SQL Azure не поддерживает ссылку на файл.

B. Добавление файла для связывания с сборкой

На следующем примере показано, как производится передача файла с исходным кодом Class1.cs, связанного со сборкой MyClass. При этом предполагается, что сборка MyClass уже создана в базе данных.

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

Внимание

База данных SQL Azure не поддерживает ссылку на файл.

C. Изменение разрешений сборки

На следующем примере показано, как набор разрешений сборки ComplexNumber меняется с SAFE на EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;