2012-03-20 120 views
2

我在部分信任環境中遇到MySql.Data問題。 我已將MySql.Data添加到GAC(通過將其與來自mysql.com站點的MSI進行安裝)。正如你可以在這裏看到:GAC中的MySql.Data仍然SecurityException

>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設置爲無限制,這沒有幫助。

你有什麼想法嗎?

回答

2

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/

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。

+0

所以,我要在我的信任配置添加MySqlClientPermission?我不明白。我的主機提供商向我發送了他們的配置,我可以通過這個程序集打開一個連接,並且在他們的配置中我沒有看到這個類。我會在今天晚些時候嘗試 – 2012-03-21 15:05:11

+0

我想我做錯了什麼,因爲當我在我的信任文件中添加MySqlClientPermission時,我得到的只是錯誤。我應該在哪裏添加?找不到任何關於這個 – 2012-03-21 17:51:18

+0

除此之外,我發現MySqlClientPermission只是其他4個權限的「短版」,我已經設置了 – 2012-03-21 18:10:05