Как мне разрешить. NET модулю обработки данных служб Reporting Services для доступа к локальным переменным среды? - PullRequest
0 голосов
/ 10 апреля 2020

Я добавляю. 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 - это может работать, но похоже, что должно быть «правильное» решение.

Может кто-нибудь помочь мне преодолеть эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...