MySql.Data в GAC, все еще SecurityException - PullRequest
2 голосов
/ 20 марта 2012

У меня проблема с MySql.Data в среде с частичным доверием. Я добавил MySql.Data в GAC (установив его вместе с MSI с сайта mysql.com). Как вы можете видеть здесь:

>gacutil /l | grep -i mysql
  MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d,
 processorArchitecture=MSIL
  MySql.Data.CF, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c4
4d, processorArchitecture=MSIL
  MySql.Data.Entity, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc889
69c44d, processorArchitecture=MSIL
  MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d,
processorArchitecture=MSIL

>

Я добавил в свой web.config следующее:

<configuration>
    <system.web>
      <trust level="Vevida"/>
      <compilation debug="true" targetFramework="4.0">
        <assemblies>
          <add assembly="MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
        </assemblies>
      </compilation>
    </system.web>    
</configuration>

Но я все еще получаю следующее исключение: Exception Details: System.Security.SecurityException: Request for the permission of type 'MySql.Data.MySqlClient.MySqlClientPermission, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' failed.

Выдается при попытке открыть соединение.

Я не уверен, что я могу проверить больше. Согласно документации MySql, мне нужны как минимум следующие разрешения: System.Net.SocketPermission, System.Security.Permissions.ReflectionPermission, System.Net.DnsPermission и System.Security.Permissions.SecurityPermission

На моем уровне доверия я это:

<IPermission
    class="SocketPermission"
    version="1"
    Unrestricted="true">
</IPermission>
<IPermission
    class="ReflectionPermission"
    version="1"
    Flags="RestrictedMemberAccess"/>
<IPermission
    class="DnsPermission"
    version="1"
Unrestricted="true"/>
<IPermission
    class="SecurityPermission"
    version="1"
    Flags="Execution,ControlPrincipal,ControlThread,SerializationFormatter"/>

Насколько я вижу в документации, этого достаточно. Также пытался установить неограниченные значения SecurityPermission и ReflectionPermission, это не помогло.

У вас есть идеи?

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

MySqlClientPermission должен быть добавлен к конфигурации среднего доверия как SecurityClass и IPermission. Мое дополнение web_mediumtrust.config:

<SecurityClass Name="MySqlClientPermission"
  Description="MySql.Data.MySqlClient.MySqlClientPermission,
  MySql.Data, Version=6.5.4.0, Culture=neutral,
  PublicKeyToken=c5687fc88969c44d"
/>

<IPermission class="MySqlClientPermission" version="1">
  <add connectionString="Server=;Database=;User=;Password=;Port=;Pooling=;"
    restrictions=""
    KeyRestrictionBehavior="PreventUsage" />
</IPermission>

Как и на http://www.saotn.org/mysql-connector-net-6-5-partial-trust/

0 голосов
/ 21 марта 2012

Каждый раз, когда ваш код открывает MySqlConnection, клиент MySql запрашивает MySqlClientPermission в строке подключения. Ваше приложение должно иметь это разрешение независимо от того, находятся ли клиентские сборки MySql в GAC или нет.

Разрешения, указанные в http://englishebook.info/1/software-to-download/656-running-connectornet-65-inside-medium-trust-level (те, которые вы упомянули в своем вопросе) - это те, которые нужны клиентским сборкам MySql, а не те, которые требуются вашему приложению ASP.NET. Чтобы ваше приложение могло использовать MySql, вам нужно предоставить ему MySqlClientPermission.

...