Когда нужны флеш-привилегии в MySQL?

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

CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO [email protected] IDENTIFIED BY "mypassword";

Мне никогда не приходилось использовать команду FLUSH PRIVILEGES после выполнения двух предыдущих команд. Пользователи могут войти в систему и использовать свою базу данных, а также запускать PHP-скрипты, которые прекрасно подключаются к базе данных. И все же я вижу, что эта команда используется почти в каждом уроке, на который я смотрю.

Когда действительно нужна команда FLUSH PRIVILEGES и когда она не нужна?

Ответ 1

Привилегии, назначенные с помощью опции GRANT, не нуждаются в действиях FLUSH PRIVILEGES - сервер MySQL заметит эти изменения и немедленно перезагрузит таблицы предоставления.

Из документации MySQL:

Если вы изменяете таблицы грантов напрямую, используя такие выражения, как INSERT, UPDATE или DELETE, ваши изменения не влияют на привилегии проверяя, чтобы вы либо перезапустили сервер, либо попросите его перезагрузить столы. Если вы напрямую измените таблицы грантов, но забудьте перезагрузить их изменения не влияют, пока вы не перезапустите сервер. Эта может оставить вас задуматься, почему ваши изменения, похоже, не имеют значения!

Чтобы сообщить серверу о перезагрузке таблиц предоставления, выполните flush-privileges. Это можно сделать, выпустив FLUSH PRIVILEGES или выполнением флеш-привилегий mysqladmin или mysqladmin reload.

Если вы изменяете таблицы грантов косвенно, используя управление учетными записями таких как GRANT, REVOKE, SET PASSWORD или RENAME USER, сервер уведомляет эти изменения и загружает таблицы предоставления в память снова немедленно.

Ответ 2

TL; DR

Вы должны использовать FLUSH PRIVILEGES; только если вы изменяете таблицы предоставления напрямую, используя такие операторы, как INSERT, UPDATE или DELETE.

Ответ 3

Просто чтобы привести несколько примеров. Скажем, вы изменили пароль для пользователя под названием 'alex'. Вы можете изменить этот пароль несколькими способами. Например:

mysql> update* user set password=PASSWORD('test!23') where user='alex'; 
mysql> flush privileges;

Здесь вы использовали UPDATE. Если вы используете INSERT, UPDATE или DELETE в таблицах грантов, вам необходимо использовать FLUSH PRIVILEGES, чтобы перезагрузить таблицы предоставления.

Или вы можете изменить пароль следующим образом:

mysql> set password for 'alex'@'localhost'= password('test!24');

Здесь не нужно использовать "ПРИВИЛЕГИИ FLUSH"; Если вы произвольно изменяете таблицы грантов, используя операторы управления учетными записями, такие как GRANT, REVOKE, SET PASSWORD или RENAME USER, сервер замечает эти изменения и сразу же загружает таблицы привилегий в память.

Ответ 4

2 балла в дополнение ко всем другим хорошим ответам:

1:

Что такое таблицы грантов?

с dev.mysql.com

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

Пояснение: в MySQL есть несколько встроенных баз данных, одна из которых "mysql", все таблицы в базе данных "mysql" называются таблицами грантов.

2:

обратите внимание, что если вы выполняете:

UPDATE a_grant_table SET password=PASSWORD('1234') WHERE test_col = 'test_val';

и обновив phpMyAdmin, вы поймете, что ваш пароль был изменен для этой таблицы, но даже сейчас, если вы выполните:

mysql -u someuser -p

ваш доступ будет запрещен вашим новым паролем, пока вы не выполните:

FLUSH PRIVILEGES;