如果程式庫安裝在 GAC 中,您必須在連線字串中加入連線選項 includesecurityasserts=true
。這是自 MySQL Connector/NET 6.6.4 起的新要求。
以下清單顯示在部分信任環境中執行 Connector/NET 應用程式所需的步驟和程式碼片段。為便於說明,我們在此範例中使用管道連線通訊協定。
安裝 Connector/NET:6.6.1 或更新版本,或 6.5.4 或更新版本。
安裝程式庫後,進行以下組態變更
在
SecurityClasses
區段中,為MySqlClientPermission
類別新增定義,包括要使用的版本。<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" />
向下捲動至
ASP.Net
區段<PermissionSet class="NamedPermissionSet" version="1" Name="ASP.Net">
為
MySqlClientPermission
類別的詳細組態新增項目<IPermission class="MySqlClientPermission" version="1" Unrestricted="true"/>
注意此組態是包含所有關鍵字的最適一般化方式。
設定 MySQL 伺服器以接受管道連線,方法是在命令列中新增
--enable-named-pipe
選項。如果您需要有關這方面的更多資訊,請參閱在 Microsoft Windows 上安裝 MySQL。確認託管提供者已將 Connector/NET 程式庫 (
MySql.Data.dll
) 安裝在 GAC 中。或者,託管提供者可以使用信任原則中的新
MySqlClientPermission
類別,避免以全域方式授與權限。(另一種方法是以全域方式啟用權限System.Net.SocketPermission
、System.Security.Permissions.ReflectionPermission
、System.Net.DnsPermission
和System.Security.Permissions.SecurityPermission
。)使用 Visual Studio 2010 建立簡單的 Web 應用程式。
在應用程式中新增
MySql.Data.MySqlClient
程式庫的參考。編輯
web.config
檔案,使您的應用程式以中度信任層級執行<system.web> <trust level="Medium"/> </system.web>
將
MySql.Data.MySqlClient
命名空間新增至您的伺服器程式碼頁面。定義連線字串,依據 Connector/NET 版本而略有不同。
僅適用於 6.6.4 或更新版本:若要在任何將以中度信任執行的 Web 應用程式內使用連線,請將新的
includesecurityasserts
選項新增至連線字串。includesecurityasserts=true
會使程式庫在需要時要求以下權限:SocketPermissions
、ReflectionPermissions
、DnsPermissions
、SecurityPermissions
以及其他未在中度信任層級授與的權限。適用於 Connector/NET 6.6.3 或更早版本:連線字串內不需要安全性方面的特殊設定。
MySqlConnectionStringBuilder myconnString = new MySqlConnectionStringBuilder("server=localhost;User Id=root;database=test"); myconnString.PipeName = "MySQL55"; myconnString.ConnectionProtocol = MySqlConnectionProtocol.Pipe; // Following attribute is a new requirement when the library is in the GAC. // Could also be done by adding includesecurityasserts=true; to the string literal // in the constructor above. // Not needed with Connector/NET 6.6.3 and earlier. myconnString.IncludeSecurityAsserts = true;
定義要使用的
MySqlConnection
MySqlConnection myconn = new MySqlConnection(myconnString.ConnectionString); myconn.Open();
從表格擷取一些資料
MySqlCommand cmd = new MySqlCommand("Select * from products", myconn); MySqlDataAdapter da = new MySqlDataAdapter(cmd); DataSet1 tds = new DataSet1(); da.Fill(tds, tds.Tables[0].TableName); GridView1.DataSource = tds; GridView1.DataBind(); myconn.Close()
執行程式。它應該順利執行,無需任何特殊程式碼,也不會遇到任何安全性問題。