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.
Cuando compila un procedimiento almacenado administrado u otro objeto de base de datos administrado, hay ciertas comprobaciones de código realizadas por SQL Server realiza comprobaciones en el ensamblado de código administrado cuando se registra por primera vez en la base de datos, mediante la CREATE ASSEMBLY instrucción y también en tiempo de ejecución. El código administrado también se comprueba en tiempo de ejecución porque en un ensamblado puede haber rutas de acceso de código que nunca se puedan alcanzar realmente en tiempo de ejecución. Esto proporciona flexibilidad para registrar ensamblados de terceros, especialmente para que un ensamblado no se bloquee donde haya código "no seguro" diseñado para ejecutarse en un entorno de cliente, pero nunca se ejecutaría en el CLR hospedado. Los requisitos que el código administrado debe cumplir dependen de si el ensamblado está registrado como SAFE, EXTERNAL_ACCESSo UNSAFE, SAFE siendo el más estricto y se enumeran a continuación.
Además de las restricciones que se ubican en los ensamblados de código administrado, también hay permisos de seguridad de código que se conceden. Common Language Runtime (CLR) admite un modelo de seguridad denominado seguridad de acceso a código (CAS) para código administrado. En este modelo, se conceden permisos a los ensamblados basados en la identidad del código. Los ensamblados SAFE, EXTERNAL_ACCESS y UNSAFE tienen permisos de CAS diferentes. Para obtener más información, consulte Seguridad de acceso al código de integración clR.
Comprobaciones CREATE ASSEMBLY
Cuando se ejecuta la CREATE ASSEMBLY instrucción , se realizan las siguientes comprobaciones para cada nivel de seguridad. Si se produce un error en alguna comprobación, CREATE ASSEMBLY se producirá un error con un mensaje de error.
Global (cualquier nivel de seguridad)
Todos los ensamblados a los que se hace referencia deben cumplir uno o más de los criterios siguientes:
El ensamblado ya está registrado en la base de datos.
El ensamblado es uno de los ensamblados compatibles. Para obtener más información, vea Bibliotecas de .NET Framework compatibles.
CREATE ASSEMBLY FROM<Usa la ubicación> y todos los ensamblados a los que se hace referencia y sus dependencias están disponibles en <la ubicación>.CREATE ASSEMBLY FROM<Usa bytes ...>, y todas las referencias se especifican a través de bytes separados por espacio.
EXTERNAL_ACCESS
Todos los ensamblados EXTERNAL_ACCESS deben cumplir los criterios siguientes:
Los campos estáticos no se usan para almacenar información. Se permiten los campos estáticos de solo lectura.
Se ha superado la prueba PEVerify. La herramienta PEVerify (peverify.exe), que comprueba que el código MSIL y los metadatos asociados cumplen los requisitos de seguridad de tipos, se proporciona con el SDK de .NET Framework.
No se usa la sincronización, por ejemplo, con la
SynchronizationAttributeclase .No se usan métodos de finalizador.
Los atributos personalizados siguientes no se permiten en ensamblados EXTERNAL_ACCESS:
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
SEGURO
- Se comprueban todas las condiciones del ensamblado
EXTERNAL_ACCESS.
Comprobaciones en tiempo de ejecución
En tiempo de ejecución, el ensamblado de código se comprueba para las condiciones siguientes. Si se encuentra alguna de estas condiciones, el código administrado no podrá ejecutarse y se producirá una excepción.
INSEGURO
No se permite cargar un ensamblado explícitamente mediante una llamada al System.Reflection.Assembly.Load() método desde una matriz de bytes o implícitamente mediante el uso de espacio de Reflection.Emit nombres.
EXTERNAL_ACCESS
Se comprueban todas las condiciones UNSAFE.
Todos los tipos y métodos anotados con los siguientes valores de atributo de protección de host (HPA) en la lista compatible de ensamblados no están admitidos.
SelfAffectingProcessMgmt
SelfAffectingThreading
Sincronización
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
Interfaz de usuario
Para obtener más información sobre las HPA y una lista de tipos y miembros no permitidos en los ensamblados admitidos, vea Atributos de protección de host y programación de integración de CLR.
SEGURO
Se comprueban todas las condiciones EXTERNAL_ACCESS.
Véase también
Bibliotecas de .NET Framework admitidas
Seguridad de acceso al código de integración clR
Atributos de protección de host y programación de integración clR
Creación de un ensamblado