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

Posted

技术标签:

【中文标题】.NET 4.0 中等信任级别和 MYSQL 连接【英文标题】:.NET 4.0 Medium Trust Level and MYSQL connection 【发布时间】:2013-08-21 08:20:39 【问题描述】:

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

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

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

首先我尝试通过转到此处来更改我的本地配置,

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config

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

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

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

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

[SecurityException: 请求类型的权限 'System.Security.Permissions.SecurityPermission, mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 失败。] MySql.Data.MySqlClient.MySqlTrace..cctor() +0

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

【问题讨论】:

【参考方案1】:

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

我的第一步是绝对必要的。不要忘记将您的信任级别更改为“中”。之后,您需要从中获得正确的 .Net 连接器版本 The Oficial Website 请小心选择您的托管服务提供商使用的版本。例如我的托管公司正在使用 Mysql Connector Net 6.5.4

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

您需要在&lt;configuration&gt; 下添加类似这样的内容;

 <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>

如果您的系统没有在您的&lt;system.web&gt; 下自动添加它,您需要添加;

  <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

【讨论】:

【参考方案2】:

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

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

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

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

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

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

【讨论】:

以上是关于.NET 4.0 中等信任级别和 MYSQL 连接的主要内容,如果未能解决你的问题,请参考以下文章

为中等信任级别编译 MVC 应用程序

哪些 ORM 在中等信任下工作?

ASP.Net 中等信任设置

什么是 Asp.net 中的中等信任?

Visual Studio 2008 网络驱动器信任和 .NET 4.0

中等信任下的进程内数据库选项