Share via


Permitir llamadores de confianza parcial

Compartir bibliotecas de código es un escenario común con la integración de Common Language Runtime (CLR), donde a menudo se tiene acceso a un ensamblado que contiene un tipo definido por el usuario, un procedimiento almacenado, una función definida por el usuario, un agregado definido por el usuario, un desencadenador o clase de utilidad, mediante otro ensamblado o aplicación. Las bibliotecas de código que se van a compartir entre varias aplicaciones se deben firmar con un nombre seguro.

Únicamente las aplicaciones de plena confianza del sistema de seguridad de acceso del código del motor en tiempo de ejecución pueden tener acceso a un ensamblado de código administrado compartido que no está marcado de forma explícita con el atributo System.Security.AllowPartiallyTrustedCallers. Un ensamblado de confianza parcial (ensamblado que se registra en SQL Server con el conjunto de permisos SAFE o EXTERNAL_ACCESS ) que intenta tener acceso a un ensamblado firmado con nombre seguro sin este atributo, provoca que se emita un System.Security.SecurityException. El mensaje de error que aparece es similar al siguiente:

Msg 6522, Level 16, State 1, Procedure usp_RSTest, Line 0
A .NET Framework error occurred during execution of user defined
routine or aggregate 'usp_RSTest':  System.Security.SecurityException: That assembly does not allow partially trusted callers.
System.Security.SecurityException: at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(
Assembly asm, PermissionSet granted,PermissionSet refused,
RuntimeMethodHandle rmh, SecurityAction action, Object demand,
IPermission permThatFailed) at
Microsoft.Samples.SqlServer.TestResultSet.Test()

Se recomienda que todos los ensamblados registrados en SQL Server, excepto aquellos ensamblados agregados a la caché de ensamblados global, se marquen con el atributo AllowPartiallyTrustedCallers para que los ensamblados cargados con SQL Server puedan obtener acceso entre sí. Por seguridad, los ensamblados que se agregarán a la caché de ensamblados global se deberían revisar completamente antes de agregar el atributo AllowPartiallyTrustedCallers, puesto que después el ensamblado estaría disponible para los llamadores de confianza parcial a partir de contextos inesperados. Un ensamblado no se debe establecer de plena confianza (registrado con el conjunto de permisos UNSAFE en SQL Server).

Para obtener más información, vea la sección "Utilizar bibliotecas de código que no es de plena confianza" en el kit de desarrollo de software de .NET Framework.

Ejemplo

Suponga que hay una clase de utilidad que resultaría útil para muchas aplicaciones de integración CLR del servidor. Por ejemplo, podría ser una clase que representa los resultados de invocar una consulta. Para habilitar uso compartido de este componente, esta clase de utilidad se ubica en un ensamblado independiente. A continuación, se hace referencia a ese ensamblado desde otros ensamblados que contienen objetos de integración CLR. Dado que esta clase de utilidad se usa en muchas aplicaciones de servidor diferentes, se revisa con atención y se resuelve cualquier problema de seguridad. A continuación, el atributo AllowPartiallyTrustedCallers se aplica al ensamblado que contiene la clase de utilidad, de manera que los objetos de integración CLR que contienen los ensamblados marcados con los conjuntos de permisos SAFE o EXTERNAL_ACCESS puedan usar la clase y métodos de utilidad, aunque se encuentren en un ensamblado independiente. Para consultar un ejemplo del uso del atributo AllowPartiallyTrustedCallers, vea el ejemplo de conjunto de resultados disponible en CodePlex. Vea Ejemplos de motor de base de datos de SQL Server para obtener más información.

Vea también

Conceptos