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.
De forma predeterminada, el código de ensamblado personalizado se ejecuta con el conjunto de permisos de ejecución limitado. En algunos casos, es posible que desee implementar un ensamblado personalizado que realice llamadas protegidas a recursos protegidos dentro del sistema de seguridad (como un archivo o el registro). Para ello, debe hacer lo siguiente:
Identifique los permisos exactos que necesita el código para realizar la llamada protegida. Si este método forma parte de una biblioteca de Microsoft .NET Framework, esta información debe incluirse en la documentación del método.
Modifique los archivos de configuración de directivas del servidor de informes para conceder al ensamblado personalizado los permisos necesarios. Para obtener más información sobre los archivos de configuración de directivas de seguridad, consulte Uso de archivos de directiva de seguridad de Reporting Services.
Aserte los permisos necesarios como parte del método en el que se realiza la llamada segura. Esto es necesario porque el código de ensamblado personalizado al que llama el servidor de informes forma parte del ensamblado host de expresiones de informe, que se ejecuta con el permiso Execution de forma predeterminada. El conjunto de permisos Ejecución permite ejecutar código, pero no usar recursos protegidos.
Marque el ensamblado personalizado con AllowPartiallyTrustedCallersAttribute si está firmado con un nombre seguro. Esto es necesario porque se llama a los ensamblados personalizados desde una expresión de informe que forma parte del ensamblado host de expresiones de informe, que, de forma predeterminada, no se concede FullTrust; por lo tanto, es un autor de llamada "parcialmente de confianza". Para obtener más información, consulte Uso de Strong-Named ensamblados personalizados.
Implementación de una llamada segura
Puede modificar los archivos de configuración de directiva para conceder permisos específicos del ensamblado. Por ejemplo, si estaba escribiendo un ensamblado personalizado para controlar la conversión de moneda, es posible que tenga que leer los tipos de cambio de moneda actuales de un archivo. Para recuperar la información de velocidad, tendría que agregar un permiso de seguridad adicional, FileIOPermission, al conjunto de permisos para el ensamblado. Puede realizar la siguiente entrada adicional en el archivo de configuración de directiva:
<PermissionSet class="NamedPermissionSet"
version="1"
Name="CurrencyRatesFilePermissionSet"
Description="A special permission set that grants read access to my currency rates file.">
<IPermission class="FileIOPermission"
version="1"
Read="C:\CurrencyRates.xml"/>
<IPermission class="SecurityPermission"
version="1"
Flags="Execution, Assertion"/>
</PermissionSet>
A continuación, agregue un grupo de código que haga referencia a ese conjunto de permisos:
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="CurrencyRatesFilePermissionSet"
Name="MyNewCodeGroup"
Description="A special code group for my custom assembly.">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\MSSQL\Reporting Services\ReportServer\bin\CurrencyConversion.dll"/>
</CodeGroup>
Para que el código adquiera el permiso adecuado, debe declarar el permiso dentro del código de ensamblado personalizado. Por ejemplo, si desea agregar acceso de solo lectura a un archivo XML, C:\CurrencyRates.xml, debe agregar el código siguiente al método :
// C#
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\CurrencyRates.xml");
try
{
permission.Assert();
// Load the XML currency rates file
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\CurrencyRates.xml");
...
También puede agregar la aserción como atributo de método:
[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]
Para obtener más información, vea ".NET Framework Security" (Seguridad de .NET Framework) en la Guía del desarrollador de .NET Framework.