Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD-2007-0.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
2.68 Mб
Скачать

9.3.6.2. Журнальные файлы

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

Двоичный журнал

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

По умолчанию файл создается в каталоге данных, а его имя соответствует имени компьютера с добавлением префикса –bin и порядкового номера (например, /usr/local/var/red-bin.001). Если выполнить инструкцию FLUSH LOGS, будет создан новый журнальный файл со следующим порядковым номером.

Утилита mysqlbinlog читает двоичный журнал и записывает извлеченные из него инструкции в поток stdout. Их можно направить утилите mysql чтобы воспроизвести все изменения. Это хороший способ восстановления после краха.

Изменения, сделанные в ходе транзакции, сохраняются в КЭШе, пока не будет выполнена инструкция COMMIT. Максимальный размер резидентного КЭШа определяется переменной binlog_cache_size.

Журнал отладки

Журнал отладки начинает вестись, если при компиляции клиента или сервера подключить средства отладки. По умолчанию отладочная информация записывается в файл /tmp/mysql.trace.

Журнал ошибок

В журнале ошибок хранится информация о запуске и остановке сервера. Здесь же регистрируются сообщения об ошибках и предупреждения. Журнал ошибок находится в каталоге данных. Его имя соответствует имени компьютера с добавлением расширения .err.

Журнал MyISAM

Журнал используется для отладки обработчика таблиц MyISAM. Чтобы включить журнал, надо запустить сервер с опцией –logisam. Существует утилита myisamlog, предназначенная для сбора статистической информации из этого файла. Информация представляет интерес только для разработчиков MySQL.

Журнал запросов

Журнал запросов регистрирует все запросы, посылаемые базе данных. Журнал находится в каталоге данных. Его имя соответствует имени компьютера с добавлением расширения .log. Журнал разрастается наиболее быстро, поэтому он не должен быть постоянно активен. Инструкции регистрируются в том порядке, в котором они поступают на сервер.

Журнал медленных запросов

Здесь регистрируются инструкции, которые выполняются слишком долго. Соответствующий предел задается в серверной переменной long_query_time. С помощью данного журнала можно определить, какие запросы требуют оптимизации. Журнал создается в каталоге данных, а его имя соответствует имени компьютера с добавлением расширения –slow.log.

Журнал обновлений

Этот журнал устарел, в настоящее время он заменен двоичным журналом.

9.3.7. Безопасность

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

9.3.7.1. Схемы привилегий

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

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

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

Перечень привилегий хранится в базе данных mysql. При инсталляции программы в этой базе создаются пять таблиц с описаниями привилегий:

  • columns_priv – привилегии отдельных столбцов;

  • tables_priv – привилегии отдельных таблиц;

  • db – привилегии всей базы данных;

  • host – привилегии всех пользователей того или иного узла;

  • user – глобальные привилегии.

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

В таблице user (host, user, password, … привилегии) описываются глобальные права доступа и хранятся пользовательские пароли. Пароль можно создать с помощью функции PASSWORD() или путем прямого изменения таблицы user, но удобнее всего изменять содержимое таблицы с помощью инструкции GRANT.

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

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

Следует, правда, отметить, что любому зарегистрированному пользователю разрешено вводить инструкции вида SELECT <выражение>, где <выражение> содержит функции и константы и не связано с содержанием таблиц баз данных, например, SELECT NOW().

За каждым пользователем каждого узла в таблице user закреплен свой набор привилегий, заданных в виде перечислений со значениями 'Y'/'N'. В столбце Host содержится IP-адрес либо доменное имя компьютера. Для задания диапазона адресов можно использовать метасимволы “%” (процент) и “_” (подчеркивание).

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

Столбец User содержит строку регистрационного имени пользователя. Метасимволы в строке недопустимы. Запись с пустым полем имени соответствует анонимным пользователям. Они могут регистрироваться в системе под любым именем, если только оно не указано в других записях. Введенное анонимным пользователем имя нигде не учитывается.

Столбец Password содержит пароль пользователя, зашифрованный по специальному алгоритму.

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

Доступ к базам данных

Таблицы db (host, db, user, …привилегии) и host (host, db, …привилегии) совместно контролируют доступ к базам данных. В таблице db (здесь имена пользователей с метасимволами не допустимы) записи сортируются в таком порядке: имя узла, имя базы данных, имя пользователя. Записи таблицы host сортируются сначала по имени узла, потом – по имени базы данных.

Доступ к таблицам и колонкам

Таблицы columns_priv (host, db, user, table, column_name, привилегия) и tables_priv (host, db, user, table_name, grantor, table_priv, column_priv) допускают наличие метасимволов, но только в столбце Host. Поэтому, чтобы предоставить пользователю права доступа к трем столбцам таблицы, нужно задать три записи в таблице columns_priv.

Названия привилегий в большинстве своем соответствуют названиям инструкций SQL, поэтому по названию привилегии легко понять, какие права получает пользователь.

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

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

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

Программа MySQL проверяет привилегии для каждой инструкции, вводимой пользователем. Как только программа находит нужную привилегию, она прекращает дальнейший поиск. Последовательность проверки таблиц:

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

  • Просматриваются таблицы db и host. Каждая запись таблицы db описывает права доступа к заданной базе данных. Если поле Host таблицы db является пустым, соответствующая запись должна присутствовать в таблице host. Программа выбирает только те привилегии, которые определены в обеих таблицах.

  • Если искомые привилегии в таблицах db и host отсутствуют, программа проверяет таблицу tables_priv, в которой определены привилегии доступа к отдельным таблицам.

  • В последнюю очередь проверяется таблица columns_priv.

  • Если и в последней таблице ничего не найдено, пользовательский запрос отклоняется.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]