首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >广域网中的MySql.Data,仍然是SecurityException

广域网中的MySql.Data,仍然是SecurityException
EN

Stack Overflow用户
提问于 2012-03-21 02:39:47
回答 2查看 4.2K关注 0票数 2

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

代码语言:javascript
复制
>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中添加了以下内容:

代码语言:javascript
复制
<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.SecurityPermission、MySql System.Net.DnsPermission

在我的信任级别中,我有:

代码语言:javascript
复制
<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设置为无限制,但没有帮助。

你有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-28 18:28:50

必须将MySqlClientPermission作为SecurityClass和IPermission添加到中等信任配置中。我添加的web_mediumtrust.config是:

代码语言:javascript
复制
<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/上发布的

票数 3
EN

Stack Overflow用户

发布于 2012-03-21 20:49:48

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9792920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档