|
операционной системы. По умолчанию кли-ентские средства MySQL используют при
регистрации имена пользователей операционной системы. Для них, однако, не
требуется обязательного соответствия. В большинстве клиентских приложений MySQL
можно с помощью параметра -и подключиться к MySQL, используя любое имя. Точно
так же ваше имя как пользователя операционной системы не появится в таблице
user, если не будет специально включено в нее с присвоением прав.
Первый созданный нами пользователь, «bob», может подключаться к базе данных с
любого компьютера и выполнять команды SELECT, INSERT, UPDATE и DELETE. Второй
пользователь, «jane», может подключаться с «athens.imaginary.com», не имеет
пароля и может выполнять только SELECT. Третий пользователь - «nobody» - с
любой машины.'Этот пользователь вообще ничего не может делать. Последний
пользователь -«nobody» - с машины «athens.imaginary.com», он может выполнять
SELECT, INSERT, UPDATE и DELETE, как и пользователь «bob.»
Как MySQL производит сопоставление? Возможно, вы обратили внимание, что
некоторое имя может соответствовать на деле нескольким записям. Например,
«[email protected]» соответствует и «nobody@%», и «nobody@athens.
imaginary.com». Прежде чем осуществлять поиск в таблице user, MySQL сортирует
данные следующим образом:
1. Сначала ищется соответствие для узлов, не содержащих масок « % », при этом
пустое поле Host трактуется как «% ».
2. Для одного и того же узла сначала проверяется соответствие имен, не
содержащих масок. Пустое поле User трактуется как содержащее «%».
3. Первое найденное соответствие считается окончательным.
В предыдущем примере пользователь сначала будет сравниваться с «nobody» из
«athens.imagmary.com», поскольку «athens.imaginary.com» в порядке сортировки
стоит выше «% ». Поскольку имена компьютеров сортируются раньше имен
пользователей, значения привилегий для компьютера, с которого вы подключаетесь,
имеют приоритет перед любыми конкретными правами, которые у вас могут быть.
Например, если таблица user содержит записи:
HostUser%
athens .imaginary .comjaneи jane подключается с «athens.imaginary.com», то
MySQL будет использовать привилегии, данные «athens.imaginary.com».
Таблица db
Вы могли обратить внимание, что в таблице user не упоминаются конкретные базы
данных и таблицы. Таблица user управляет сервером в целом. Однако на сервере
обычно находится несколько баз данных, которые служат различным целям и,
соответственно, обслуживают разные группы пользователей. Права доступа к
отдельным базам данных хранятся в таблице db. Эта таблица имеет структуру,
представленную в таблице 4-2:
Таблица 4-2. Таблица db
ПолеТипNullКлючЗначение по умолчаниюПримеч.Hostchar(60)PRIDbchar(32)PRIUser
char(16)PRISelect privenum('N','Y')NInsert_privenum('N','Y')NUpdate_priv
enum('N','Y')NDelete privenum('N','Y')NCreate_privenum('N','Y')NDrop_priv
enum('N','Y')NReferen-enum('N','Y')Nces_privIndex_privenum('N','Y')NAlter_priv
enum('N','Y')NЭта таблица во многом похожа на таблицу user. Основное отличие в
том, что вместо колонки Password имеется колонка Db. Таблица управляет правами
пользователей в отношении определенных баз данных. Поскольку привилегии,
указанные в таблице user, относятся ко всему серверу в целом, права,
присвоенные пользователю в таблице user, перекрывают права, присвоенные тому же
пользователю в таблице db. Например, если пользователю в таблице user разрешают
доступ типа INSERT, это право действует в отношении всех баз данных, вне
зависимости от того, что указано в таблице db.
Наиболее эффективно создание в таблице user записей для всех пользователей, в
которых не даны никакие права. В этом случае пользователь может лишь
подключиться к серверу, не выполняя никаких действий. Исключение делается
только для пользователя, назначенного администратором сервера. Все остальные
должны получить права доступа через таблицу db. Каждый пользователь должен
присутствовать в таблице user, иначе он не сможет подключаться к базам данных.
Те же правила, которые действуют в отношении колонок User и Host в таблице user,
действуют и в таблице db, но с некоторой особенностью. Пустое поле Host
вынуждает MySQL найти запись, соответствующую имени узла пользователя, в
таблице host. Если такой записи не найдено, MySQL отказывает в доступе. Если
соответствие найдено, MySQL определяет права как пересечение прав, определяемых
таблицами host и db. Иными словами, в обеих записях разрешение должно иметь
значение «Y», иначе в доступе отказывается.
Таблица host
Таблица host служит особой цели. Ее структура показана в таблице 4-3:
Таблица 4-3. Таблица Host
ПолеТипNullКлючЗначение по умолчаниюПримеч.Hostchar(60)PRIDbchar(32)PRI
Select_privenum('N','Y')NInsert_privenum('N','Y')NUpdate_privenum('N','Y')N
Delete_privenum('N','Y')NCreate_privenum('N','Y')NDrop_privenum('N','Y')N
Grant_privenum('N','Y')NReferen-enum('NYY')Nces_privIndex_privenum('N','Y')N
Alter_privenum('N','Y')NТаблица host позволяет задать основные разрешения на
межкомпьютерном уровне. При проверке прав доступа MySQL ищет в таблице db
соответствие имени пользователя и его машине. Если он находит запись,
соответствующую имени пользователя, поле host которой пусто, MySQL обращается к
таблице host и использует пересечение обоих прав для определения окончательного
права доступа. Например, у вас может быть группа серверов, которые вы считаете
менее защищенными, чем остальная часть сети. Вы можете запретить для них все
права записи. Если «bob» заходит с одной из таких машин, и его запись в таблице
|
|