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
Аргументы
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 не поддерживает ссылку на файл.
В. Изменение разрешений сборки
На следующем примере показано, как набор разрешений сборки ComplexNumber
меняется с SAFE на EXTERNAL ACCESS
.
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;