Я столкнулся с одним из моих старых проектов (с использованием MySQL 5 и PHP 5.5). Я просто хотел протестировать этот проект, используя MySQL 8 и PHP7 .0. Чтобы установить БД, я обычно делаю:
...
mysql -u root -p < DBinstall/webAppDBinstall.sql
...
в сценарии установки для моего веб-приложения. Команды 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';
...
Затем я получаю следующую ошибку от 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 () : Не удалось получить mysqli . Мое приложение webApp - это система, которая безупречно работает с MySQL 5.x развертываниями . ЕГО НЕ ИМЕЕТ никакого отношения к PHP (хотя, похоже, ошибка mysqli
НЕ ПРИНИМАЕТСЯ).