ALTER ASSEMBLY (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Modifica una ensamblado cambiando las propiedades del catálogo SQL Server de un ensamblado. ALTER ASSEMBLY lo actualiza a la última copia de los módulos de .NET Framework que contienen su implementación y agrega o quita los archivos asociados a él. Los ensamblados se crean mediante CREATE ASSEMBLY.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

assembly_name

Nombre del ensamblado que desea modificar. assembly_name ya debe existir en la base de datos.

FROM <client_assembly_specifier> | <assembly_bits>

Actualiza un ensamblado a la última copia de los módulos de .NET Framework que conservan su implementación. Esta opción solo se puede utilizar si no hay archivos asociados con el ensamblado especificado.

<client_assembly_specifier> especifica la ubicación local o de red donde se encuentra el ensamblado que se va a actualizar. La ubicación de red incluye el nombre del equipo, el nombre del recurso compartido y una ruta de acceso dentro de ese recurso compartido. manifest_file_name especifica el nombre del archivo que contiene el manifiesto del ensamblado.

Importante

Azure SQL Database no admite la referencia a un archivo.

<assembly_bits> es el valor binario para el ensamblado.

Se deben emitir instrucciones independientes ALTER ASSEMBLY para los ensamblados dependientes que también requieran la actualización.

PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }

Especifica la propiedad del conjunto de permisos de acceso al código .NET Framework del ensamblado. Para obtener más información sobre esta propiedad, vea CREATE ASSEMBLY.

La PERMISSION_SET opción se ve afectada por la opción de seguridad clr strict. Cuando clr strict security está habilitada, todos los ensamblados se tratan como UNSAFE.

Las EXTERNAL_ACCESS opciones y UNSAFE no están disponibles en una base de datos independiente.

VISIBILITY = { ON | OFF }

Indica si el ensamblado es visible para crear en él funciones CLR (Common Language Runtime), procedimientos almacenados, desencadenadores, tipos definidos por el usuario y funciones de agregado definidas por el usuario. Si se establece en OFF, el ensamblado está pensado para ser llamado solo por otros ensamblados. Si ya hay objetos de base de datos CLR existentes creados en el ensamblado, no se puede cambiar la visibilidad del ensamblado. Los ensamblados a los que se haga referencia con assembly_name se cargan como no visibles, de forma predeterminada.

UNCHECKED DATA

De forma predeterminada, ALTER ASSEMBLY se produce un error si debe comprobar la coherencia de las filas de tabla individuales. Esta opción permite posponer las comprobaciones hasta un momento posterior mediante DBCC CHECKTABLE. Si se especifica, SQL Server ejecuta la ALTER ASSEMBLY instrucción incluso si hay tablas en la base de datos que contienen las condiciones siguientes:

  • Columnas calculadas persistentes que hacen referencia de forma directa o indirecta a métodos en el ensamblado, mediante funciones o métodos de Transact-SQL.

  • CHECK restricciones que hacen referencia directa o indirectamente a los métodos del ensamblado.

  • Columnas de un tipo definido por el usuario clR que dependen del ensamblado y el tipo implementa un UserDefined formato de serialización (no).Native

  • Columnas de un tipo definido por el usuario clR que hace referencia a vistas creadas mediante WITH SCHEMABINDING.

Si hay restricciones CHECK , están deshabilitadas y marcadas como que no son de confianza. Las tablas que contienen columnas que dependen del ensamblado se marcan como que contienen datos sin comprobar hasta que se comprueban explícitamente.

Solo los miembros de los roles fijos de base de datos db_owner y db_ddlowner pueden especificar esta opción.

Requiere el ALTER ANY SCHEMA permiso para especificar esta opción.

Para obtener más información, consulte Implementación de ensamblados.

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

Quita de la base de datos el nombre de archivo o todos los archivos asociados con el ensamblado. Si se usa con ADD FILE esto, DROP FILE se ejecuta primero. Esto le permite reemplazar un archivo por el mismo nombre de archivo.

Nota:

Esta opción no está disponible en una base de datos independiente ni en Azure SQL Database.

AGREGAR ARCHIVO FROM { client_file_specifier [ AS file_name ] | file_bits AS file_name }

Carga un archivo que se va a asociar al ensamblado, como el código fuente, los archivos de depuración u otra información relacionada, en el servidor y se hace visible en la vista de sys.assembly_files catálogo. client_file_specifier especifica la ubicación desde la que se va a cargar el archivo. Se puede usar bits_de_archivo en lugar de especificar la lista de valores binarios que forman el archivo. file_name especifica el nombre con el que el archivo se debe almacenar en la instancia de SQL Server. Se debe especificar file_name si se especifica file_bits y es opcional si se especifica client_file_specifier. Si no se especifica file_name , la parte file_name de client_file_specifier se usa como file_name.

Nota:

Esta opción no está disponible en una base de datos independiente ni en Azure SQL Database.

Ya no se admite la seguridad de acceso del código

CLR usa la seguridad de acceso del código (CAS) de .NET Framework, que ya no se admite como un límite de seguridad. Un ensamblado CLR creado con la opción PERMISSION_SET = SAFE puede tener acceso a los recursos externos del sistema, llamar a código no administrado y adquirir privilegios sysadmin. En SQL Server 2017 (14.x) y versiones posteriores, la opción sp_configure, CLR Strict Security, mejora la seguridad de los ensamblados CLR. La opción clr strict security está habilitada de forma predeterminada y trata los ensamblados SAFE y EXTERNAL_ACCESS como si estuvieran marcados con UNSAFE. La opción clr strict security se puede deshabilitar para permitir la compatibilidad con versiones anteriores, pero no se recomienda hacerlo.

Recomendamos que firme todos los ensamblados con un certificado o clave asimétrica con el correspondiente inicio de sesión que tenga concedido el permiso UNSAFE ASSEMBLY en la base de datos master. Los administradores de SQL Server también pueden agregar ensamblados a una lista de los ensamblados en los que el motor de base de datos debe confiar. Para más información, vea sys.sp_add_trusted_assembly.

Comentarios

ALTER ASSEMBLY no interrumpe las sesiones actualmente en ejecución que ejecutan código en el ensamblado que se está modificando. Las sesiones actuales completan su ejecución utilizando los bits no modificados del ensamblado.

Si se especifica la FROM cláusula , ALTER ASSEMBLY actualiza el ensamblado con respecto a las copias más recientes de los módulos proporcionados. Dado que puede haber funciones CLR, procedimientos almacenados, desencadenadores, tipos de datos y funciones de agregado definidas por el usuario en la instancia de SQL Server que ya están definidas en el ensamblado, la ALTER ASSEMBLY instrucción los reenlace a la implementación más reciente del ensamblado. Para realizar la operación de volver a enlazar, los métodos que asignan a funciones CLR, procedimientos almacenados y desencadenadores ya deben existir en el ensamblado modificado con las mismas firmas. Las clases que implementan tipos definidos por el usuario CLR y funciones de agregado definidas por el usuario deben cumplir los requisitos de ser un tipo o un agregado definido por el usuario.

Precaución

Si WITH UNCHECKED DATA no se especifica, SQL Server intenta evitar ALTER ASSEMBLY que se ejecute si la nueva versión del ensamblado afecta a los datos existentes en tablas, índices u otros sitios persistentes. Sin embargo, SQL Server no garantiza que las columnas calculadas, los índices, las vistas indexadas o las expresiones serán coherentes con las rutinas y tipos subyacentes cuando se actualice el ensamblado CLR. Tenga precaución al ejecutar ALTER ASSEMBLY para asegurarse de que no haya una discrepancia entre el resultado de una expresión y un valor basado en esa expresión almacenada en el ensamblado.

ALTER ASSEMBLY cambia la versión del ensamblado. La referencia cultural y el símbolo (token) de clave pública del ensamblado siguen siendo los mismos.

La ALTER ASSEMBLY instrucción no se puede usar para cambiar los siguientes elementos:

  • Las firmas de funciones CLR, procedimientos almacenados y desencadenadores en una instancia de SQL Server que hace referencia al ensamblado. ALTER ASSEMBLY produce un error cuando SQL Server no puede volver a enlazar objetos de base de datos de .NET Framework en SQL Server con la nueva versión del ensamblado.

  • Las firmas de métodos en el ensamblado que se llaman desde otros ensamblados.

  • Lista de ensamblados que dependen del ensamblado, como se hace referencia en la DependentList propiedad del ensamblado.

  • La posibilidad de indización de un método, a menos que no existan índices o columnas calculadas persistentes que dependan de ese método, de forma directa o indirecta.

  • Atributo FillRow de nombre de método para funciones con valores de tabla CLR.

  • Firma Accumulate de método y Terminate para agregados definidos por el usuario.

  • Ensamblados del sistema.

  • Propiedad del ensamblado. Use ALTER AUTHORIZATION en su lugar.

Además, para los ensamblados que implementan tipos definidos por el usuario, ALTER ASSEMBLY solo se pueden usar para realizar los cambios siguientes:

  • Modificar métodos públicos de la clase de tipo definida por el usuario, siempre y cuando no se cambien firmas o atributos.

  • Agregar nuevos métodos públicos.

  • Modificar métodos privados de cualquier manera.

Los campos contenidos en un tipo definido por el usuario serializado de forma nativa, incluidos los miembros de datos o las clases base, no se pueden cambiar mediante ALTER ASSEMBLY. No se admiten otros cambios.

Si ADD FILE FROM no se especifica, ALTER ASSEMBLY quita los archivos asociados al ensamblado.

Si ALTER ASSEMBLY se ejecuta sin la UNCHECKED cláusula data, se realizan comprobaciones para comprobar que la nueva versión del ensamblado no afecta a los datos existentes en las tablas. En función de la cantidad de datos que se deben comprobar, este paso podría afectar al rendimiento.

Permisos

Requiere ALTER permiso en el ensamblado. Algunos requisitos adicionales son los siguientes:

  • Para modificar un ensamblado cuyo conjunto de permisos existente es EXTERNAL_ACCESS, requiere EXTERNAL ACCESS ASSEMBLY permiso en el servidor.

  • Para modificar un ensamblado cuyo conjunto de permisos existente requiere UNSAFE UNSAFE ASSEMBLY permiso en el servidor.

  • Para cambiar el conjunto de permisos de un ensamblado a EXTERNAL_ACCESS, requiere EXTERNAL ACCESS ASSEMBLY el permiso en el servidor.

  • Para cambiar el conjunto de permisos de un ensamblado a UNSAFE, requiere UNSAFE ASSEMBLY el permiso en el servidor.

  • Especificar WITH UNCHECKED DATA requiere ALTER ANY SCHEMA permiso.

Permisos con seguridad estricta de CLR

Los permisos siguientes son necesarios para modificar un ensamblado CLR cuando la opción clr strict security está habilitada:

  • El usuario debe tener el permiso ALTER ASSEMBLY.

  • Además, se debe dar una de las siguientes condiciones:

    • El ensamblado debe estar firmado con un certificado o clave asimétrica que tenga el inicio de sesión correspondiente con el permiso UNSAFE ASSEMBLY en el servidor. Se recomienda firmar el ensamblado.

    • La base de datos tiene la propiedad TRUSTWORTHY establecida en ON y pertenece a un inicio de sesión que tiene el permiso UNSAFE ASSEMBLY en el servidor. No se recomienda esta opción.

Para obtener más información sobre los conjuntos de permisos de ensamblado, vea Diseño de ensamblados.

Ejemplos

A Actualizar un ensamblado

En el siguiente ejemplo se actualiza el ensamblado ComplexNumber a la última copia de los módulos de .NET Framework que conservan su implementación.

Nota:

El ensamblado ComplexNumber se puede crear ejecutando los scripts de UserDefinedDataType ejemplo. Para obtener más información, vea Tipo definido por el usuario.

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

Importante

Azure SQL Database no admite la referencia a un archivo.

B. Agregar un archivo para asociarlo a un ensamblado

En el siguiente ejemplo se carga el archivo de código de origen Class1.cs para asociarlo con el ensamblado MyClass. En este ejemplo se asume que el ensamblado MyClass ya está creado en la base de datos.

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

Importante

Azure SQL Database no admite la referencia a un archivo.

C. Cambiar los permisos de un ensamblado

En el ejemplo siguiente se cambia el conjunto de permisos del ensamblado ComplexNumber de SAFE a EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;