Мы уже знакомы с описанием процесса определения пользователей и предоставления им полнономочий. Для предоставления полномочий служит команда 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
Таблица 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.
Таблица db определяет, к каким базам данных могут получить доступ те или иные пользователи из тех или иных хостов. Перечисленные в этой таблице полномочия применимы к любой базе данных, указанной в конкретной строке.
Таблица host дополняет таблицы user и db. Если пользователь может подключаться к базе данных нескольких хостов, для этого пользователя в таблице user или db какой-либо хост не указывается. Вместо этого пользователь будет иметь набор записей в таблице host? каждая из которых будет определять полномочия для каждой комбинации пользователь-хост.
Схемы этих двух таблиц приведены в талицах.
Таблица. Схема таблицы db базы данных mysql
Таблица. Схема таблицы host базы данных mysql
Таблицы tables_priv и columns_priv
Таблицы tables_priv и columns_priv используются для хранения полномочий уровней, соответственно, таблицы и столбца. Они работают подобно таблице db за исключением того, что предоставляют информацию о полномочиях по отношению к таблицам внутри конкретной базы данных и по отношению к столбцам внутри конкретной таблицы.
Структура этих таблиц несколько отличается от структуры таблиц user, db, host. Схемы таблиц смотрите ниже.
Таблица. Схема таблицы tables_priv базы данных mysql
Таблица. Схема таблицы column_priv базы данных mysql
Столбец Granton таблицы tables_priv хранит имя пользователя, который предоставил полномочия данному пользователю. В столбце Timestamp обеих этих таблиц содержится значение даты и времени выдачи полномочий.
Управление доступом. Использование таблиц полномочий в среде Mysql
Используя таблицы полномочий, Mysql определяет действия, которые разрешено выполнять пользователю, в ходе двуэтапного процесса:
- Проверка права на подключение. На этом этапе на основе информации, полученной из таблицы user, MySQL проверяет, имет ли пользователь право на подключение. Эта аутентификация выполняется на основе имени пользователя, имени хоста и пароля. Если поле имени пользователя пустое, оно состветствует всем пользователям. Имена хостов можно указывать с использованием группового символа (%). Этот символ может использоваться в качестве полного значения поля (то есть символ % соответствует всем хостам) или в части имени хоста (например, %/tandledweb.com.au ). Если поле пароля пустое, пароль для подключения не требуется. Однако система будет защищена в большей степени, если избегать применения пустых полей для имен пользователей, групповых символов в именах хостов и пользователей без паролей. Если поле имени хоста пустое, для поиска соответствующих записей user и host MySQL обращается к таблице host.
- Проверка права на выполнение запросов. После того как соединение с сервером установлено, прикаждом вводе запроса MySQL проверяет наличие соответствующего уровня полномочий для выполнения этого запроса. Система начинает проверку с глобальных полномочий (в таблице user) и, если этих полномочий недостаточно, проверяет таблицы db и host/ Если и этих полномочий недостаточно, MySQL проверяет таблицу tables_priv и, наконец, ели этого окажется мало — таблицу columns_priv.
Обновление полномочий. Когда полномочия вступают в силу
Сервер MySQL автоматически считывает таблицы предоставления полномочий во время своего запуска и при выполнении операторов GRANT и REVOKE. Однако, зная, где и как храняться эти полномочия, их можно изменить вручную. При обновлении полномочий вручную сервер MySQL не замечает их изменения.
Об изменениях серверу потребуется сообщить, и это можно выполнить тремя способами. Можно ввести команду:
flush privileges;
в командной строке MySQL (чтобы эту команду можно было использовать, необходимо войти в систему в качестве администратора). Этот способ обновления полномочий используется наиболее часто.
Можно также выполнить любую из команд:
mysqladmin flush_pivileges
или
mysqladmin reload
непосредственно в операционной системе.
После выполнения этих действий полномочия глобального уровня будут проверены при следующем подключении пользователя к серверу, полномочия уровня базы данных будут проверены при следующем выполнении оператора use, а полномочия уровня таблицы и столбца — при следующем запросе со стороны пользователя.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться