Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MySQL. Библиотека профессионала - Аткинсон Л

..pdf
Скачиваний:
166
Добавлен:
24.05.2014
Размер:
10.41 Mб
Скачать

482 Глава 26. Оптимизация

возможности

Стараться использовать меньше памя ти на этапе компиляции

Выдавать комментарии о среде компи ляции

Создавать только клиентскую программу

He создавать документацию

He создавать набор тестов производи тельности

Использовать системную версию биб лиотеки а не ту, что входит в дистрибутив

Сделать указанный набор символов основным (поумолчанию —

Использовать дополнительные набо ры символов помимо основного; аргу мент список может содержать перечень наборов символов, ключевые слова complex (включать все наборы симво лов, которые нельзя загрузить дина мически) или all (включать всенабо ры символов)

Использовать библиотеку Berkeley DB, расположеннуювуказанномкаталоге

Искать файлы заголовков Berkeley DB

каталоге

Искать библиотечные файлы Berkeley

DB в каталоге

Использовать библиотеку

Использовать библиотеку Gemini, рас положеннуювуказанномкаталоге

Когда сценарий configure окончит запустите утилиту make, чтобы создать исполняемый файл. После этого необходимо выполнить команду make которая поместит созданные файлы в соответствующие каталоги. Подроб нее об этом рассказывалось в главе 2, "Инсталляция MySQL".

БЕЗОПАСНОСТЬ

В этой главе.

Схемапривилегий Заданиепривилегий Обеспечение безопасности

главе рассказывается о том, как программа MySQL управляет привилегия ми и как можно обеспечить безопасность сервера баз данных. В MySQL приме няются списки управления доступом, традиционные для многих систем. На сервере хранятся таблицы пользовательских привилегий. Привилегии могут отно

ситься к столбцам, таблицам, базам данных или быть глобальными.

Программа MySQL выполняется в виде системного сервиса или демона, поэтому нужно учитывать средства предоставляемые операционной системой или сетевым программным обеспечением. Повысить безопасность сервера можно, ограничив к нему доступ посредством сетевого фильтра Если в базе данных хранится особо важная информация, рассмотрите возможность найма про фессионального консультанта по вопросам безопасности.

Схема привилегий

В списке управления доступом (Access Control List, ACL) указывается, какие инструк ции разрешено выполнять тем или иным пользователям. Такой список можно связать с пользователем, узлом, базой данных, таблицей или столбцом. Программа MySQL сверя ет каждое обращение к базе данных с имеющимися списками управления доступом и определяет, есть ли у пользователя право выполнить запрашиваемое действие.

Пользователи идентифицируют себя по имени, паролю и адресу узла. Пользова тельские имена и пароли MySQL не связаны напрямую с именами и паролями опера ционной системы. Просто большинство клиентов MySQL по умолчанию берет имя пользователя, которое было указано при регистрации в системе. Это довольно удоб но, хотя и не является обязательным правилом.

Пользовательские имена и пароли могут быть длиной до 16 символов. Пароль раз решается оставлять пустым. Это самый низкий уровень безопасности. Он допустим только в том когда доступ ограничивается по каким то другим критериям, на пример адресу узла.

Глава 27. Безопасность

Перечень привилегий хранится в базе данных Сценарий который запускается в ходе инсталляции программы, создает в этой базе данных пять лиц с описаниями привилегий (табл.

Таблица

Содержимое

 

Привилегии отдельных столбцов

db

Привилегии всей базы данных

host

Привилегии всех пользователей того или иного узла

 

Привилегии отдельных таблиц

user

Глобальные привилегии

Втаблице описываются глобальные права доступа и хранятся пользователь ские пароли. Алгоритм шифрования паролей отличается от того, который применя ется операционной системой. Пароль можно создать с помощью функции PASSWORD (см. главу 12, "Встроенные функции") или путем прямого изменения таблицы user, но удобнее всего это делать с помощью инструкции GRANT.

При попытке подключения к серверу программа MySQL обращается к таблице user и проверяет, имеет ли пользователь право на подключение. Имя, пароль и адрес узла пользователя должны соответствовать как минимум одной записи таблицы. Если этого не происходит, программа отказывает пользователю в запросе. Но даже когда подключение легитимно, пользователю может быть разрешено выполнять лишь ог раниченный набор SQL инструкций. Права доступа к данным контролируются ос тальными четырьмя таблицами базы mysql. Следует, правда, отметить, что любому зарегистрированному пользователю разрешено вводить инструкции SELECT с лите ралами в списке возвращаемыхстолбцов, например SELECT NOW

Влистинге показаны определения всех пяти таблиц привилегий.

CREATE TABLE

 

Host

BINARY NOT NULL DEFAULT

Db

BINARY NOT NULL DEFAULT

User

BINARY NOT NULL DEFAULT

Table_name

BINARY NOT NULL DEFAULT

 

BINARY NOT NULL DEFAULT

 

NOT NULL,

NOT NULL DEFAULT

PRIMARY KEY

(Host, Db, User,

CREATE TABLE db

Host BINARY NOT NULL

Db BINARY NOT NULL DEFAULT

User

BINARY NOT NULL DEFAULT

Select_priv

NOT NULL DEFAULT

 

NOT NULL DEFAULT

Update_priv

NOT NULL DEFAULT

 

NOT NULL DEFAULT

Create_priv

NOT NULL DEFAULT

Drop_priv

 

NOT NULL DEFAULT

Grant_priv

 

NOT NULL DEFAULT

References_priv ENUM('N1,

NOT NULL DEFAULT

Index_priv

 

NOT NULL DEFAULT

PRIMARY KEY

(Host,

NOT NULL DEFAULT

 

KEY User (User)

 

TYPE=MyISAM

 

 

CREATE TABLE host

 

Host

BINARY NOT NULL DEFAULT

Db

BINARY NOT NULL DEFAULT

Select_priv

 

NOT NULL DEFAULT

Insert_priv

 

NOT NULL DEFAULT

 

 

NOT NULL DEFAULT

Delete_priv

 

NOT NULL DEFAULT

 

 

NOT NULL DEFAULT

Drop_priv

 

NOT NULL DEFAULT

Grant_priv

 

NOT NULL DEFAULT

References_priv

NOT NULL DEFAULT

Index_priv

 

NOT NULL DEFAULT

Alter_priv

 

NOT NULL DEFAULT

PRIMARY KEY

(Host, Db)

 

TYPE=MyISAM

COMMENT='Host privileges; Merged with database privileges';

CREATE TABLE tables_priv

Host

BINARY NOT NULL DEFAULT

Db

BINARY NOT NULL DEFAULT

User

BINARY NOT NULL DEFAULT

 

BINARY NOT NULL DEFAULT

Grantor

NOT NULL DEFAULT

Table_priv

NOT NULL,

 

NOT NULL DEFAULT

NOT NULL DEFAULT

PRIMARY KEY (Host, Db, User,

KEY Grantor (Grantor)

CREATE TABLE user

 

 

Host

BINARY NOT NULL

DEFAULT

User

BINARY NOT NULL

DEFAULT

488 Глава 27. Безопасность

Password BINARY NOT NULL DEFAULT

Select_priv NOT NULL DEFAULT

Insert_priv NOT NULL DEFAULT

Update_priv ENUM('N', NOT NULL DEFAULT

Delete_priv NOT NULL DEFAULT

Create_priv NOT NULL DEFAULT

Drop_priv ENUM('N', NOT NULL DEFAULT

NOT NULL DEFAULT

ENUM('N', NOT NULL DEFAULT

Process_priv ENUM('N', NOT NULL DEFAULT

File_priv ENUM('N', NOT NULL DEFAULT

Grant_priv ENUM('N', NOT NULL DEFAULT

References_priv ENUM('N', NOT NULL DEFAULT

Index_priv ENUM('N', NOT NULL DEFAULT

Alter_priv ENUM('N', NOT NULL DEFAULT

PRIMARY KEY (Host, User)

and global

За каждым пользователем каждого узла в таблице user закреплен свой набор гий, заданных в виде перечислений со значениями В столбце Host содержится IP адрес либо доменное имя Разрешается использовать метасимволы % и для задания диапазона адресов. Например, выражение % com

Схема привилегий 489

именем пользователя Поскольку подобный выбор не всегда очевиден, лучше избегать пустых имен пользователей.

Таблицы и host совместноконтролируют доступ к базам данных. Подобно лице в таблице db не допускаются имена пользователей с метасимволами. При выполнении операций сравнения программа MySQL сортирует записи этой таблицы в таком порядке: имя узла, имябазы данных, имя пользователя. Другими словами, сначала выбирается наиболее точное имя узла, наиболее точное имя базы данных, а наиболее точное имя пользователя. Записи таблицы host сортиру ются сначала поимени потом — по имени базы данных.

Таблицы и tables_priv допускают наличие метасимволов в це Host, но не вдругих столбцах. Поэтому, чтобы предоставить пользователю права доступа трем столбцам таблицы, нужно задать три записи в таблице

В табл. 27.2 перечислены столбцы привилегий, встречающиеся в таблицах. Смысл каждого из них определяется таблицей, в которой он присутствует. Запись таблицы db применима ко всем таблицам базы данных. Привилегии, заданные в таблице user, являются глобальными. Есть привилегии, которые определены только на глобальном уровне. Например, право перезагрузки позволяет пользователю очищать кэш буферы, совместно используемые всеми соединениями и базами данных.

 

Описание

 

 

Пользователь может вводить инструкцию ALTER TABLE

Create_priv

Пользователь может создавать таблицы и базы данных

Delete_priv

Пользователь может вводить инс трукцию DELETE

 

Пользователь может удалять таблицы и базы данных

 

Пользователь может обращаться к файлам локальной файло

 

вой системы

 

Grant_priv

Пользователь может передавать свои привилегии другим

 

пользователям

\

 

 

 

Пользователь может добавлять или удалять индексы

Insert_priv

Пользователь может вводить инструкцию INSERT

Process_priv

Пользователь может просматривать список соединений и

 

удалять соединения

 

Reload_priv

Пользователь может очищать буферы

 

Соответствующая привилегия еще не реализована

Select_priv

Пользователь может создавать запросы к таблицам

 

(инструкция SELECT)

 

 

Пользователь может останавливать сервер

Update_priv

Пользователь может вводить инструкцию UPDATE

490 Глава 27. Безопасность

Названия привилегий в большинстве своем соответствуют названиям инструкций поэтому легко какие права получают пользовател и благодаря той или иной привилегии. Привилегия Alter позволяет пользователю менять определения таблиц. Привилегия Create дает возможность, в зависимости от контекста, создавать таблицы или базы данных. Привилегия Delete разрешает удалять записи таблиц, а привилегия сами таблицы или базы данных. Привилегия Index позволяет создавать и уда лять индексы, привилегия Insert — вставлять записи в таблицы, а привилегии Select и Update — выполнять инструкции SELECT и UPDATE соответственно.

Привилегия разрешает пользователям выполнять инструкцию LOAD DATA INFILE, а также инструкцию SELECT с предложением INTO OUTFILE. Она определя ет лишь возможность чтения и записи файлов на сервере. Естественно, помимо этого пользователь должен иметь право чтения и записи самой таблицы. Файловые опера ции осуществляются от имени пользователя, запустившего демон Операци онная система может налагать на него свои ограничения, чтобы демон не повредил важные системные файлы.

Привилегия Grant позволяетпользователю вызывать инс трукцию GRANT для пе редачи своих привилегий другим пользователям. В инструкции GRANT разрешается указывать только те привилегии, которыми владеет текущий пользователь. Напри мер, если пользователь имеет только право создавать таблицы, то он не сможет вы полнить инструкцию GRANT RELOAD.

Привилегия Process дает пользователю возможность просматривать список единений с помощью инструкции SHOW PROCESSLIST и удалять любое соединение при помощи инструкции KILL. Подобной привилегией владеют только администра торы, имеющие доступ к утилите

Привилегия Reload позволяет пользователю вводить любую из инструкций FLUSH, описанных в главе 13, "Инструкции SQL". Обычно кэш буферы не требуют очистки, за исключением ряда случаев. При непосредственном редактировании таб личных файлов необходимо очистить табличный буфер. Если таблицы привилегий меняются в обход инструкций GRANT и REVOKE, то нужно очистить буфер привиле гий. Рядовым пользователямданная привилегия не нужна.

Привилегия Shutdown разрешает пользователю завершать работу демона mysqld. Привилегия на запуск сервера не существует, ведь если нет серверного процесса, то и некому проверять привилегию! Для перезапуска сервера необходим пользователь, обладающий соответствующими правами на уровне операционной системы. Напри мер, в Linux пользовательroot может вызвать сценарий e_mysqld.

Программа MySQL проверяет привилегии для каждой инструкции, вводимой пользователем. Процесс проверки таблиц проиллюстрирован на рис. Как только программа находит нужную привилегию, она прекращает дальнейший поиск. В пер вую очередь просматривается таблица user. Обычно у рядовых пользователей нет глобальных привилегий, поэтому программа переходит к таблицам и Каждая запись таблицы db описывает права доступа к заданной базе данных. Если поле Host является пустым, соответствующая запись должна присутствовать в таблице host. В данном случае программа выбирает только те привилегии, которые определены в обеих таблицах. Например, если в таблице db пользователю выдается привилегия Update, а в таблице host нет, программа не разрешит пользователю обновлять все таблицы базы данных.

Задание привилегий 491

Если искомые привилегии в таблицах и host отсутствуют, программа проверя ет таблицу table В ней определены привилегии доступа к отдельным табли цам. В последнюю очередь проверяется таблица column и там ничего не найдено, пользовательский запрос отклоняется.

Рис. Проверка привилегий

Задание привилегий

Для задания привилегий предназначены инструкции GRANT и REVOKE (см. главу 13, "Инструкции SQL"). Можно также непосредственно манипулировать таблицами при вилегий. После внесения изменений следует выполнить инструкцию FLUSH PRIVILEGES Пароли для таблицы user создаются с помощью функции PASSWORD В дистрибутив MySQL входит сценарий проверки привилегий на писанный (Yves Его синтаксис был описан в главе 14, "Утилиты командной строки". Данный сценарий поможет вам понять, какими возможностями обладает тот или иной пользователь. Он также выдаст предупреждение в случае об наружения опасной конфигурации, например когда любой пользователь может заре гистрироваться под именем root без ввода пароля. В листинге 27.2 показаны типич

ные результаты работы этого сценария.

Access rights

for USER

from HOST

to DB

NOTE: A password is required for user