Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Por defeito, o código assembly personalizado corre com o conjunto limitado de permissões de Execução . Em alguns casos, poderá querer implementar um assembly personalizado que faça chamadas seguras para recursos protegidos dentro do seu sistema de segurança (como um ficheiro ou o registo). Para conseguir isto, deve tomar as seguintes ações:
Identifique as permissões exatas que o seu código precisa para fazer a chamada segura. Se este método fizer parte de uma biblioteca Microsoft .NET Framework, esta informação deve ser incluída na documentação do método.
Modificar os ficheiros de configuração da política do servidor de relatórios para conceder ao assembly personalizado as permissões necessárias. Para mais informações sobre os ficheiros de configuração de políticas de segurança, consulte Using Reporting Services Security Policy Files.
Afirme as permissões necessárias como parte do método pelo qual a chamada segura é feita. Isto é necessário porque o código assembly personalizado chamado pelo servidor de relatórios faz parte da assembly host da expressão de relatório, que corre com permissão de Execução por defeito. O conjunto de permissões de execução permite que o código seja executado, mas não utilize recursos protegidos.
Marque a assembly personalizada com AllowPartiallyTrustedCallersAttribute se estiver assinada com um nome forte. Isto é obrigatório porque assemblies personalizados são chamados a partir de uma expressão de relatório que faz parte da assembly host da expressão de relatório, que, por defeito, não recebe FullTrust; Assim, é um chamador "parcialmente confiável". Para mais informações, consulte Utilização Strong-Named Assemblies Personalizados.
Implementar uma Chamada Segura
Pode modificar os ficheiros de configuração de políticas para conceder permissões específicas à sua assembleia. Por exemplo, se estivesse a escrever um assembly personalizado para gerir a conversão de moeda, poderá precisar de ler as taxas de câmbio atuais a partir de um ficheiro. Para recuperar a informação de taxa, teria de adicionar uma permissão de segurança extra, FileIOPermission, ao seu conjunto de permissões para a assembleia. Pode fazer a seguinte entrada adicional no ficheiro de configuração da política:
<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>
Depois adiciona-se um grupo de código que faz referência a esse conjunto de permissões:
<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 o seu código obtenha a permissão adequada, deve afirmar essa permissão no seu código de montagem personalizado. Por exemplo, se quiser adicionar acesso só de leitura a um ficheiro XML, C:\CurrencyRates.xml, deve adicionar o seguinte código ao seu 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");
...
Também pode adicionar a assertion como um atributo de método:
[FileIOPermissionAttribute(SecurityAction.Assert, Read=@"C:\CurrencyRates.xml")]
Para mais informações, consulte "Segurança do Framework .NET" no Guia para Desenvolvedores do .NET Framework.