Seguridad de acceso al código de integración clR
Se aplica a:SQL Server
Common Language Runtime (CLR) admite un modelo de seguridad denominado seguridad de acceso del código para el código administrado. En este modelo, se conceden permisos a los ensamblados basados en la identidad del código. Para obtener más información, vea seguridad de acceso al código.
La directiva de seguridad que determina los permisos que se conceden a los ensamblados se define en tres sitios distintos:
directiva de máquina: esta directiva está en vigor para todo el código administrado que se ejecuta en la máquina en la que está instalado SQL Server.
directiva de usuario: esta directiva está en vigor para el código administrado hospedado por un proceso. Para SQL Server, la directiva de usuario es específica de la cuenta de Windows en la que se ejecuta el servicio SQL Server.
directiva de host: esta directiva la configura el host de CLR (en este caso, SQL Server) que está en vigor para el código administrado que se ejecuta en ese host.
El mecanismo de seguridad de acceso del código admitido por CLR se basa en el supuesto de que el tiempo de ejecución puede hospedar código de plena confianza y código de confianza parcial. Los recursos protegidos por la seguridad de acceso al código CLR normalmente se encapsulan mediante interfaces de programación de aplicaciones administradas que requieren el permiso correspondiente antes de permitir el acceso al recurso. La solicitud de permiso solo se satisface si todos los que llaman (en el nivel de ensamblado) de la pila de llamadas tienen el permiso correspondiente para el recurso.
El conjunto de permisos de seguridad de acceso de código que se conceden al código administrado cuando se ejecuta dentro de SQL Server es la intersección del conjunto de permisos concedidos por los tres niveles de directiva anteriores. Aunque SQL Server conceda un conjunto de permisos a un ensamblado cargado en SQL Server, el conjunto final de permisos concedidos al código de usuario podría estar más restringido por las directivas de nivel de equipo y usuario.
Conjuntos de permisos de nivel de directiva de host de SQL Server
El conjunto de permisos de seguridad de acceso de código concedidos a ensamblados por el nivel de directiva de host de SQL Server viene determinado por el conjunto de permisos especificado al crear el ensamblado. Hay tres conjuntos de permisos: SAFE
, EXTERNAL_ACCESS
y UNSAFE
(especificado mediante la opción PERMISSION_SET
de CREATE ASSEMBLY).
SQL Server proporciona un nivel de directiva de seguridad de nivel de host al CLR mientras lo hospeda. Esta directiva es un nivel de directiva adicional por debajo de los dos niveles de directiva que siempre están en vigor. Esta directiva se establece para cada dominio de aplicación creado por SQL Server. Esta directiva no está pensada para el dominio de aplicación predeterminado que estaría en vigor cuando SQL Server crea una instancia de CLR.
La directiva de nivel de host de SQL Server es una combinación de directiva fija de SQL Server para ensamblados del sistema y directiva especificada por el usuario para ensamblados de usuario.
La directiva fija para ensamblados CLR y ensamblados del sistema de SQL Server les concede plena confianza.
La parte especificada por el usuario de la directiva de host de SQL Server se basa en el propietario del ensamblado que especifica uno de los tres cubos de permisos para cada ensamblado. Para obtener más información sobre los siguientes permisos de seguridad, consulte el SDK de .NET Framework.
SAFE
Solo se permiten el cálculo interno y el acceso a datos local.
SAFE
es el conjunto de permisos más restrictivo. El código ejecutado por un ensamblado con permisos de SAFE
no puede acceder a recursos externos del sistema, como archivos, la red, las variables de entorno o el Registro.
SAFE
ensamblados tienen los siguientes permisos y valores:
Permiso | Valores/Descripción |
---|---|
SecurityPermission |
Execution : permiso para ejecutar código administrado. |
SqlClientPermission |
Context connection = true , context connection = yes : solo se puede usar la conexión de contexto y la cadena de conexión solo puede especificar un valor de context connection=true o context connection=yes .AllowBlankPassword = false : no se permiten contraseñas en blanco. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS
ensamblados tienen los mismos permisos que los ensamblados de SAFE
, con la capacidad adicional de acceder a recursos externos del sistema, como archivos, redes, variables de entorno y el registro.
EXTERNAL_ACCESS
ensamblados también tienen los siguientes permisos y valores:
Permiso | Valores/Descripción |
---|---|
DistributedTransactionPermission |
Unrestricted : se permiten transacciones distribuidas. |
DNSPermission |
Unrestricted : permiso para solicitar información de los servidores de nombres de dominio. |
EnvironmentPermission |
Unrestricted : se permite el acceso total a las variables de entorno del sistema y del usuario. |
EventLogPermission |
Administer : se permiten las siguientes acciones: crear un origen de eventos, leer registros existentes, eliminar orígenes de eventos o registros, responder a entradas, borrar un registro de eventos, escuchar eventos y acceder a una colección de todos los registros de eventos. |
FileIOPermission |
Unrestricted : se permite el acceso total a archivos y carpetas. |
KeyContainerPermission |
Unrestricted : se permite el acceso completo a los contenedores de claves. |
NetworkInformationPermission |
Access : se permite hacer ping. |
RegistryPermission |
Permite derechos de lectura para HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG y HKEY_USERS. |
SecurityPermission |
Assertion : capacidad de afirmar que todos los autores de llamadas de este código tienen el permiso necesario para la operación.ControlPrincipal : capacidad de manipular el objeto principal.Execution : permiso para ejecutar código administrado.SerializationFormatter : capacidad para proporcionar servicios de serialización. |
SmtpPermission |
Access : se permiten las conexiones salientes al puerto de host SMTP 25. |
SocketPermission |
Connect : se permiten conexiones salientes (todos los puertos, todos los protocolos) en una dirección de transporte. |
SqlClientPermission |
Unrestricted : se permite el acceso total al origen de datos. |
StorePermission |
Unrestricted : se permite el acceso total a los almacenes de certificados X.509. |
WebPermission |
Connect : se permiten conexiones salientes a recursos web. |
UNSAFE
UNSAFE
permite el acceso sin restricciones a los ensamblados a los recursos, tanto dentro como fuera de SQL Server. El código que se ejecuta desde un ensamblado de UNSAFE
también puede llamar a código no administrado.
UNSAFE
ensamblados se proporcionan FullTrust
.
Configuración de permisos recomendada
SAFE
es la configuración de permisos recomendada para los ensamblados que realizan tareas de cálculo y administración de datos sin tener acceso a recursos fuera de SQL Server.
EXTERNAL_ACCESS
se recomienda para los ensamblados que acceden a recursos fuera de SQL Server.
EXTERNAL_ACCESS
ensamblados de forma predeterminada se ejecutan como la cuenta de servicio de SQL Server. Es posible EXTERNAL_ACCESS
código suplantar explícitamente el contexto de seguridad de autenticación de Windows del autor de la llamada. Dado que el valor predeterminado es ejecutarse como cuenta de servicio de SQL Server, solo se debe conceder permiso para ejecutar EXTERNAL_ACCESS
a los inicios de sesión de confianza para ejecutarse como la cuenta de servicio.
Desde una perspectiva de seguridad, los ensamblados EXTERNAL_ACCESS
y UNSAFE
son idénticos. Sin embargo, EXTERNAL_ACCESS
ensamblados proporcionan diversas protecciones de confiabilidad y solidez que no están en ensamblados de UNSAFE
.
Especificar UNSAFE
permite que el código del ensamblado realice operaciones no válidas en el espacio de procesos de SQL Server y, por tanto, puede poner en peligro la solidez y la escalabilidad de SQL Server. Para obtener más información sobre cómo crear ensamblados CLR en SQL Server, vea Administrar ensamblados de integración de CLR.
Importante
SQL Server contiene ensamblados CLR que usa el motor de base de datos para proporcionar cierta funcionalidad. El ensamblado Microsoft.SQLServer.Types
que se incluye con la instalación de SQL Server aparece en los metadatos como un ensamblado UNSAFE
. es así por diseño. Estos ensamblados se consideran de confianza y seguro de forma predeterminada.
Acceso a recursos externos
Si un tipo definido por el usuario (UDT), un procedimiento almacenado u otro tipo de ensamblado de construcción se registra con el conjunto de permisos SAFE
, el código administrado que se ejecuta en la construcción no puede acceder a los recursos externos. Sin embargo, si se especifican los conjuntos de permisos EXTERNAL_ACCESS
o UNSAFE
y el código administrado intenta acceder a recursos externos, SQL Server aplica las siguientes reglas:
Si | Entonces |
---|---|
El contexto de ejecución corresponde a un inicio de sesión de SQL Server. | Se deniegan los intentos de acceso a recursos externos y se inicia una excepción de seguridad. |
El contexto de ejecución corresponde a un inicio de sesión de Windows y el contexto de ejecución es el autor de la llamada original. | Se accede al recurso externo en el contexto de seguridad de la cuenta de servicio de SQL Server. |
El autor de la llamada no es el autor de la llamada original. | Se deniega el acceso y se inicia una excepción de seguridad. |
El contexto de ejecución corresponde a un inicio de sesión de Windows y el contexto de ejecución es el autor de la llamada original y el autor de la llamada se suplanta. | Access usa el contexto de seguridad del autor de la llamada y no la cuenta de servicio. |
Resumen del conjunto de permisos
En el gráfico siguiente se resumen las restricciones y permisos concedidos a los conjuntos de permisos SAFE
, EXTERNAL_ACCESS
y UNSAFE
.
Funcionalidad | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
---|---|---|---|
Permisos de seguridad de acceso de código | Solo ejecución | Ejecución + acceso a recursos externos | Sin restringir (se incluye P/Invoke) |
Restricciones del modelo de programación | Sí | Sí | Sin restricciones |
Requisito de capacidad de comprobación | Sí | Sí | No |
Acceso a datos locales | Sí | Sí | Sí |
Capacidad de llamar a código nativo | No | No | Sí |
Contenido relacionado
- de seguridad de integración clR
- atributos de protección de host y de programación de integración clR
- restricciones del modelo de programación de integración clR
- arquitectura de integración clR: del entorno hospedado en CLR