Restricciones del modelo de programación de integración clR
Se aplica a: SQL Server
Azure SQL Instancia administrada
Al compilar un procedimiento almacenado administrado u otro objeto de base de datos administrado, SQL Server realiza determinadas comprobaciones de código que deben tenerse en cuenta. Estas comprobaciones se realizan 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 podría haber rutas de acceso de código que nunca se alcanzarán realmente en tiempo de ejecución.
Estas comprobaciones de código proporcionan flexibilidad para registrar ensamblados de terceros, especialmente, de modo que un ensamblado no esté bloqueado donde haya código no seguro diseñado para ejecutarse en un entorno de cliente, pero nunca se ejecutaría en Common Language Runtime hospedado (CLR). Los requisitos que debe cumplir el código administrado dependen de si el ensamblado está registrado como SAFE
, EXTERNAL_ACCESS
o UNSAFE
. SAFE
es el nivel de seguridad más estricto.
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. El CLR admite un modelo de seguridad llamado seguridad de acceso del código (CAS) para el 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.
Si se establece la directiva de publicador, CREATE ASSEMBLY
se produce un error.
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 produce 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.
Está usando
CREATE ASSEMBLY FROM <location>
y todos los ensamblados a los que se hace referencia y sus dependencias están disponibles en<location>
.CREATE ASSEMBLY FROM <bytes ...>
Usa 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 pasa la prueba PEVerify. La herramienta PEVerify (
peverify.exe
), que comprueba que el código de lenguaje intermedio común (CIL) 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
SynchronizationAttribute
clase .Los métodos de finalizador no se usan.
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
SAFE
- 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, no se permite ejecutar el código administrado y se produce una excepción.
UNSAFE
No se puede cargar un ensamblado, ya sea explícitamente mediante una llamada al System.Reflection.Assembly.Load()
método desde una matriz de bytes o implícitamente mediante Reflection.Emit
el espacio de 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
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
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.
SAFE
Se comprueban todas las condiciones EXTERNAL_ACCESS
.
Contenido relacionado
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de