распространенным методом поддержания такой избыточной информации является ведение журнала изменений БД.
Журнал — это особая часть БД, недоступная пользователям СУБД и поддерживаемая с особой тщательностью (иногда поддерживаются две копии журнала, располагаемые на разных физических дисках), в которую поступают записи обо всех изменениях основной части БД. В разных СУБД изменения БД журнализуются на разных уровнях: иногда запись в журнале соответствует некоторой логической операции изменения БД (например, операции удаления строки из таблицы реляционной БД), иногда — минимальной внутренней операции модификации страницы внешней памяти; в некоторых системах одновременно используются оба подхода.
SHOW LOGS выводит информацию о существующих журналах.
7.17. Как обезопасить MySQL от хакеров
При подключении к серверу MySQL используется, как правило, пароль. По линии связи пароль не передается в виде открытого текста, но алгоритм шифрования не очень сложный. Толковый хакер, если ему удастся перехватить трафик между клиентом и сервером, при определенной настойчивости может взломать пароль. Поэтому если связь между клиентом и сервером осуществляется по ненадежной сети, для шифрования связи следует использовать SSH-туннель.
1. У всех пользователей MySQL должны быть пароли. Для приложений клиент/сервер является общепринятым, что клиент может указывать любое имя пользователя, но если для other_user не задан пароль, то кто угодно может зайти под любым именем, просто введя mysql -u other_user db_name. Чтобы этого избежать, можно изменить пароль для всех пользователей, отредактировав скрипт mysql_install_db перед запуском приложения, или только пароль для root-пользователя MySQL, как это показано ниже:
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
WHERE user='root';
mysql> FLUSH PRIVILEGES;
2. Не предоставляйте привилегии PROCESS всем пользователям. Команда mysqladmin PROCESSLIST выводит текст запросов,
обрабатываемых в данный момент. Следовательно, любой пользователь, имеющий право на выполнение этой команды, получает возможность прочитать, например, такой запрос другого пользователя, как UPDATE user SET password=PASSWORD('not_secure'). mysqld резервирует добавочное подключение для пользователей, имеющих привилегию PROCESS, так что пользователь MySQL под именем root может подключиться и осуществлять контроль даже в том случае, когда все обычные подключения заняты.
3. Не предоставляйте привилегии FILE всем пользователям. Любой пользователь, имеющий такую привилегию, может записать в любом месте файловой системы файл с привилегиями демона mysqld! Чтобы обеспечить здесь хоть минимальную защиту, все файлы создаваемые с помощью команды SELECT ... INTO OUTFILE, сделаны общедоступными для записи, но перезаписать существующие файлы нельзя.
Привилегия FILE может быть также использована для чтения любого файла, доступного пользователю Unix, от имени которого запускается сервер.
Можно также прочитать любой файл в текущую базу данных. Это может быть использовано в корыстных целях. Возможно, например, с помощью команды LOAD DATA загрузить /etc/passwd в таблицу и прочитать ее позже с помощью SELECT.
4. Чтобы ограничить число подключений, доступных для отдельного пользователя, можно в mysqld задать значение переменной
max_user_connections.
Указатели на страницы с ответами
●Язык SQL, схемы данных, задачи СУБД. 1.4. Язык SQL
●Модели данных. 1.7. Модели данных
●Понятие строк и столбцов.
1.8. Реляционная модель данных
●Ключи. 2.3. Ключ
●Отношения. 2.2. Отношения
●Реляционные операции (8 шт). 2.6. Реляционные операции
●Определение данных.
1.7. Модели данных либо 2.9. Типы данных MySQL
●Вставка, обновление, удаление записей. 2.5. Заполнение таблиц
●Запросы, объединения. 2.7. Соединение таблиц
●Упорядочивание и группировка результатов. Ограничение числа возвращаемых строк.
2.4. Пример выгрузки данных
●Изменение определения таблицы. 2.8. Изменение таблицы
●Параллелизм 2.10. Параллелизм
●Транзакции, их свойства. 4.1. Понятие транзакции
4.4. Тест ACID
●Уровни изоляции.
4.3. Уровни изоляции (изолированности) транзакций
●Блокировки.
4.5. Механизм блокировок
4.6. Взаимоблокировки
●Типы данных.
2.9. Типы данных MySQL
●Переменные. 3.2. Переменные
●Определение ХП (ХП — хранимая процедура). 3.1. Хранимая процедура MySQL
●Преимущества ХП.
3.1. Хранимая процедура MySQL
●Параметры ХП.
3.3. Параметры процедуры
●Хранимые функции.
3.1. Хранимая процедура MySQL
3.5. Оператор RETURN
●Определение курсора. 5.4. Курсор
●Синтаксис объявления внешнего ключа. 5.2.3. Синтаксис объявления внешнего ключа
●Правила объявления внешнего ключа.
5.2.1. Условия обеспечения целостности данных при помощи внешнего ключа
●Характеристики индексов. 5.3. Индекс
●Типы индексов.
5.3.6. Типы индексов в MySQL и 5.3.3. Виды индексов