Permisos de acceso a código y seguridad en .NET Framework con Visual Basic

Actualización: noviembre 2007

En .NET Framework, la seguridad de acceso a código limita el acceso que el código tiene a los recursos y las operaciones protegidas. Cada aplicación que tenga como destino Common Language Runtime debe interactuar con el sistema de seguridad del motor en tiempo de ejecución. Cuando se ejecuta una aplicación, el motor en tiempo de ejecución la evalúa automáticamente y le concede un conjunto de permisos. En función de los permisos que reciba la aplicación, se ejecuta correctamente o genera una excepción de seguridad.

La configuración de seguridad local de un equipo concreto controla en última instancia los permisos que recibe el código. Dado que esta configuración puede variar de un equipo a otro, nunca se podrá saber con certeza si el código va a recibir los permisos suficientes para ejecutarse. Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.

Permisos de acceso a código

Los objetos de permiso de acceso a código se utilizan para proteger los recursos y las operaciones del uso por parte de usuarios no autorizados. Constituyen una parte fundamental del mecanismo de Common Language Runtime para exigir restricciones de seguridad en el código administrado.

Los permisos de acceso a código permiten a un usuario tener acceso a un recurso protegido, como un archivo, o realizar una acción protegida, como tener acceso a código administrado. Todos los permisos de acceso a código se pueden solicitar mediante código; la concesión de los permisos se determina en tiempo de ejecución. Cada permiso de acceso a código deriva de la clase CodeAccessPermission y por consiguiente los permisos tienen métodos comunes: Assert, Demand, Deny, PermitOnly, IsSubSetOf, Intersect y Union.

Permisos proporcionados por .NET Framework

Esta tabla muestra los permisos de acceso a código que proporciona .NET Framework.

Clase de permiso

Permite

AspNetHostingPermission

Obtener acceso a recursos de entornos alojados en ASP.NET.

DirectoryServicesPermission

Obtener acceso a las clases System.DirectoryServices.

DnsPermission

Obtener acceso a los servidores DNS (Sistema de nombres de dominio) en una red.

EnvironmentPermission

Leer o escribir en variables de entorno.

EventLogPermission

Leer o escribir en servicios de registro de eventos.

FileDialogPermission

Leer o escribir en archivos por medio de un cuadro de diálogo Abrir.

FileIOPermission

Leer o escribir en archivos o directorios.

IsolatedStorageFilePermission

Leer o escribir en archivos o directorios en almacenamiento aislado.

MessageQueuePermission

Obtener acceso a las colas de mensajes a través de las interfaces Message Queuing (también conocidas como MSMQ) administradas.

OdbcPermission

Obtener acceso a los orígenes de datos ODBC (Conectividad abierta de bases de datos).

OleDbPermission

Obtener acceso a bases de datos mediante OLE DB.

OraclePermission

Obtener acceso a las bases de datos Oracle.

PerformanceCounterPermission

Obtener acceso a contadores de rendimiento.

PrintingPermission

Obtener acceso a impresoras.

ReflectionPermission

Determinar información sobre un tipo en tiempo de ejecución.

RegistryPermission

Leer, escribir, crear o eliminar claves y valores del Registro.

SecurityPermission

Ejecutar, confirmar permisos, llamar en código no administrado, omitir la comprobación y otros derechos relacionados con la seguridad.

ServiceControllerPermission

Obtener acceso a servicios en ejecución o detenidos.

SocketPermission

Realizar o aceptar conexiones en una dirección de transporte.

SqlClientPermission

Obtener acceso a bases de datos de SQL.

UIPermission

Obtener acceso a la funcionalidad de interfaz de usuario.

WebPermission

Realizar o aceptar conexiones en una dirección Web.

Crear permisos propios

.NET Framework proporciona un conjunto de clases de permiso de acceso a código diseñado para ayudar a proteger un conjunto específico de recursos y operaciones, que se centra en los recursos expuestos por .NET Framework. En la mayoría de los entornos, los permisos de acceso a código integrados son adecuados. No obstante, en algunas situaciones, puede ser útil definir una clase de permiso de acceso a código propia. Para obtener más información, vea Crear permisos de acceso a código propios.

Permisos de identidad

Los permisos de identidad representan características que identifican un ensamblado. Common Language Runtime concede permisos de identidad a un ensamblado cuando se carga, en función de la información que obtiene acerca del mismo. Para obtener más información, vea Permisos de identidad.

Permisos basados en función

Las aplicaciones empresariales suelen proporcionar acceso a datos o recursos basándose en credenciales proporcionadas por el usuario. Normalmente, dichas aplicaciones comprueban la función de un usuario y proporcionan acceso a recursos basándose en dicha función. Common Language Runtime proporciona compatibilidad para la autorización basada en funciones tomando como base una cuenta de Windows o una identidad personalizada. Para obtener más información, vea Seguridad basada en funciones.

Tareas de seguridad

La tabla siguiente muestra tareas asociadas con permisos y seguridad.

Para

Vea

Solicitar permiso para tener acceso a código no administrado

Cómo: Solicitar permiso para obtener acceso a código no administrado

Solicitar los permisos opcionales

Cómo: Solicitar permisos opcionales mediante el marcador RequestOptional

Solicitar permiso para un conjunto de permisos con nombre

Cómo: Solicitar permiso para un conjunto de permisos con nombre

Solicitar permisos codificados en XML

Solicitar permisos codificados en XML

Rechazar permisos

Cómo: Rechazar permisos mediante el marcador RequestRefuse

Realizar una comprobación imperativa de seguridad

Cómo: Realizar comprobaciones de seguridad imperativas

Realizar una comprobación de seguridad declarativa

Realizar comprobaciones de seguridad declarativa

Reemplazar una comprobación de seguridad

Invalidar comprobaciones de seguridad

Compartir una biblioteca con código que no es de plena confianza

Compartir una biblioteca con código que no es de plena confianza

Imponer la plena confianza en los tipos de un ensamblado AllowPartiallyTrustedCallersAttribute

Solicitar tipos de plena confianza en un ensamblado AllowPartiallyTrustedCallersAttribute

Crear objetos WindowsIdentity y WindowsPrincipal

Cómo: Crear un objeto WindowsPrincipal

Crear objetos GenericPrincipal y GenericIdentity

Cómo: Crear objetos GenericPrincipal y GenericIdentity

Modelo de directiva de seguridad de .NET Framework

Cinco elementos constituyen el modelo de directiva de seguridad de .NET Framework. Son los siguientes:

  • Niveles de la directiva de seguridad: empresa, equipo, usuario y dominio de aplicación.

  • Grupos de códigos, que existen como una jerarquía dentro de los niveles de directiva de empresa, equipo y usuario.

  • Conjuntos de permisos con nombre asociados a cada grupo de código.

  • Prueba que proporciona información sobre la identidad del código.

  • Hosts de dominio de aplicación que proporcionan pruebas sobre el código a Common Language Runtime.

Niveles de la directiva de seguridad

.NET Framework proporciona cuatro niveles de directiva de seguridad para calcular la concesión de permisos a un ensamblado o dominio de aplicación. Cada nivel contiene su propia jerarquía de grupos de código y conjuntos de permiso. El tiempo de ejecución calcula el conjunto de permisos concedidos como la suma de permisos permitidos por todos los niveles que participan en una directiva

Los niveles son los siguientes:

  • Directiva de empresa. Se aplica a todo el código administrado de la empresa, donde se distribuye un archivo de configuración de empresa.

  • Directiva de equipo. Se aplica a todo el código administrado del equipo.

  • Directiva de usuario. Se aplica al código de todos los procesos asociados al usuario actual del sistema operativo cuando se inicie Common Language Runtime.

  • Directiva de dominio de aplicación. Se aplica al código administrado del dominio de aplicación del host.

Para obtener más información, vea Niveles de la directiva de seguridad.

Grupos de código

Un grupo de código es una agrupación lógica de código que tiene una condición concreta para la pertenencia. Todo código que cumpla la condición de pertenencia se incluye en el grupo. Los grupos de código tienen conjuntos de permisos asociados que se evalúan durante la concesión de la directiva. Para obtener más información, vea Grupos de código.

Conjuntos de permisos con nombre

Un conjunto de permisos con nombre es un conjunto de permisos que los administradores pueden asociar a un grupo de código. Un conjunto de permisos con nombre está formado al menos por un permiso, así como por un nombre y una descripción para el conjunto de permisos. Con un conjunto de permisos específico se pueden asociar varios grupos de código.

Esta tabla muestra los conjuntos de permisos con nombre proporcionados por Common Language Runtime.

Nombre

Descripción

Nothing

Sin permisos (no se puede ejecutar código).

Execution

Permiso para ejecutarse, pero no para utilizar recursos protegidos.

Internet

Conjunto de permisos de directiva predeterminado, adecuado para contenido de origen desconocido.

Local Intranet

Conjunto de permisos de directiva predeterminado establecido en una empresa.

Everything

Todos los permisos estándar (integrados) excepto el permiso de omitir la comprobación.

FullTrust

Acceso completo a todos los recursos.

Para obtener más información, vea Conjuntos de permisos con nombre.

Evidencia

Evidencia es la información que Common Language Runtime utiliza para tomar decisiones basándose en la directiva de seguridad. La evidencia indica al tiempo de ejecución que el código tiene una característica determinada y puede incluir directorio de aplicaciones, editor, sitio y dirección URL. Para obtener más información, vea Prueba.

Hosts de dominio de aplicación

Cada aplicación .NET Framework se ejecuta en un dominio de aplicación bajo el control de un host que crea el dominio de aplicación y carga los ensamblados en él. Los dominios de aplicación pueden incluir:

  • Hosts del explorador. Ejecutan código en el contexto de un sitio Web.

  • Hosts de diseño personalizado. Crean dominios y cargan ensamblados en los dominios, incluidos ensamblados dinámicos.

  • Hosts de servidor. Ejecutan código que controla las solicitudes enviadas a un servidor.

  • Host de Shell. Inician aplicaciones (archivos .exe) desde el shell.

En esta tabla se muestran tareas asociadas con los dominios de aplicación:

Para

Vea

Crear un dominio de aplicación

Cómo: Crear un dominio de aplicación

Establecer una directiva de seguridad de dominio de aplicación

Establecer directivas de seguridad para dominios de aplicación

Configurar un dominio de aplicación

Cómo: Configurar un dominio de aplicación

Llamar a funciones en un dominio de aplicación concreto

Calling Functions in a Specific Application Domain

Recuperar información de instalación de un dominio de aplicación

Recuperar información de instalación de un dominio de aplicación

Descargar un dominio de aplicación.

Cómo: Descargar un dominio de aplicación

Para obtener más información, vea AppDomain, Hosts de dominio de aplicación y Programar con dominios de aplicación.

Vea también

Tareas

Solución de problemas de excepciones de seguridad de acceso a código

Conceptos

Aislamiento por usuario, dominio y ensamblado

Otros recursos

Configurar directivas de seguridad mediante la herramienta Configuración de .NET Framework (Mscorcfg.msc)

Configurar directivas de seguridad mediante la herramienta Directiva de seguridad de acceso a código (Caspol.exe)