Замечено, что большинство пользователей уделяют основное внимание только базам данных и таблицам. Да, нельзя отрицать того, что это основная часть системы, но нельзя забывать, что кроме простого использования, есть еще и возможность управ­ления доступом, паролями, безопасностью. В принципе, это не очень важно для разра­ботчиков, но как только вы становитесь администратором, с этого момента вам предстоит заниматься установкой, следить за работой баз данных и обеспечивать безопасность их работы.
В данной главе рассматривается система управления доступом СУБД MySQL, осве­щается работа таблиц управления доступом MySQL. Таблицы управления доступом на­деляют администратора важнейшими полномочиями: только ему решать, кто, как и когда имеет право на доступ и что он может сделать. В этой главе обсуждаются аспекты управления файлами учета пользователей и паролями, изменения паролей (особенно пароля пользователя root) и восстановления утерянных паролей привилегированного пользователя.

Таблицы управления доступом
При инсталляции MySQL, автоматически создаются две базы данных: база данных test, своеобразная игровая площадка для начинающих пользователей и новичков, и база данных mysql , содержащая 5 таблиц разрешения.
Эти базы данных можно увидеть следующим образом.
Безопасность, управление доступом и привилегии
Безопасность, управление доступом и привилегии
Исключение составляет только таблица func (используется для функций пользователя), все остальные влияют на уровень доступа пользователя к базе данных и таблицам. Правила доступа могут быть установлены на основании имени пользователя, узла или запрашиваемой базы данных.
В последующих разделах все эти таблицы рассматриваются детально.

Таблица user

Самой важной среди этих 5 таблиц является таблица user. Ниже приведен перечень полей, которые она содержит.
Листинг 14.2.
CREATE TABLE 4user4 (
"Host" varchar(60) binary NOT NULL default '', "User" varchar(16) binary NOT NULL default '', "Password" varchar(41) 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', "Reload_priv" enum ('N', 'Y') NOT NULL default 'N', "Shutdown_priv" enum ('N', 'Y') NOT NULL default 'N', "Process_priv" enum ('N', 'Y') NOT NULL default 'N', "File_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', "Show_db_priv" enum ('N', 'Y') NOT NULL default 'N', "Super_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', "Execute_priv" enum ('N', 'Y') NOT NULL default 'N', "Repl_slave_priv" enum ('N', 'Y') NOT NULL default 'N', "Repl_client_priv" enum ('N', 'Y') NOT NULL default 'N', "ssl_type" enum (' ', 'ANY', 'X509', 'SPECIFIED') NOT NULL default
'N',
"ssl_cipher" blob NOT NULL, 
"x5 09_issuer" blob NOT NULL, "x509_subject" blob NOT NULL,
"max_questions" int(11) unsigned NOT NULL default '0', "max_updates" int(11) unsigned NOT NULL default '0', "max_connections" int(11) unsigned NOT NULL default '0', PRIMARY KEY ("Host", "User") )TYPE=MyISAM COMMENT='Users and global privileges'
Первые три поля (еще они называются полями диапазона) определяют пользователей, которые могут зайти на сервер базы данных, их пароли и узлы, через которые и про­исходит подключение. Система безопасности MySQL отслеживает как пользователя, так и узел, с которого он подключается.
Рассмотрим следующую выборку из этой таблицы.
Безопасность, управление доступом и привилегии
Что в имени твоем?
Следует различать пользователя MySQL и пользователя ОС UNIX или Windows. Пользователь MySQL может существовать только в контексте СУБД MySQL, и для него не нужны учетные записи или пользовательские каталоги в системе. Клиент MySQL, работающий с командной строкой, для подключения к серверу может по умолчанию в своей работе использовать текущего UNIX-пользователя. Однако такое поведение клиента можно изменить, указав имя пользователя клиента с помощью параметра --user.
Кроме того, при определении правил доступа можно использовать групповые симво­лы. Следующий пример демонстрирует открытие доступа пользователю john независимо от адреса узла, с которого будет осуществляться доступ.
Безопасность, управление доступом и привилегии
Символ % как раз является таким групповым символом, и в следующем примере мы увидим, как определить пользователя john, который подключаются с любого узла, при­надлежащего домену loudbeep.com.
Безопасность, управление доступом и привилегии
Когда имена, пароли и узлы пользователей заданы, следующим очень важным шагом является определение привилегий каждого пользователя. Всего насчитывается 21 полей привилегий). В таблице 14.1 показано, для чего предназначены эти поля.
Оставшиеся поля таблицы user связаны с SSL-шифрованием и наложением ограни­чений на использование ресурсов (см. раздел "Ограничение использования ресурсов").
Также важно знать, что привилегии, определенные для каждого пользователя в таблице user, имеют глобальное действие, т.к. они работают с любой базой данных, имеющейся в системе. Поэтому следующая запись означает, что пользователь joe может удалить записи в любой базе данных на сервере.
Безопасность, управление доступом и привилегии
Так что если у Joe будет очень плохое настроение, может случиться непоправимое! По­этому профессиональные администраторы рекомендуют для всех пользователей в данной таблице оставлять значение "N" (это значение присваивается по умолчанию) и с помощью таблиц host и db более целенаправленно управлять уровнем защиты вашей базы данных и узла (о таблицах host и db можно узнать в разделе "Таблицы Db и Host").
Совет
Не знаете, как создать пользователя и задать его пароль? Тогда перейдите к разделам "Как предоставить, отменить и просмотреть привилегии пользователя" и "Изменение пароля пользователя".
Безопасность, управление доступом и привилегии
Безопасность, управление доступом и привилегии
На заметку
Столбец All_priv в таблицах разрешения отсутствует. В этих примерах он используется в качестве своеобразного сокращения, подтверждающего тот факт, что аналогичное значение хранится во всех столбцах (*_priv).