GAC中的MySql.Data,仍为SecurityException
本文关键字:仍为 SecurityException Data 中的 MySql GAC | 更新日期: 2023-09-27 18:28:29
我在部分受信任的环境中使用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.SocketPermissions、System.Security.Permissions.ReflectionPermission、System.Net.DnsPermission和System.Security.PPermissions.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设置为unrestricted,但没有帮助。
你有什么想法吗?
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/
每次代码打开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。