Безопасность
Столбцы привилегий таблицы разрешений
Таблицы разрешений включают также столбцы привилегий. Именно они определяют, какие привилегии предоставляются описанному в столбцах области пользователю. Поддерживаемые сервером MySQL привилегии приведены в списке, представленном ниже. В этом списке указываются названия привилегий, используемые в строке оператора GRANT. В большинстве случаев названия столбцов привилегий таблиц user, db и host сходны (по очевидным причинам) с названиями привилегий. Столбец Select_priv, например, соответствует привилегии SELECT.
Привилегии баз данных и таблиц
Для работы с базами данных и таблицами применяются следующие привилегии.
-
ALTER. Позволяет использовать оператор alter table. Вообще, ALTER — это привилегия первого уровня. Для обработки таблиц необходимо предоставить дополнительные привилегии в зависимости от того, какие операции необходимо выполнять.
-
CREATE. Позволяет создавать базы данных и таблицы, но не индексы.
-
DELETE. Позволяет удалять записи из таблиц.
-
DROP. Позволяет удалять таблицы и базы данных, но не индексы.
-
INDEX. Позволяет создавать и удалять индексы в таблице.
-
INSERT. Позволяет вставлять новые записи в таблицы.
-
REFERENCES. В настоящее время не используется.
-
SELECT. Позволяет извлекать данные из таблиц с помощью операторов select. Эту привилегию необязательно присваивать для исполнения операторов select, не связанных с таблицами, например, SELECT NOW() ИЛИ SELECT 4/2
-
UPDATE. Позволяет изменять записи таблицы.
Административные привилегии
Следующие привилегии позволяют выполнять административные операции, управляющие функционированием сервера или дающие возможность присваивать привилегии другим пользователям.
-
FILE. Позволяет давать серверу задание на считывание или запись файлов. Эту привилегию рекомендуется присваивать лишь в особых случаях. Поэтому сервер также предпринимает определенные меры предосторожности, позволяющие установить границы применения этой привилегии. Так, пользователи могут считывать файлы, которые доступны для чтения во всей системе. Невозможно записать файл, который уже существует на диске. Это позволяет избегать путаницы с критически важными файлами сервера, например /etc/passwd, или файлами чужих баз данных. Отсутствие подобного ограничения может привести к полной замене содержимого таблиц разрешений базы данных mysql.
Присваивая привилегию file, следует обязательно убедиться, что запущенный сервер не обладает правами UNIX-пользователя root, который может создавать новые файлы в любом каталоге файловой системы. При запуске сервера под управлением учетной записи пользователя без особых привилегий создавать файлы можно будет только в доступных для такого пользователя каталогах.
-
GRANT. Позволяет предоставить другому пользователю привилегии, имеющиеся у администратора, включая саму возможность присвоения привилегий.
-
PROCESS. Позволяет просматривать информацию о выполняемых внутри сервера нитях (процессах) с помощью оператора SHOW
-
PROCESSLIST или команды mysqladmin processlist. Эта же привилегия позволяет завершить выполнение процесса с помощью оператора KILL или команды mysqladmin kill.
Наличие этой привилегии позволяет пользователям просматривать и завершать выполнение любых процессов, включая свои собственные.
-
reload. Позволяет выполнять множество операций администрирования сервера, например запускать SQL-оператор FLUSH или выполнять такие mysqladmin -команды, как reload, refresh, flush-hosts, flush-logs, flush-privileges и flush-tables. Даже несмотря на административные функции, эта привилегия не является опасной.
-
shutdown. Позволяет завершать работу сервера с помощью команды mysqladmin shutdown.
В таблицах user, db и host каждая привилегия определена в отдельном столбце. Все эти столбцы описаны типом ENUMC"N", "Y", и по умолчанию каждая привилегия имеет значение "n" (отключена). Привилегии таблиц tables_priv и column_priv представлены с помощью типа set, благодаря чему привилегии могут определяться различными комбинациями в одном столбце. Более эффективное представление привилегий в последних двух таблицах объясняется тем, что они появились гораздо позже, чем первые три. (Вполне возможно, что в будущем таблицы user, db и host будут реорганизованы и привилегии в них будут задаваться с помощью типа set.)
Например, столбец Table_priv таблицы tables_priv определяется следующим образом:
SET('Select','Insert','Update','Delete','Create', 'Drop','Grant', 'Reference','Index','Alter')
Столбец Column_priv таблицы column_priv определяется так:
SET ('Select' , 'Insert','Update','Reference')
Привилегий столбцов гораздо меньше, чем привилегий таблиц, поскольку на уровне столбца можно выполнить гораздо меньше операций. Так, например, можно создать новую таблицу, но невозможно создать отдельный столбец.
Таблица user, помимо всего прочего, содержит несколько привилегий, которые отсутствуют во всех других таблицах разрешений: File priv, Process priv, Reload_priv и Shutdown_priv. Эти привилегии применяются к выполняемым сервером операциям, не связанным с отдельной базой данных или таблицей. Ведь при необходимости завершения работы сервера вовсе не обязательно проверять, над какой базой данных в настоящее время ведется работа.
Как сервер управляет доступом клиентов
Сервер MySQL выполняет контроль за доступом клиентов в два этапа. Первый этап происходит при попытке подключения, когда сервер "заглядывает" в таблицу user и ищет все соответствующие этому имени записи, например, название компьютера, с которого можно подключаться, и пароль. Если ни одна запись с аналогичными значениями не найдена, пользователю отказывается в подключении. Если же вся предоставленная пользователем информация соответствует информации, записанной в таблице, соединение устанавливается и сервер переходит ко второму этапу. В процессе этого этапа каждый раз при получении от пользователя запроса сервер обращается к таблицам разрешений и проверяет, обладает ли пользователь достаточными привилегиями для выполнения того или иного запроса. Второй этап продолжается до завершения сеанса работы с сервером.
Далее рассмотрим описание правил, используемых сервером MySQL для проверки соответствия записей таблиц разрешений с входящими запросами клиента. Описываются типы значений, применяемые в столбцах области таблиц разрешений, способы комбинирования информации; рассказывается о привилегиях в таблицах разрешений и порядке проверки записей таблицы.