Команда UPDATE пользователя MySQL запрещена

Я пытаюсь изменить sql_mode глобальная переменная с использованием пользователя root perfomance_schema.global_variables Таблица.

Я пытался с помощью SET GLOBAL sql_mode='???';

Но это не работает.

Когда я показываю свои корневые права, я думаю, что у меня есть правильные права:

libertalia@labuse:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    mysql> show grants;
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    2 rows in set (0,00 sec)

Следующим шагом я попытался изменить глобальную переменную sql_mode:

mysql> use performance_schema
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> describe global_variables;
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| VARIABLE_NAME  | varchar(64)   | NO   |     | NULL    |       |
| VARIABLE_VALUE | varchar(1024) | YES  |     | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
2 rows in set (0,01 sec)

mysql> SELECT * FROM global_variables WHERE VARIABLE_NAME = 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| VARIABLE_NAME | VARIABLE_VALUE                                                                                                                            |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,01 sec)

mysql> UPDATE global_variables SET VARIABLE_VALUE = 'ONLY_FULL_GROUP_BY,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' WHERE VARIABLE_NAME = 'sql_mode';
ERROR 1142 (42000): UPDATE command denied to user 'root'@'localhost' for table 'global_variables'

Я не понимаю, почему мой суперпользователь "root" не может обновить эту таблицу? У root есть правильные права? MySQL защищает системные таблицы?

Чтобы изменить sql_mode переменная мне нужны СУПЕР привилегии, но не ВСЕ ПРИВИЛЕГИИ? Вот почему SET GLOBAL sql_mode тоже не работает?

1 ответ

Решение

information_schema - это, как правило, представления, которые читаются только в природе.

INFORMATION_SCHEMA - это база данных в каждом экземпляре MySQL, место, где хранится информация обо всех других базах данных, которые поддерживает сервер MySQL. База данных INFORMATION_SCHEMA содержит несколько таблиц только для чтения. Они на самом деле являются представлениями, а не базовыми таблицами, поэтому с ними не связано никаких файлов, и вы не можете устанавливать на них триггеры. Также нет каталога базы данных с таким именем.

Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью оператора USE, вы можете только читать содержимое таблиц, но не выполнять над ними операции INSERT, UPDATE или DELETE.

Другие вопросы по тегам