Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Applies to:SQL Server
Azure SQL Managed Instance
Crea un módulo de aplicación administrada que contiene metadatos de clase y código administrado como un objeto en una instancia de SQL Server. Mediante este módulo, puede crear en la base de datos funciones CLR (Common Language Runtime), procedimientos almacenados, desencadenadores, funciones de agregado definidas por el usuario y tipos definidos por el usuario.
Convenciones de sintaxis de Transact-SQL
Syntax
CREATE ASSEMBLY assembly_name
[ AUTHORIZATION owner_name ]
FROM { <client_assembly_specifier> | <assembly_bits> [ , ...n ] }
[ WITH PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } ]
[ ; ]
<client_assembly_specifier> ::=
'[ \\computer_name\ ] share_name\ [ path\ ] manifest_file_name'
| '[ local_path\ ] manifest_file_name'
<assembly_bits> ::=
{ varbinary_literal | varbinary_expression }
Arguments
assembly_name
Nombre del ensamblado. The name must be unique within the database and a valid identifier.
AUTHORIZATION owner_name
Especifica el nombre de un usuario o rol como propietario del ensamblado.
owner_name must either be the name of a role of which the current user is a member, or the current user must have IMPERSONATE permission on owner_name. Si no se especifica, la propiedad se otorga al usuario actual.
<client_assembly_specifier>
Especifica la ruta de acceso local o ubicación de red en la que se encuentra el ensamblado que se carga y, además, el nombre de archivo de manifiesto que se corresponde con el ensamblado.
<client_assembly_specifier> se puede expresar como una cadena fija o una expresión que se evalúe como una cadena fija, con variables.
CREATE ASSEMBLY no admite la carga de ensamblados multimódulo. SQL Server también busca cualquier ensamblado dependiente de este ensamblado en la misma ubicación y lo carga con el mismo propietario que el ensamblado de nivel raíz. Si no se encuentran estos ensamblados dependientes y aún no se cargan en la base de datos actual, CREATE ASSEMBLY se produce un error. Si los ensamblados dependientes ya están cargados en la base de datos actual, el propietario de los mismos deberá ser el mismo que el del ensamblado nuevo que se crea.
Important
Azure SQL Database y Azure SQL Instancia administrada no admiten la creación de un ensamblado a partir de un archivo.
<client_assembly_specifier> no se puede especificar si el usuario que ha iniciado sesión se está suplantando.
<assembly_bits>
Lista de valores binarios que componen el ensamblado y sus ensamblados dependientes. El primer valor de esta lista se considera el ensamblado raíz. Los valores correspondientes a los ensamblados dependientes pueden suministrarse en cualquier orden. Los valores que no corresponden a las dependencias del ensamblado raíz se omiten.
Note
Esta opción no está disponible en las bases de datos independientes.
varbinary_literal
A varbinary literal.
varbinary_expression
An expression of type varbinary.
PERMISSION_SET { SAFE | EXTERNAL_ACCESS | UNSAFE }
Especifica un conjunto de permisos de acceso de código que se conceden al ensamblado cuando SQL Server tiene acceso a él. Si no se especifica, SAFE se aplica como valor predeterminado.
La PERMISSION_SET opción se ve afectada por la configuración del servidor: clr strict security option. Cuando clr strict security está habilitada, todos los ensamblados se tratan como UNSAFE.
Recomendamos utilizar SAFE.
SAFE es el conjunto de permisos más restrictivo. El código ejecutado por un ensamblado con SAFE permisos no puede acceder a recursos externos del sistema, como archivos, la red, las variables de entorno o el registro.
EXTERNAL_ACCESS permite que los ensamblados accedan a determinados recursos del sistema externo, como archivos, redes, variables de entorno y el Registro.
UNSAFE habilita el acceso sin restricciones a los ensamblados a los recursos, tanto dentro como fuera de una instancia de SQL Server. El código que se ejecuta desde un UNSAFE ensamblado puede llamar a código no administrado.
SAFE es la configuración de permisos recomendada para los ensamblados que realizan tareas de cálculo y administración de datos sin tener acceso a recursos fuera de una instancia de SQL Server.
Note
Las EXTERNAL_ACCESS opciones y UNSAFE no están disponibles en una base de datos independiente.
Se recomienda usar EXTERNAL_ACCESS para ensamblados que accedan a recursos fuera de una instancia de SQL Server.
EXTERNAL_ACCESS Los ensamblados incluyen las protecciones de confiabilidad y escalabilidad de SAFE los ensamblados, pero desde una perspectiva de seguridad, son similares a UNSAFE los ensamblados. El código de los ensamblados se ejecuta de forma predeterminada en EXTERNAL_ACCESS la cuenta de servicio de SQL Server y accede a los recursos externos de esa cuenta, a menos que el código suplanta explícitamente al autor de la llamada. Por lo tanto, solo se debe conceder permiso para crear EXTERNAL_ACCESS ensamblados a los inicios de sesión que son de confianza para ejecutar código en la cuenta de servicio de SQL Server. Para obtener más información sobre la suplantación, consulte Seguridad de integración de CLR.
Especificar UNSAFE permite que el código del ensamblado tenga libertad completa para realizar operaciones en el espacio de procesos de SQL Server que pueda poner en peligro la solidez de SQL Server.
UNSAFE Los ensamblados también pueden subvertir el sistema de seguridad de SQL Server o Common Language Runtime.
UNSAFE Solo se deben conceder permisos a ensamblados de alta confianza. Only members of the sysadmin fixed server role can create and alter UNSAFE assemblies.
For more information about assembly permission sets, see Design assemblies.
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. For more information, see sys.sp_add_trusted_assembly.
Remarks
CREATE ASSEMBLY carga un ensamblado que se compiló anteriormente como un archivo .dll desde código administrado para su uso dentro de una instancia de SQL Server.
Cuando se habilita, la opción PERMISSION_SET en las instrucciones CREATE ASSEMBLY y ALTER ASSEMBLY se omite en tiempo de ejecución, pero las opciones PERMISSION_SET se conservan en los metadatos. Omitir la opción minimiza la interrupción de las instrucciones de código existentes.
SQL Server no permite registrar versiones diferentes de un ensamblado con el mismo nombre, referencia cultural y clave pública.
Al intentar acceder al ensamblado especificado en <client_assembly_specifier>, SQL Server suplanta el contexto de seguridad del inicio de sesión de Windows actual. Si <client_assembly_specifier> especifica una ubicación de red (ruta de acceso UNC), la suplantación del inicio de sesión actual no se lleva a cabo en la ubicación de red debido a las limitaciones de delegación. En este caso, el acceso se realiza mediante el contexto de seguridad de la cuenta del servicio SQL Server. Para más información, vea Credenciales (motor de base de datos).
Besides the root assembly specified by assembly_name, SQL Server tries to upload any assemblies that are referenced by the root assembly being uploaded. Si ya se ha cargado un ensamblado al que se hace referencia en la base de datos debido a una instrucción anterior CREATE ASSEMBLY , este ensamblado no se carga, pero está disponible para el ensamblado raíz. Si no se cargó previamente un ensamblado dependiente, pero SQL Server no puede encontrar su archivo de manifiesto en el directorio de origen, CREATE ASSEMBLY devuelve un error.
Si los ensamblados dependientes a los que hace referencia el ensamblado raíz aún no están en la base de datos y se cargan implícitamente junto con el ensamblado raíz, tienen el mismo conjunto de permisos que el ensamblado de nivel raíz. Si se deben crear ensamblados dependientes mediante el uso de permisos diferentes de los del ensamblado raíz, estos deben cargarse explícitamente antes del ensamblado raíz con los permisos apropiados establecidos.
Assembly Validation
SQL Server examina los archivos binarios de ensamblado cargados por la CREATE ASSEMBLY instrucción para garantizar las siguientes comprobaciones:
El binario del ensamblado está formado por metadatos y segmentos de código válidos; los segmentos de código tienen instrucciones MSIL (Lenguaje intermedio de Microsoft) válidas.
El conjunto de ensamblados del sistema al que hace referencia es uno de los siguientes ensamblados admitidos en SQL Server:
Microsoft.VisualBasic.dll,mscorlib.dll,System.Data.dllSystem.dll, ,System.Xml.dllMicrosoft.VisualC.dllCustomMarshallers.dllSystem.Security.dllSystem.Web.Services.dllSystem.Data.SqlXml.dll,System.Core.dll, y .System.Xml.Linq.dllSe puede hacer referencia a otros ensamblados del sistema, pero deben estar registrados de forma explícita en la base de datos.Para los ensamblados creados mediante
SAFEoEXTERNAL ACCESSconjuntos de permisos:El código del ensamblado debe tener seguridad de tipos. La seguridad de tipos se establece ejecutando el comprobador de Common Language Runtime en el ensamblado.
El ensamblado no debe contener ningún miembro de datos estáticos en sus clases a menos que estén marcados como de solo lectura.
Las clases del ensamblado no pueden contener métodos de finalizador.
Las clases o métodos del ensamblado deben anotarse solamente con atributos de código permitidos. Para obtener más información, consulte Integración de CLR: atributos personalizados para rutinas CLR.
Además de las comprobaciones anteriores que se realizan cuando CREATE ASSEMBLY se ejecuta, hay comprobaciones adicionales que se realizan en tiempo de ejecución del código en el ensamblado:
Si se llama a determinadas API de .NET Framework que requieren un permiso de acceso de código específico, puede producirse un error si el conjunto de permisos del ensamblado no incluye ese permiso.
Para
SAFElos ensamblados yEXTERNAL_ACCESS, se produce un error en cualquier intento de llamar a las API de .NET Framework anotadas con determinados HostProtectionAttributes.
For more information, see Design assemblies.
Permissions
Requiere el permiso CREATE ASSEMBLY.
Si PERMISSION_SET = EXTERNAL_ACCESS se especifica, requiere EXTERNAL ACCESS ASSEMBLY permiso en el servidor. Si PERMISSION_SET = UNSAFE se especifica, requiere UNSAFE ASSEMBLY permiso en el servidor.
El usuario debe ser el propietario de cualquier ensamblado al que el ensamblado que se va a cargar haga referencia (si los ensamblados ya existen en la base de datos). To upload an assembly by using a file path, the current user must be a Windows authenticated login or a member of the sysadmin fixed server role. El inicio de sesión de Windows del usuario que ejecuta CREATE ASSEMBLY debe tener permiso de lectura en el recurso compartido y los archivos que se cargan en la instrucción .
Permisos con seguridad estricta de CLR
Los siguientes permisos son necesarios para crear un ensamblado CLR cuando la opción CLR strict security está habilitada:
- El usuario debe tener el permiso
CREATE 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 ASSEMBLYen el servidor. Se recomienda firmar el ensamblado. - La base de datos tiene la propiedad
TRUSTWORTHYestablecida enONy pertenece a un inicio de sesión que tiene el permisoUNSAFE ASSEMBLYen el servidor. No se recomienda esta opción.
- El ensamblado debe estar firmado con un certificado o clave asimétrica que tenga el inicio de sesión correspondiente con el permiso
For more information about assembly permission sets, see Design assemblies.
Examples
A. Creación de un ensamblado a partir de un archivo DLL
En el ejemplo siguiente se supone que los ejemplos de Motor de base de datos de SQL Server se instalan en la ubicación predeterminada del equipo local y se compila la HelloWorld.csproj aplicación de ejemplo. Para más información, vea Ejemplo de Hola a todos.
CREATE ASSEMBLY HelloWorld
FROM '<system_drive>:\Program Files\Microsoft SQL Server\100\Samples\HelloWorld\CS\HelloWorld\bin\debug\HelloWorld.dll'
WITH PERMISSION_SET = SAFE;
Important
Azure SQL Database no admite la creación de un ensamblado a partir de un archivo.
B. Creación de un ensamblado a partir de bits de ensamblado
Reemplace los bits de ejemplo (que no están completos o válidos) por los bits de ensamblado.
CREATE ASSEMBLY HelloWorld
FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;
Related content
- ALTER ASSEMBLY (Transact-SQL)
- DROP ASSEMBLY (Transact-SQL)
- CREATE FUNCTION (Transact-SQL)
- CREATE PROCEDURE (Transact-SQL)
- CREATE TRIGGER (Transact-SQL)
- CREATE TYPE (Transact-SQL)
- CREATE AGGREGATE (Transact-SQL)
- EVENTDATA (Transact-SQL)
- Escenarios de uso y ejemplos para la integración de Common Language Runtime (CLR)