连接器和 API 手册  / 第 4 章 MySQL 连接器/NET 开发人员指南  / 4.5 连接器/NET 编程  / 4.5.7 使用部分信任/中等信任  /  4.5.7.2 使用 GAC 中安装的连接器/NET 库配置部分信任

4.5.7.2 使用 GAC 中安装的连接器/NET 库配置部分信任

如果库安装在 GAC 中,则必须includesecurityasserts=true 在连接字符串中包含连接选项。这是 MySQL Connector/NET 6.6.4 的新要求。

以下列表显示了在部分信任环境中运行连接器/NET 应用程序所需的步骤和代码片段。出于说明目的,我们在此示例中使用管道连接协议。

  1. 安装 Connector/NET:版本 6.6.1 或更高版本,或 6.5.4 或更高版本。

  2. 安装库后,进行以下配置更改:

    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"/>
    笔记

    此配置是包含所有关键字的最通用的方式。

  3. --enable-named-pipe通过在命令行上 添加选项,将 MySQL 服务器配置为接受管道连接。如果您需要有关此的更多信息,请参阅在 Microsoft Windows 上安装 MySQL

  4. 确认托管服务提供商已MySql.Data.dll在 GAC 中安装了连接器/NET 库 ( )。

  5. MySqlClientPermission或者,托管提供商可以通过在信任策略中 使用新类来避免全局授予权限 。(另一种方法是全局启用权限System.Net.SocketPermissionSystem.Security.Permissions.ReflectionPermissionSystem.Net.DnsPermissionSystem.Security.Permissions.SecurityPermission。)

  6. 使用 Visual Studio 2010 创建一个简单的 Web 应用程序。

  7. 在您的应用程序中添加对 MySql.Data.MySqlClient图书馆的引用。

  8. 编辑您的web.config文件,以便您的应用程序使用中等信任级别运行:

    <system.web>
      <trust level="Medium"/>
    </system.web>
  9. 将命名空间添加MySql.Data.MySqlClient到您的服务器代码页。

  10. 根据连接器/NET 版本的不同,以略有不同的方式定义连接字符串。

    仅适用于 6.6.4 或更高版本:要在将以中等信任度运行的任何 Web 应用程序中使用连接,请将新 includesecurityasserts选项添加​​到连接字符串。 includesecurityasserts=true这使得库在需要时请求以下权限: SocketPermissionsReflectionPermissionsDnsPermissionsSecurityPermissions以及在中等信任级别中未授予的其他权限。

    对于 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;
  11. 定义MySqlConnection要使用的:

    MySqlConnection myconn = new MySqlConnection(myconnString.ConnectionString);
    myconn.Open();
  12. 从您的表中检索一些数据:

    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()
  13. 运行程序。它应该成功执行,不需要任何特殊代码或遇到任何安全问题。