.NET 4.0中等信任级别和MYSQL连接

时间:2013-08-19 13:48:53

标签: .net-4.0 mysql-connector medium-trust trust full-trust

我有一个问题,我认为一个正确的答案会帮助很多有同样问题的人。因为这是一个常见且没有得到很好解答的问题。

问题是关于IIS中的“中等信任级别”配置。几个月前,我在我的本地计算机上使用“完全信任级别”配置对我的网站进行了编码,当我将其上传到主机时工作正常。 但我的托管公司有一个关于信任级别的新规则,现在他们只允许“中等信任级别”。

我的网页现在不起作用。我试图调整我的网站,但我不知道该怎么做。而且肯定很多人都不知道.. 所以我会说到目前为止我做了什么,你能帮助我吗?

首先,我尝试通过此处改变我的本地配置,

  

C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \配置

并打开我的webconfig文件,然后更改了

<trust level="Full" originUrl="" />

<trust level="Medium" originUrl="" />

之后只是为了测试我创建了一个带有ASP默认模板的新网站。它正在工作。然后我添加了Mysql.dll作为连接到Mysql数据库的引用。但它抛出了与该堆栈的安全异常:

  

[SecurityException:请求类型的权限   'System.Security.Permissions.SecurityPermission,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'   失败。] MySql.Data.MySqlClient.MySqlTrace..cctor()+ 0

那么现在呢?我们不能再连接到mysql数据库了吗?或者有解决方案吗?我从来没有在网站项目文件夹中更改我的webconfig文件我需要在这里更改一些内容吗? 请帮帮我们?

2 个答案:

答案 0 :(得分:1)

大家好我最终找到解决问题的方法,所以我会尽力帮助那些有同样问题的人。部分信任和中等信任等级是同样的事情,请注意。

我在这个问题上迈出的第一步是绝对必要的。别忘了把你的信任等级改为“中等”。之后你需要从.Net Connector版本开始 The Oficial Website 请谨慎选择托管服务提供商使用的版本。例如,我的托管公司正在使用Mysql Connector Net 6.5.4

其次,您需要配置将使用.dll文件的项目webconfig文件,并在中等信任级别下获得必要的许可。

您需要添加<configuration>这样的内容;

 <mscorlib>
    <security>
      <policy>
        <PolicyLevel version="1">
          <SecurityClasses>
            <SecurityClass Name="MySqlClientPermission" Description="MySql.Data.MySqlClient.MySqlClientPermission, MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
          </SecurityClasses>
        </PolicyLevel>
      </policy>
    </security>
  </mscorlib>

如果您的系统未在<system.web>下自动添加,则需要添加;

  <assemblies>
    <add assembly="MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
    <add assembly="MySql.Data.Entity, Version=6.5.4.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
    <add assembly="MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
  </assemblies>

有时这些步骤可能不够,您需要在

下编辑web_mediumtrust.config
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config

您需要在

下添加此行
<SecurityClasses>
  <securityclass Name="MySqlClientPermission" Description="MySql.Data.MySqlClient.MySqlClientPermission, MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

<NamedPermissionSets>
  <iPermission class = "MysqlClientPermission" version = "1">  
    <add connectionString = "Server =; Database =;"  restrictions = "User =; User Id =; Password =; Port =; Pooling =;" KeyRestrictionBehavior = "(Prevent Usage | Allow Only)" /> 
  </iPermission>

小心你正在使用的版本不要忘记根据它改变行。如果你仍然无法弄清楚那里有一个非常有用的链接

Trust Level Under the Partial Trust

答案 1 :(得分:0)

以下是我尝试让MySql在中等信任环境中工作时解决类似问题的方法。

我们尝试了所有的“书”,但根本无法让它发挥作用!

原来MySql连接器版本是关键。 向您询问网络托管公司他们在GAC服务器上安装了哪些版本的MySqlClient

(GAC只是意味着该库已安装在服务器上,因此可以直接引用它,而无需将MySql.Data.dll上传到您的bin文件夹。最新的可安装版本可在此处获取:{ {3}})。

在GAC服务器上安装驱动程序后,您只需要在web.config中引用它,但将您的网络托管公司版本替换为版本= 6.6.5.0

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
  </assemblies>    
</compilation>