我遇到了我的一个旧项目(使用MySQL 5和PHP 5.5)。我只是想使用MySQL 8和PHP7.0测试该项目。要正常安装数据库,请执行以下操作:
...
mysql -u root -p < DBinstall/webAppDBinstall.sql
...
在我的Web应用程序的“安装”脚本中。sql命令包含:
...
-- # ######################## SET PHP_SCRIPT & GRANTS FOR ############################
CREATE USER 'php_script'@'localhost' IDENTIFIED BY 'php_script';
GRANT INSERT,SELECT ON webApp.* TO 'php_script'@'localhost';
GRANT UPDATE ON webApp.Orders TO 'php_script'@'localhost';
GRANT UPDATE ON webApp.OrderItems TO 'php_script'@'localhost';
GRANT UPDATE ON webApp.UserStatus TO 'php_script'@'localhost';
GRANT INSERT ON webApp.History TO 'php_script'@'localhost';
...
然后我在运行webApp时从PHP收到以下错误:
$ cat /var/log/apache2/error.log
...
[Thu May 28 06:01:26.317867 2020] [:error] [pid 8906] [client 127.0.0.1:32960] PHP Warning: mysqli::query(): Couldn't fetch mysqli in /var/www/webApp/src_php/mylib.php on line 68, referer: http://webApp/index.php?error=0
...
[注:该项目正在使用MySQL 5和PHP 5完美运行。
然后我认为“闻起来”就像是特权。所以我做了以下事情:
mysql> select User,Table_name,Table_priv from mysql.tables_priv where User='php_script';
+------------+------------+------------+
| User | Table_name | Table_priv |
+------------+------------+------------+
| php_script | History | Insert |
| php_script | OrderItems | Update |
| php_script | Orders | Update |
| php_script | UserStatus | Update |
+------------+------------+------------+
4 rows in set (0.00 sec)
mysql>
这里是证明:] >>
我更改了我的DBinstall/webAppDBinstall.sql
脚本FROM
] ::... -- # ######################## SET PHP_SCRIPT & GRANTS FOR ############################ CREATE USER 'php_script'@'localhost' IDENTIFIED BY 'php_script'; GRANT INSERT,SELECT ON webApp.* TO 'php_script'@'localhost'; GRANT UPDATE ON webApp.Orders TO 'php_script'@'localhost'; GRANT UPDATE ON webApp.OrderItems TO 'php_script'@'localhost'; GRANT UPDATE ON webApp.UserStatus TO 'php_script'@'localhost'; GRANT INSERT ON webApp.History TO 'php_script'@'localhost'; ...
TO
-- # ######################## SET PHP_SCRIPT & GRANTS FOR ############################ CREATE USER 'php_script'@'localhost' IDENTIFIED BY 'php_script'; GRANT INSERT,SELECT ON webApp.Users TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.UserStatus TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.Categories TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.ProductGroups TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.CategoriesGroups TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.Products TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.Orders TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.OrderItems TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.Messages TO 'php_script'@'localhost'; GRANT INSERT,SELECT ON webApp.History TO 'php_script'@'localhost'; GRANT UPDATE ON webApp.Orders TO 'php_script'@'localhost'; GRANT UPDATE ON webApp.OrderItems TO 'php_script'@'localhost'; GRANT UPDATE ON webApp.UserStatus TO 'php_script'@'localhost'; GRANT INSERT ON webApp.History TO 'php_script'@'localhost';
结果是:
mysql> select User,Table_name,Table_priv from mysql.tables_priv where User='php_script'; +------------+------------------+----------------------+ | User | Table_name | Table_priv | +------------+------------------+----------------------+ | php_script | History | Select,Insert | | php_script | Categories | Select,Insert | | php_script | CategoriesGroups | Select,Insert | | php_script | Messages | Select,Insert | | php_script | OrderItems | Select,Insert,Update | | php_script | Orders | Select,Insert,Update | | php_script | ProductGroups | Select,Insert | | php_script | Products | Select,Insert | | php_script | UserStatus | Select,Insert,Update | | php_script | Users | Select,Insert | +------------+------------------+----------------------+ 10 rows in set (0.00 sec) mysql>
关于“为什么在
GRANT
s中使用通配符会发生这种情况的其他任何更好的想法”?
(很抱歉重复我的问题,但stackoverflow已使我无法回答自己的问题)
我的问题是: 为什么GRANT <PRIVS> ON <DB>.* TO <USER>;
通配符语法停止“工作”
注:
此问题与mysqli::query(): Couldn't fetch mysqli不同。我的webApp应用程序是一个系统,该系统在MySQL 5.x部署中可完美运行。 ITS与PHP无关(尽管mysqli
错误似乎与之无关)。我遇到了我的一个旧项目(使用MySQL 5和PHP 5.5)。我只是想使用MySQL 8和PHP7.0测试该项目。要正常安装数据库,请执行以下操作:... mysql -u root -p <...>
我刚刚在成功运行以下代码的MySQL 8服务器上进行了测试:
CREATE DATABASE webApp;
CREATE USER 'php_script'@'localhost' IDENTIFIED BY 'php_script';
GRANT INSERT,SELECT ON webApp.* TO 'php_script'@'localhost';