Привилегии пользователя базы данных MySQL: Какие права доступа необходимы?
В краткой инструкции по установке WordPress ("5 минут") указано, что:
Создайте базу данных для WordPress на вашем веб-сервере, а также пользователя MySQL, который имеет все привилегии для доступа и изменения этой базы.
При профессиональной настройке нового блога я задумался, как это соотносится с тем, что предлагает мне конфигурация привилегий/разрешений пользователя базы данных MySQL:
- Данные:
SELECT
,INSERT
,UPDATE
,DELETE
- Определение:
CREATE
,ALTER
,DROP
- Дополнительно:
INDEX
- Прочее:
LOCK TABLES
REFERENCES
CREATE TEMPORARY TABLES
CREATE VIEW
SHOW VIEW
CREATE ROUTINE
EXECUTE
ALTER ROUTINE
Я достаточно уверен в первых трех группах, которые я здесь назвал Данные, Определение и Дополнительно. Но что насчет остальных пунктов под записью Прочее? Обычно я бы сказал, что они не нужны, но хотелось бы получить второе мнение.

"Все привилегии" обычно означают, что нужно предоставить пользователю полный доступ. Однако...
Я нашел как минимум одну статью, в которой утверждается, что пользователю MySQL необходимы только:
- SELECT
- INSERT
- UPDATE
Копнув глубже, я обнаружил, что для полноценной работы (автоматические обновления, установка/удаление плагинов и т.д.) WordPress требует дополнительных прав:
- DELETE
- ALTER (для обновлений)
- CREATE TABLE
- DROP TABLE
Также, хотя это прямо не указано, логично добавить:
- INDEX
Но это всего лишь две надежные ссылки, подтвержденные мнениями из других источников. Я все же рекомендую использовать GRANT ALL, но если вам необходимо ограничить права базы данных, начните с этих 7 привилегий и тщательно протестируйте, чтобы убедиться, что все работает как ожидается.

Спасибо, что поделились своими мыслями. Для этого сайта я не использовал GRANT ALL, так как это не тестовый сайт, а оставил все права, включая INDEX. Пока всё выглядит хорошо, думаю, буду отслеживать ситуацию в ближайшие дни — это реальный сайт с большим количеством плагинов и тому подобного. Насчёт INDEX я также поищу информацию в ядре WordPress и документации MySQL.

Другие, как вы правильно заметили, не нужны.
Кстати, что можно сделать — это условно задавать пользователя/пароль в зависимости от запрашиваемой страницы. Например, использовать непривилегированного пользователя с правами select/insert/update/delete для обычного использования, и привилегированного с дополнительными правами на определение/индексирование при посещении страницы обновления.

Есть ли какие-то рекомендации по тому, как условно устанавливать пользователя/пароль на основе запрашиваемой страницы в среде WordPress? Спасибо.

@superjos: Навскидку не припомню, но суть в том, чтобы определить обычного пользователя БД для select/insert/update/delete в wp-config, а когда URL совпадает с соответствующими страницами /wp-admin (вероятно, обновление, активация темы и активация плагина), определить альтернативного пользователя, который может делать все остальное.

Вот что говорится в статье Усиление защиты WordPress об ограничении привилегий пользователя базы данных:
Для обычных операций WordPress, таких как публикация записей, загрузка медиафайлов, размещение комментариев, создание новых пользователей и установка плагинов, пользователю MySQL требуются только права на чтение и запись данных в базе MySQL: SELECT, INSERT, UPDATE и DELETE.
Следовательно, все остальные привилегии, связанные с изменением структуры базы данных и администрированием, такие как DROP, ALTER и GRANT, могут быть отозваны. Отзыв таких привилегий также улучшает политики ограничения доступа.
Примечание: Некоторые плагины, темы и крупные обновления WordPress могут требовать внесения структурных изменений в базу данных, например, добавления новых таблиц или изменения схемы. В таких случаях перед установкой плагина или обновлением ПО временно предоставьте пользователю базы данных необходимые привилегии.

Что касается "Примечания" в посте redburn, в WordPress Codex также есть Предупреждение, которое вам следует прочитать об обновлениях и изменениях схемы базы данных...
(Примечание редактора: Однако я заметил, что Я НЕ ВИЖУ "GRANT" в списке привилегий при создании или обновлении пользователя. Возможно, "CREATE" следует добавить в список? У кого-нибудь есть информация по этому поводу? — использую Hostgator cPanel, март 2016 —)
ПРЕДУПРЕЖДЕНИЕ:
Попытка обновлений без наличия этих привилегий [SELECT, INSERT, UPDATE, DELETE, DROP, ALTER и GRANT] может вызвать проблемы при изменениях схемы базы данных. Таким образом, НЕ рекомендуется отзывать эти привилегии. Если вы все же чувствуете необходимость сделать это по соображениям безопасности, убедитесь, что у вас есть надежный план резервного копирования с регулярным полным резервным копированием базы данных, которое вы проверили на валидность и которое можно легко восстановить. Неудачное обновление базы данных обычно можно исправить, восстановив базу данных до старой версии, предоставив соответствующие разрешения, а затем позволив WordPress снова попытаться обновить базу данных. Восстановление базы данных вернет её к старой версии, и административные экраны WordPress затем обнаружат старую версию и позволят вам запустить необходимые SQL-команды. Большинство обновлений WordPress не изменяют схему, но некоторые делают это. Только основные обновления (например, с 3.7 до 3.8) изменяют схему. Минорные обновления (например, с 3.8 до 3.8.1) обычно не изменяют её. Тем не менее, регулярно делайте резервные копии.

Моё мнение совпадает с мнением @EAMann выше, а также с источниками, на которые он ссылается: GRANT ALL необходим для обеспечения функциональности и будущей совместимости вашего сайта. Даже на рабочем сайте следует придерживаться руководства пользователя.
Как человек, который вносит вклад в код ядра WordPress и нескольких плагинов, я рекомендую оставлять права доступа к базе данных по умолчанию, как указано в руководстве пользователя (GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname").
Исходный код WordPress (как текущий, так и будущий) предполагает, что пользователь базы данных WordPress имеет все права для указанной базы данных. Если в вашей настройке не хватает каких-либо прав, вы можете столкнуться с проблемами при обновлении WordPress и добавлении новых плагинов.
Поэтому вам действительно не следует использовать права доступа к базе данных, отличные от рекомендуемых по умолчанию в руководстве, если только вы не знаете, что делаете, имеете очень специфические потребности и не забудете, что у вас настроены особые права доступа.
Страница Codex была обновлена с примерами для различных систем и скриншотами о том, как это сделать. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User
Создание имени базы данных и пользователя (через PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin
Создание имени базы данных и пользователя (через клиентскую строку MySQL): https://codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client
mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
-> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT
