Мы уже знакомы с описанием процесса определения пользователей и предоставления им полнономочий. Для предоставления полномочий служит команда GRANT. Если вы собираетесь выполнять действия по администрированию базы данных MySQL, полезно знать, что именно выполняет эта команда и как из нее извлечь максимальную пользу.
Выполнение оператора GRANT оказывает влияние на таблицы с специальной базе данных с именем mysql. Информация о полнономочиях хранится в пять таблицах этой базы данных. Учитывая этот факт, при выдаче полномочий для работы с базами данных следует с осторожностью предоставлять доступ к базе данных mysql.
Команда GRANT стала доступна, начиная с версии MySQL 3.22.11.
Просмотреть содержимое базы данных mysql можно, входя в сиситему в качестве администратора и набрав следующую команду:
use mysql;
После этого таблицы в этой базе данных можно просматривать как обычно, с помощью команды:
show tables;
Результат выполнения команды будет выглядеть побобно показанному ниже:
Каждая из таблиц этой базы данных содержит системную информацию. Пять из них —user, host, tables_priv и columns_priv — хранят информацию о полномочиях. Иногда их называют таблицами полномочий. Эти таблицы различаются своими специфическими функциями, но все они служат одной общей цели определения того, какие действия разрешено выполнять пользователям, а какие запрещено. Каждая из них содержит два типа полей: поля области действия, определяющие пользователя, хост и часть базы данных, к которым применимы данные полномочия, и поля полномочий, которые определяют действия, разрешенные данному пользователю в данной области действий.
Таблицы user и host служат для определения того, может ли пользователь вообще подключиться к серверу MySQL, а также того, обладает ли он полномочиями администратора. Таблицы ви и host определяют базы данных, к которым пользователь может получить доступ. Таблица tables_priv определяет доступные для пользователя таблицы внутри базы данных, а таблица columns_priv —доступные таблицы внутри таблиц.
Таблица user содержит сведения о глобальных полномочиях пользователей. Она определяет, может ли пользователь вообще подключаться к серверу the MySQL, и то, предоставлены ли ему какие-либо полномочия глобального уровня — то есть полномочия, применяемые к каждой базе данных в системе.
Структуру этой таблицы можно посмотреть с помощью оператора describe user. Схема таблицы user представлена в таблице.
Каждая строка в таблице соответствует набору полномочий, предоставленных пользователю User, входящему в систему с хоста Host с паролем Password. В данной таблице эти поля предствавляют собой поля области действия, поскольку они описывают область действия других полей, называющихся полями полномочий.
Таблица. Схема таблицы user базы данных mysql
Полномочия, перечисленные в этой таблице (и последующих), соответствуют полномочиям, выданным с помощью команды GRANT. Например, Select_priv соответствует полномочиям на выполнение команды SELECT.
Если пользователь располагает конкретными полномочиями, значение в соответствующем столбце будет равно Y. И наоборот, если данные полномочия не предоставлены, значение будет равно N.
Все полномочия перечисленные в таблице user —глобальные, то есть они применяются ко всем базам данных в системе (включая базу данных mysql). Следовательно, для администраторов некоторые значения будут установлены равными Y, но для большинства пользователей все значения должны быть равними N. Обычные пользователи должны располагать правами доступа к соответствующим базам данных, а не ко всем таблицам.
Информация о большинстве полномочий рядовых пользователей хранится в таблицах db и host.
Таблица db определяет, к каким базам данных могут получить доступ те или иные пользователи из тех или иных хостов. Перечисленные в этой таблице полномочия применимы к любой базе данных, указанной в конкретной строке.
Таблица host дополняет таблицы user и db. Если пользователь может подключаться к базе данных нескольких хостов, для этого пользователя в таблице user или db какой-либо хост не указывается. Вместо этого пользователь будет иметь набор записей в таблице host? каждая из которых будет определять полномочия для каждой комбинации пользователь-хост.
Схемы этих двух таблиц приведены в талицах.
Таблица. Схема таблицы db базы данных mysql
Таблица. Схема таблицы host базы данных mysql
Таблицы tables_priv и columns_priv используются для хранения полномочий уровней, соответственно, таблицы и столбца. Они работают подобно таблице db за исключением того, что предоставляют информацию о полномочиях по отношению к таблицам внутри конкретной базы данных и по отношению к столбцам внутри конкретной таблицы.
Структура этих таблиц несколько отличается от структуры таблиц user, db, host. Схемы таблиц смотрите ниже.
Таблица. Схема таблицы tables_priv базы данных mysql
Таблица. Схема таблицы column_priv базы данных mysql
Столбец Granton таблицы tables_priv хранит имя пользователя, который предоставил полномочия данному пользователю. В столбце Timestamp обеих этих таблиц содержится значение даты и времени выдачи полномочий.
Используя таблицы полномочий, Mysql определяет действия, которые разрешено выполнять пользователю, в ходе двуэтапного процесса:
Сервер MySQL автоматически считывает таблицы предоставления полномочий во время своего запуска и при выполнении операторов GRANT и REVOKE. Однако, зная, где и как храняться эти полномочия, их можно изменить вручную. При обновлении полномочий вручную сервер MySQL не замечает их изменения.
Об изменениях серверу потребуется сообщить, и это можно выполнить тремя способами. Можно ввести команду:
flush privileges;
в командной строке MySQL (чтобы эту команду можно было использовать, необходимо войти в систему в качестве администратора). Этот способ обновления полномочий используется наиболее часто.
Можно также выполнить любую из команд:
mysqladmin flush_pivileges
или
mysqladmin reload
непосредственно в операционной системе.
После выполнения этих действий полномочия глобального уровня будут проверены при следующем подключении пользователя к серверу, полномочия уровня базы данных будут проверены при следующем выполнении оператора use, а полномочия уровня таблицы и столбца — при следующем запросе со стороны пользователя.