Я добавляю. NET Расширение обработки данных к локальной установке SQL Server 2016 Reporting Services. У меня есть полное разрешение администратора на компьютере и службах Reporting Services, и я реализовывал подобное в прошлом, поэтому знаком с процессом, но сталкиваюсь с препятствием, которое, похоже, не могу преодолеть.
Расширение I пытаюсь развернуть использует AWS SDK для чтения данных из AWS S3. Я создал модульные тесты и проверил, что мой код работает нормально, но я получаю ошибку, когда пытаюсь использовать расширение из служб Reporting Services. Зарегистрированные данные:
processing!ReportServer_0-1!dc80!04/10/2020-08:46:12:: e ERROR: Throwing Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: , Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Cannot create a connection to data source ''. ---> System.TypeInitializationException: The type initializer for 'Amazon.S3.AmazonS3Config' threw an exception. ---> System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.EnvironmentPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at System.Environment.GetEnvironmentVariable(String variable)
at Amazon.Util.Internal.InternalSDKUtils.GetExecutionEnvironmentUserAgentString()
at Amazon.Util.Internal.InternalSDKUtils.BuildUserAgentString(String serviceSdkVersion)
at Amazon.S3.AmazonS3Config..cctor()
--- End of inner exception stack trace ---
at Amazon.S3.AmazonS3Config..ctor()
at Amazon.S3.AmazonS3Client..ctor(String awsAccessKeyId, String awsSecretAccessKey, RegionEndpoint region)
Очевидно, что проблема заключается в том, что расширению не разрешено использовать переменные среды, и AWS SDK ищет их несколько. Отслеживание кода , в котором возникает ошибка Я вижу, что код ищет переменную с именем 'AWS_EXECUTION_ENV', например.
Для решения этой проблемы я добавил разрешения для C: \ Program Files \ Microsoft SQL Server \ MSRS13.SQL2016 \ Службы Reporting Services \ ReportServer \ rssrvpolicy.config, обеспечивающие библиотеки DLL AWS с полным доверием.
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="AWSSDKS3"
Description="Allow AWS DLLs to access environment variables">
<IMembershipCondition class="UrlMembershipCondition" version="1" Url="C:\Program Files\Microsoft SQL Server\MSRS13.SQL2016\Reporting Services\ReportServer\bin\AWSSDK.S3.dll" />
</CodeGroup>
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="AWSSDKCore"
Description="Allow AWS DLLs to access environment variables">
<IMembershipCondition class="UrlMembershipCondition" version="1" Url="C:\Program Files\Microsoft SQL Server\MSRS13.SQL2016\Reporting Services\ReportServer\bin\AWSSDK.Core.dll" />
</CodeGroup>
После остановки и перезапуска Службы отчетов затем я вижу ту же ошибку в журнале; эта конфигурация, кажется, не меняет поведение.
Я также пытался:
- Поместить мою DLL расширения и AWS DLL в локальный GA C.
- Добавление указанного c именованного набора разрешений:
<PermissionSet class="NamedPermissionSet"
version="1"
Name="AWSCustomPermissionSet"
Unrestricted="true"
Description="Allow AWS DLLs to access a set of environment variables.">
<IPermission class="EnvironmentPermission"
version="1"
Read="AWS_ACCESS_KEY_ID;AWS_SECRET_ACCESS_KEY;AWS_SESSION_TOKEN;AWS_METADATA_SERVICE_TIMEOUT;AWS_METADATA_SERVICE_NUM_ATTEMPTS;AWS_EXECUTION_ENV"
/>
</PermissionSet>
- Добавление в расширение DLL файла app.config:
<configuration>
<system.web>
<trust level="Full" />
</system.web>
</configuration>
и ни один из этих шагов, кажется, не имеет никакого значения, я каждый раз вижу одну и ту же зарегистрированную ошибку.
Я также рассмотрел вопрос создания собственного AWSSDK.Core.dll из источника, удалив доступ к переменной среды от Amazon.Util.Internal.InternalSDKUtils - это может работать, но похоже, что должно быть «правильное» решение.
Может кто-нибудь помочь мне преодолеть эту проблему?