Compartir a través de


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_ACCESSo 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.