Таблицы db и host используются совместно и управляют доступом к таблицам. Взгляните на поля таблицы db.
Листинг 14.9.
CREATE TABLE "db" (
"Host" char(60) binary NOT NULL default '', "Db" char(64) binary NOT NULL default '', "User" char(16) binary NOT NULL default '', "Select_priv" enum ('N', 'Y') NOT NULL default 'N', "Insert_priv" enum ('N', 'Y') NOT NULL default 'N', "Update_priv" enum ('N', 'Y') NOT NULL default 'N', "Delete_priv" enum ('N', 'Y') NOT NULL default 'N', "Create_priv" enum ('N', 'Y') NOT NULL default 'N', "Drop_priv" enum ('N', 'Y') NOT NULL default 'N', "Grant_priv" enum ('N', 'Y') NOT NULL default 'N', "References_priv" enum ('N', 'Y') NOT NULL default 'N', "Index_priv" enum ('N', 'Y') NOT NULL default 'N', "Alter_priv" enum ('N', 'Y') NOT NULL default 'N', "Create_tmp_table_priv" enum ('N', 'Y') NOT NULL default 'N', "Lock_tables_priv" enum ('N', 'Y') NOT NULL default 'N', PRIMARY KEY ("Host", "Db", "User") )TYPE=MyISAM COMMENT='Database privileges'
Первые три поля опять являются полями диапазона, которые подключают опреде­ленных пользователей и узлы к базам данных. Оставшиеся поля привилегий используются для определения типа операции, которую пользователь может произвести в данной базе данных (см. табл. 14.1 для получения более детальной информации относительно полей).
Приведенная ниже запись свидетельствует о том, что пользователь bill, подключаясь с узла cranberry.domain.com, может работать только с базой данных darkbeast.
Таблицы Db и Host
 Как видим, в поле Host таблицы db указано значение %, свидетельствующее о том, что перечень узлов, с которых можно получить доступ, определяется в третьей таблице - host. Ниже представлена структура этой таблицы. 
Листинг 14.12.
CREATE TABLE "host" (
"Host" char(60) binary NOT NULL default '', "Db" char(64) binary NOT NULL default '', "Select_priv" enum ('N', 'Y') NOT NULL default 'N', "Insert_priv" enum ('N', 'Y') NOT NULL default 'N', "Update_priv" enum ('N', 'Y') NOT NULL default 'N', "Delete_priv" enum ('N', 'Y') NOT NULL default 'N', "Create_priv" enum ('N', 'Y') NOT NULL default 'N', "Drop_priv" enum ('N', 'Y') NOT NULL default 'N', "Grant_priv" enum ('N', 'Y') NOT NULL default 'N', "References_priv" enum ('N', 'Y') NOT NULL default 'N', "Index_priv" enum ('N', 'Y') NOT NULL default 'N', "Alter_priv" enum ('N', 'Y') NOT NULL default 'N', "Create_tmp_table_priv" enum ('N', 'Y') NOT NULL default 'N', "Lock_tables_priv" enum ('N', 'Y') NOT NULL default 'N', PRIMARY KEY ("Host", "Db") ) TYPE=MyISAM COMMENT='Host privileges; Merged with database privileges'
Данное разделение между записями об узле и записями о базе данных, в действитель­ности намного полезнее, чем кажется на первый взгляд. При отсутствии таблицы host и необходимости предоставить пользователю определенные права, вам потребуется создать отдельную запись для каждого узла в таблице db и соответственно обозначить их привилегии. Но поскольку таблица host присутствует, можно поместить в таблицу имена различных узлов, но с простым доступом (с помощью пустого поля Host) в таблице db, после чего назначить привилегии для каждого узла отдельно. Когда один из перечисленных узлов попытается получить доступ, MySQL предоставит привилегии исходя из того, что было прописано в таблице host.
Ниже приведен соответствующий пример (первый фрагмент взят из таблицы db, второй - это соответствующая запись в таблице host).
Таблицы Db и Host
В данном случае пользователь jim сможет получить доступ к серверу MySQL с любого из этих узлов, но, как видно из таблицы, предоставляемые ему привилегии определяются именно узлом, с которого он производит подключение.
Таблицы tablespriv и columns_priv
В последних версиях MySQL к вышеуказанным трем таблицам добавлены еще две - это таблицы tables_priv и columns_priv. Это дает возможность администратору 
ужесточить контроль доступа к определенным таблицам в базе данных и, более того, к определенным столбцам таблиц.
Ниже представлена структура таблицы tables_priv.
Листинг 14.14.
CREATE TABLE "tables_priv" (
"Host" char(60) binary NOT NULL default '', "Db" char(64) binary NOT NULL default '', "User" char(16) binary NOT NULL default '', "Table_name" char(64) binary NOT NULL default '', "Grantor" char(77) binary NOT NULL default '', "Timestamp" timestamp(14) NOT NULL,
"Table_priv" set("Select", "Insert", "Update", "Delete", "Create", "Drop ", "Grant", "References", "Index", "Alter_priv") NOT NULL default '',
"Column_priv" set("Select", "Insert", "Update", "References") NOT NULL default '',
PRIMARY KEY ("Host", "Db", "User", "Table_name")
KEY "Grantor" ("Grantor") ) TYPE=MyISAM COMMENT='Table privileges'
Следующая запись ограничит выполнение операции SELECT для пользователя john таблицей cream, а все попытки обратиться с запросом SELECT к другим таблицам за­вершатся ошибкой.
Таблицы Db и Host
Для более строгого контроля на низком уровне, MySQL предлагает таблицы col-umns_priv, которые дают возможность установить привилегии доступа к отдельным столбцам в таблице. Ниже представлена ее структура.
Листинг 14.17.
CREATE TABLE "columns_priv" (
"Host" char(60) binary NOT NULL default '', "Db" char(64) binary NOT NULL default '', "User" char(16) binary NOT NULL default '', "Table_name" char(64) binary NOT NULL default '', "Column_name" char(64) binary NOT NULL default '', "Timestamp" timestamp(14) NOT NULL,
"Column_priv" set("Select", "Insert", "Update", "References") NOT NULL default '',
PRIMARY KEY ("Host", "Db", "User", "Table_name", "Column_name") ) TYPE=MyISAM COMMENT='Column privileges'
Нижеприведенные правила говорят о том, что пользователи, зарегистрированные в системе как hr_users, могут просматривать только идентификатор служащего (поле id), имя служащего (поле name) и отдел (поле dept) в таблице db1.employees. В то время как специалисты из отдела кадров (которые зарегистрированы в системе как поль­зователи hr_supervisors), могут просматривать информацию о служащих и обновлять ее (имя и отдел).
Таблицы Db и Host