And*_*dré 7 php mysql ssl pdo mariadb
我可以通过提供不带任何证书的 --ssl 选项从 Sequel Pro(参见这篇文章)和控制台连接到 MySQL/MariaDB :
$ mysql -u myusername -p -h 10.123.45.67 --ssl
Enter password:
Welcome to the MariaDB monitor.
Run Code Online (Sandbox Code Playgroud)
不使用 --ssl 连接是不可能的,因为用户需要 SSL:
$ mysql -u myusername -p -h 10.123.45.67
Enter password:
ERROR 1045 (28000): Access denied for user 'myusername'@'10.123.45.67' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
如何使用 PDO 在 PHP 中实现相同的功能?
我已经研究了过去几个小时,但没有找到解决方案。我尝试修改提供给 PDO 构造函数的 dsn 和选项参数,但没有成功。我要么最终得到错误代码 1045(访问被拒绝)或 2002(无法通过套接字连接):
$pdo = new PDO('mysql:dbname=...;host=10.123.45.67;port=3306', 'myusername', '...');
Run Code Online (Sandbox Code Playgroud)
PHP 致命错误:未捕获的 PDOException:SQLSTATE[HY000] [1045] 用户“myusername”@“10.123.45.67”的访问被拒绝(使用密码:YES)
添加PDO::MYSQL_ATTR_SSL_KEY(和其他)作为 PDO 构造函数的选项,导致 2002(这些选项没有意义,因为我没有密钥等)。虽然我不知道如何以与从控制台或在 Sequel Pro 内部完成的方式相同的方式设置连接。
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connection-options.html说:
--ssl-模式=模式
此选项仅适用于客户端程序,不适用于服务器。它指定与服务器的连接的安全状态。允许使用这些选项值:
首选:如果服务器支持加密连接,则建立加密连接;如果无法建立加密连接,则回退到未加密连接。如果未指定 --ssl-mode,则这是默认值。
必需:如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试将失败。
这是什么意思?当您使用--ssl-mode=PREFERRED并且服务器具有 SSL 证书时,客户端将使用它进行身份验证,然后您将获得加密连接。
但是,如果服务器没有 SSL 证书,则无论您使用--ssl客户端选项发出请求,您都不会获得加密连接。
(使用已弃用的--ssl客户端选项相当于使用。它允许在不--ssl-mode=PREFERRED加密的情况下打开连接。)
如何知道您是否有 SSL 连接?在 mysql 客户端中,运行:
mysql> status
Run Code Online (Sandbox Code Playgroud)
它会告诉您 SSL 是否正在使用。请参阅https://dba.stackexchange.com/questions/36776/how-can-i-verify-im-using-ssl-to-connect-to-mysql
底线:
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |