2

我在部分受信任的环境中遇到了 MySql.Data 的问题。我已将 MySql.Data 添加到 GAC(通过 mysql.com 站点的 MSI 安装它)。正如你在这里看到的:

>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 设置为不受限制,这没有帮助。

你有什么想法?

4

2 回答 2

3

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/

于 2012-03-28T10:28:49.643 回答
0

每次您的代码打开 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。

于 2012-03-21T12:49:47.710 回答