- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用的是 MySQL 5.7.24 和 PHP 7.2.10。 MySQL 配置了 SSL。我有一个用户 my_user
,密码为 abc123
。我尝试使用两个身份验证插件进行配置:
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH sha256_password BY 'abc123';
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH mysql_native_password BY 'abc123';
在我的 PHP 服务器上,我可以使用 mysql
命令行客户端成功连接,无需指定主机、用户和密码以外的任何内容。但是,在 PHP 中,我只能在使用 mysql_native_password
时连接。不是在使用 sha256_password
时。
以下 PHP 代码适用于 mysql_native_password
:
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$con = $mysqli->real_connect('192.168.192.100', 'my_user', 'abc123', 'my_db',
3306, null, MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
var_dump($mysqli->query('SELECT 1;'));
但是,当我使用 sha256_password
时,出现错误“用户 'my_user'@'192.168.192.150' 的访问被拒绝(使用密码:YES)。”我已经尝试交替添加以下两个语句(在 real_connect
之前)但没有成功(但是,我想补充一点,我不需要其中任何一个,因为我可以连接命令行客户端无需指定这些选项*)。
$mysqli->ssl_set(null, null, 'ca.pem', null, null);
$mysqli->ssl_set('client-key.pem', 'client-cert.pem', 'ca.pem', null, null);
那么应该如何在 PHP 中使用 mysqli
中的 sha256_password
?
*注意:我的 PHP 服务器与我的 MySQL 服务器是不同的机器。在包含ssl-ca
、ssl-cert
和ssl-key的PHP服务器上没有
选项,所以我真的尝试可以在没有它们的情况下使用 my.cnf
mysql
进行连接。
更新 1
如果有帮助,这里有一些来自 phpinfo
的诊断信息:
mysqli
MysqlI Support => enabled
Client API library version => mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Active Persistent Links => 0
Inactive Persistent Links => 0
Active Links => 0
Directive => Local Value => Master Value
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => no value => no value
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqli.rollback_on_cached_plink => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Compression => supported
core SSL => supported
extended SSL => supported
Command buffer size => 4096
Read buffer size => 32768
Read timeout => 86400
Collecting statistics => Yes
Collecting memory statistics => No
Tracing => n/a
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_caching_sha2_password,auth_plugin_sha256_password
API Extensions => mysqli,pdo_mysql
openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.1.0g 2 Nov 2017
OpenSSL Header Version => OpenSSL 1.1.0g 2 Nov 2017
Openssl default config => /usr/lib/ssl/openssl.cnf
Directive => Local Value => Master Value
openssl.cafile => no value => no value
openssl.capath => no value => no value
最佳答案
据我从文档中了解到,一次只能激活一个 auth_option。
所以当你在做的时候
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH sha256_password BY 'abc123';
ALTER USER 'my_user'@'192.168.192.150' IDENTIFIED WITH mysql_native_password BY 'abc123';
你的第二个请求实际上将 sha256_password auth 重新定义为 mysql_native_password
关于php - 使用 sha256_password(访问被拒绝)时如何使用 PHP 的 mysqli 连接到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54177511/
这个问题已经有答案了: php, mysql - Too many connections to database error (6 个回答) 已关闭 8 年前。 伙计们,我的 opencart 网站
这是我想要的,但不能让它与新的 MySQLi 一起工作,只是因为我的主机没有所有新的 php 等... 但是一定有某种解决方案,或者这就是 MYSQLI 能做的? 请不要谈论 PDO,因为即使是丑陋的
这个问题在这里已经有了答案: Is there a way to see a prepared query as it will be executed on the database? [dupli
Warning: mysqli::query(): Couldn't fetch mysqli in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\
Warning: mysqli::query(): Couldn't fetch mysqli in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\
Warning: mysqli::query(): Couldn't fetch mysqli in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\
如何在扩展类中实现 mysqli? 我正在上传图像并将其存储在 MySQL 数据库中,但出现此错误: Notice: Undefined variable: mysqli in ...ecc/ecc/
我终于切换到 mysqli 了。 但是我发现了显着的性能差异。 我有一个脚本,可以进行大约 25.000 个查询。该脚本使用 mysqli 和 mysqlnd 作为驱动程序需要 15 秒10 秒使用
这个问题已经有答案了: Why can't I run two mysqli queries? The second one fails [duplicate] (2 个回答) 已关闭 4 年前。 我
这个问题已经有答案了: mysqli::query(): Couldn't fetch mysqli (4 个答案) 已关闭 6 年前。 这是我当前的代码: query("SELECT * FROM
这个问题在这里已经有了答案: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must
我正在尝试连接到我的数据库,但当我使用 127.0.0.1 而不是本地主机时出现错误。 Warning: mysqli::mysqli(): (HY000/2002): A connection at
使用 WHM 更新 mysql 后我的网站面临这个问题。 Warning: mysqli::mysqli(): Headers and client library minor version mis
我试图通过 MySQLi 将简单数据插入到我的 MySQL 表中,但是它拒绝插入,并且没有报告任何错误消息。 我想强调的是,当直接输入 PhpMyAdmin 时,此查询功能正常(当然,替换了变量) r
我正在使用用户断言函数,例如: debug_assert ( gettype($ob)=='object', "Not an object " .print_r($ob
我有一个每天只有大约 100 人访问的站点,但是当我以用户身份登录时收到此错误消息: Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1203):
我创建了一个 foreach 循环来将数据添加到 MySQL 数据库,但在将第一行添加到数据库后,我收到错误“mysqli::query(): Couldn't fetch mysqli”。 PHP
我正在使用 mysqli 实现一些基本的 getter 函数,并且正在考虑一种在错误检查中变得懒惰但仍然正确的方法。 所以我写了这种类型的代码段 if(!mysqli_stmt_bind_param(
我已经阅读了在线 php 手册,但我仍然不确定这两个函数的工作方式:mysqli::commit 和 mysqli::rollback。 我要做的第一件事是: $mysqli->autocommit(
这个问题在这里已经有了答案: What is the difference between single-quoted and double-quoted strings in PHP? (7 个答
我是一名优秀的程序员,十分优秀!