如果库安装在 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"/>
注意此配置是最通用的方式,它包含所有关键字。
通过在命令行上添加
--enable-named-pipe
选项,配置 MySQL 服务器以接受管道连接。如果您需要有关此方面的更多信息,请参阅 在 Microsoft Windows 上安装 MySQL。确认托管提供商已在 GAC 中安装了 Connector/NET 库 (
MySql.Data.dll
)。可选地,托管提供商可以通过在信任策略中使用新的
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()
运行程序。它应该成功执行,无需任何特殊代码或遇到任何安全问题。