Разнообразные таблицы разрешения взаимодействуют друг с другом, реализуя тем самым всесторонние правила доступа, которые в MySQL используются при обработке запросов пользователя. Контроль доступа делится на два этапа: подключение и запрос.
■ Этап подключения. Когда пользователь подключается к серверу базы данных с узла, прежде всего MySQL проверит, есть ли доступ для данного пользователя в таблице user. Если такой доступ есть и пароль правильный, то следующим будет проверен узел, с которого производится подключение. Если тут запрета нет, и пользователь может зайти на сервер, то все в порядке.
■ Этап запроса. Если подключение установлено, то каждый последующий запрос,
адресуемый серверу (SELECT, DELETE, UPDATE и другие), подлежит всесторонней проверке, а именно: имеет ли пользователь права на данные операции? Здесь также возможны несколько вариантов доступа, например, кто-то имеет возможность выполнять операции SELECT, а кто-то может выполнять только операции INSERT или операции UPDATE, но операции DELETE для него запрещены.
В иерархии таблиц MySQL, таблица user имеет высший приоритет, далее идут таб­лицы db и host, а уже после них на иерархической лестнице располагаются таблицы columns_priv и tables_priv. Если работа таблицы более высокого ранга нарушается по тем или иным причинам, то система обращается к таблице низкого ранга.
Пока система "думает", позволять ли вам определенную операцию на сервере, MySQL проверяет все поля привилегий во всех трех таблицах. Просмотр начинается с таблицы user, при этом проверяется наличие у пользователя привилегии на данное действие. Если такой привилегии нет - проверяются таблицы db и host с целью определить, возможна ли такая привилегия. Только после логического анализа, MySQL разрешает или запрещает выполнение данного запроса. 

Когда в MySQL поступает запрос административного характера - RELOAD, PROCESS и т.д., - система адекватно реагирует, но только после тщательной проверки таблицы user. Ни одна другая таблица не может заменить ее. Поскольку такие административные запросы могут быть применены ко всей базе данных, а не только лишь к одной таблице, то запрет или разрешение на их проведение содержится только в таблице user.
Стандартные установки
Теперь взглянем на обычные таблицы, которые всегда присутствуют в MySQL, чтобы лучше разобраться, что включено в настройки, а что нет.
Взаимодействие между таблицами разрешений
Это означает следующее.
1. MySQL разрешает пользователю, который подключается с локального сервера localhost как пользователь root, полный доступ ко всем базам данных в системе.
2. Также MySQL дает возможность любому другому пользователю подключаться с локального компьютера, и предоставляет ему (а) полный доступ ко всем базам данных на Windows, и (б) к базе данных test на Unix.
3. Пользователям, которые подключаются с других серверов, в доступе будет отказано.
Как предоставить, отменить и просмотреть привилегии пользователя
Изменение таблиц разрешения в базе данных mysql предполагает наличие прав су­перпользователя, имеющего полный доступ к серверу баз данных MySQL.
Итак, в первую очередь нужно убедиться, что у вас именно такой уровень доступа, и вы имеете право изменять записи в таблицах разрешения. Если вы установили сервер самостоятельно, то вы должны были вводить пароль пользователя root во время ин­сталляции (в главе 3, "Инсталляция и настройка MySQL" этот процесс описан детально). Если вы были внимательны и изучили инструкции по инсталляции из этой главы, то вы должны были сделать все правильно (если же вы оставили поле для ввода пароля пустым, то это огромная дыра в вашей системе защиты). А если вы таки вводите пароль, то было бы неплохо его запомнить или записать. Теперь для того чтобы проверить, являетесь ли вы пользователем, вы должны зайти на сервер как пользователь root.
Листинг 14.20.
[root@host] $ mysql -u root -p Enter password: ****
Welcome to the MySQL monitor. Commands end with ; org. mysql>
Затем необходимо убедиться в том, что имеется доступ к таблицам разрешения из ба­зы данных mysql .
Листинг 14.21.
mysql> USE mysql; Database changed
Доступ такого уровня, как root, в основном предоставляется только администратору базы данных. Другие пользователи не могут иметь доступ такого уровня. Простой пользователь подключается к базе данных, вводя свой пароль и имя. Как мы показали в предыдущих разделах, таблицы разрешений MySQL предназначены для манипуляции настройками защиты обычных пользователей и определения уровня защиты для каждого из них.
Существует два основных пути изменения настроек доступа к таблицам. Вы можете использовать запросы ЯМД - INSERT, UPDATE и DELETE - для изменения информации в таблицах, контролирующих управление доступом. Но команды GRANT и REVOKE ничем не хуже, т.е. они тоже могут быть использованы в этих целях, причем последний метод лучше, поскольку в первом случае таблицы модифицируются напрямую и именно поэтому так поступать не рекомендуется.