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.
Al compilar un procedimiento almacenado administrado u otro objeto de base de datos administrado, hay determinadas 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 al código que nunca se hayan alcanzado realmente en tiempo de ejecución. Esto proporciona flexibilidad para registrar ensamblados de terceros, de manera especial, de forma que no se debe bloquear un ensamblado donde haya un código 'no seguro' diseñado para que se ejecute en un entorno 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_ACCESS
o 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 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.
Comprobaciones de CREATE ASSEMBLY
Cuando se ejecuta la instrucción CREATE ASSEMBLY
las comprobaciones siguientes se realizan para cada nivel de seguridad. Si se produce un error en cualquier comprobación, se producirá un error en CREATE ASSEMBLY
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 admitidas.
Está usando
CREATE ASSEMBLY FROM
<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 espacios.
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 MSIL y los metadatos asociados cumplen los requisitos de seguridad de tipos, se proporciona con .NET Framework SDK.
La sincronización, por ejemplo no se usa con la clase
SynchronizationAttribute
.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
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 cualquiera de estas condiciones, el código administrado no se puede ejecutar y se iniciará una excepción.
UNSAFE
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
Synchronization
SharedState
ExternalProcessMgmt
ExternalThreading
SecurityInfrastructure
MayLeakOnAbort
UI
Para obtener más información sobre los 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
.
Consulte también
Bibliotecas de .NET Framework admitidas
Seguridad de acceso del código de integración CLR
Atributos de protección del host y programación de la integración CLR
Crear un ensamblado