【问题标题】:MySQL SSL connection through ADODB library通过 ADODB 库的 MySQL SSL 连接
【发布时间】:2009-07-17 01:01:10
【问题描述】:

我有一个托管在远程服务器上的 MySQL 数据库,它只接受 SSL 连接。当我使用带有 SSL 选项的 Java JDBC 连接到这个数据库时,它工作正常。有一个特殊的 jdbc 字符串,我用于 JDBC 连接,如下所示 "jdbc:mysql://:/?verifyServerCertificate=false&useSSL=true&requireSSL=true"

我需要使用 ADODB 库通过 PHP 使用类似的连接。

我在网上发现很少有关于使用 ADODB mysqli 扩展的参考资料


(参考http://mbrisby.blogspot.com/2008/06/adodb-php-mysql-ssl.html

创建 CA 证书后(我们会说它在 /path/to/ca-cert.pem),确保以下项目在 /etc/my.cnf 的 [client] 节或连接客户端主机上用户的 ~/.my.cnf:

ssl-ca=/path/to/ca-cert.pem

然后试试下面的 PHP 程序:

// 这些是 AdoDB 库的一部分 需要'/path/to/adodb-exceptions.inc.php'; 需要'/path/to/adodb.inc.php';

/* * 我从运行中得到了“2048” * printf("%d\n", MYSQLI_CLIENT_SSL ) * 在 PHP 程序中(安装了 mysqli 扩展) */ $dsn = 'mysqli://ssluser:sslpass@dbhost/test?clientflags=2048';

$dbh = NewADOConnection($dsn);

$sql = "显示类似'ssl_cipher'的状态"; $res =& $dbh->执行($sql); print_r($res->fields); $res->关闭();

$dbh->关闭();



如果我从不同的机器连接到这个 mysql 数据库,是否需要证书信息?

有没有类似 JDBC 字符串的东西可用于 PHP?

如果有人可以发布一个工作示例,那就太好了

谢谢

【问题讨论】:

    标签: php mysql ssl adodb


    【解决方案1】:

    我没有将 MySQL 与 SSL 连接的经验。 MySQL 驱动程序有flags (MYSQL_CLIENT_SSL),您可以在连接时使用。

    使用AdoDB连接时设置,可以试试我的连接模板:

    $options = '';
    if ($driver == 'mysql' OR $driver == 'mysqli')
    {
      if ($params['pconnect'] === TRUE)
      {
        $options .= '?persist';
      }
      $flags = MYSQL_CLIENT_COMPRESS;
      if ($params['ssl'] === TRUE)
      {
        $flags = $flags | MYSQL_CLIENT_SSL;
      }
      $options .= (empty($options)?'?':'&')."clientflags=$flags";
    }
    
    $dsn = "{$driver}://{$username}:{$password}@{$hostname}/{$database}{$options}";
    
    $adodb =& ADONewConnection($dsn);
    
    if ($adodb)
    {
      //set fetch mode
      $adodb->SetFetchMode(ADODB_FETCH_BOTH);
    
      //character set
      if ($driver == 'mysql' OR $driver == 'mysqli')
      {
        if (isset($params['char_set']) AND $params['char_set']
            AND isset($params['dbcollat']) AND $params['dbcollat'])
        {
          $charset    = $adodb->qstr($params['char_set']);
          $collation  = $adodb->qstr($params['dbcollat']);
          $adodb->Execute("SET NAMES $charset COLLATE $collation");
        }
      }
      if ($debug)
      {
        @ob_start();
        $adodb->debug = TRUE;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 2014-06-17
      • 2018-06-08
      • 2019-04-03
      • 2011-05-18
      • 2012-12-25
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多