Управление доступом к базам данных MySQL для клиентов, подключившихся к серверу через сеть, осуществляется с помощью содержимого таблиц разрешений. Эти таблицы входят в состав базы данных mysql и инициализируются в процессе инсталляции MySQL на компьютере. В табл. 1 и 2 представлено краткое описание структур пяти таблиц разрешений:
user, db, host, tables_priv И columns_priv.
Таблица 1. Структура таблиц разрешений user, db и host
Столбцы области доступа
user
db
host
host
host
host
user
db
db
password
user
Столбцы привилегий базы данных / таблицы
Alter priv
Alter priv
Alter priv
Create priv
Create priv
Create priv
Delete priv
Delete priv
Delete priv
Drop priv
Drop priv
Drop priv
Index priv
Index priv
Index priv
Insert priv
Insert priv
Insert priv
References priv
References priv
References priv
Select priv
Select priv
Select priv
Update priv
Update priv
Update priv
Столбцы административных привилегий
File priv
Grant priv
Grant priv
Grant priv
Process priv
Reload priv
Shutdown priv
Таблица 2. Структура таблиц привилегий tables privt и columns privt
Столбцы области доступа
Tables priv
columns priv
Host
Host
Db
Db
User
User
Table name
Table name
Column name
Столбец привилегий
Table priv
Column priv
Таблицы разрешений содержат следующую информацию.
· user. Таблица user содержит список всех пользователей, которые могут подключаться к серверу, а также их пароли и все глобальные привилегии, если таковые применяются. Все указанные в этой таблице привилегии являются глобальными и применимы ко всем базам данных. Так, например, если активизировать в этой таблице привилегию delete, соответствующий пользователь сможет удалить записи из любой таблицы. Следовательно, необходимо тщательно все обдумать, прежде чем присваивать такую привилегию.
· db. Таблица db содержит список всех баз данных и пользователей, обладающих полномочиями на доступ к ним. Определенные в этой таблице привилегии применимы ко всем таблицам соответствующей базы данных.
· host. Таблица host применяется вместе с таблицей db и определяет привилегии доступа к базам данных определенного компьютера. Уровень этого контроля более высокий, чем при использовании одной лишь таблицы db. Операторы GRANT и REVOKE не могут изменять содержимое этой таблицы, поэтому на некоторых компьютерах она вообще не используется.
· tables_priv. Таблица tables_priv определяет привилегии доступа к таблицам. Эти привилегии применимы ко всем столбцам определенной таблицы.
· columns_priv. Таблица columns_priv определяет привилегии доступа к столбцам. Эти привилегии применимы к отдельным столбцам соответствующей таблицы.
В расположенном далее пункте "Установка пользователей без помощи оператора GRANT" рассказывается, как оператор grant изменяет информацию этих таблиц и как с помощью непосредственного редактирования аналогичных результатов может достичь администратор.
Таблицы tablespriv и columspriv впервые появились в MySQL версии 3.22.11 (вместе с оператором grant). Поэтому администраторы старых версий MySQL могут найти в базе данных mysql своего сервера только таблицы user, db и host. Если же эти таблицы не появляются даже после обновления до версии 3.22.11 или более поздней, запустите для их создания сценарий mysql_fix_privileges_tables.
Отсутствие таблицы rowpriv объясняется невозможностью предоставления в MySQL привилегий на уровне строк. Нельзя, например, предоставить пользователю доступ только к отдельным строкам таблицы. Обеспечить подобную возможность реально можно только посредством написания соответствующей программы. Для блокировки данных на уровне записей можно использовать функцию get_lock().
Таблицы разрешений содержат столбцы двух видов: столбцы области, определяющие область применения записи, и столбцы привилегий, определяющие присваиваемые привилегии. (Некоторые таблицы разрешений включают и другого рода столбцы, однако здесь они не рассматриваются.)