Получение дополнительной информации о базах данных

До сих пор мы использовали операторы SHOW и DESCRIBE для получения списков таблиц в базе данных и столбцов в этих таблицах. В последующих разделах мы кратко рассмотрим другие способы применения этих операторов, а также оператора EXPLAIN для получения дополнительной информации о способе выполнения SELECT.
Получение информации с помощью оператора SHOW
Ранее мы использовали следующую конструкцию: show tables; для получения списка таблиц базы данных.
OPTIMIZE TABLE имя_таблицы; или команды, которая должна вводиться в командной строке:
myisamchk -г имя_таблицы
Можно также с помощью утилиты myisamchk отсортировать индекс таблицы и данные в соответствии с этим индексом:
myisamchk –sort-index –sort-records=l путь_к_каталогу_данных_Му50Ы*I’* .MYI І
Использование индексов
»


Проблемы, связанные с Web

Подключение базы данных MySQL к Web порождает нескольку специфических проблем безопасности.
Неплохо начать с создания пользователя специально для подключения к Web. При этом ему можно выдать минимально необходимые полномочия и не предоставлять такие полномочия как, например, DROP, ALTER или CREATE. Этому пользователю можно было бы выдать полномочия SELECT только для таблиц catalog и полномочия INSERT — только для таблиц order. Приведенный пример — еще одна иллюстрация применения принципа минимальных полномочий.
Предостережение
В предыдущей главе было описано использование PHP-функций addslashes () и stripslashes () для удаления из строки сомнительных символов. Перед отправкой любых данных в MySQL важно не забывать о необходимости реализации как этих действий, так и общей “чистки” данных. Следует не забывать об использовании функции doubleval () для проверки того, что числовые данные таковыми являются в действительности. Пропуск этой проверки — часто встречающаяся ошибка; люди помнят о »


Полномочия пользователя

Знание — сила. Поэтому необходимо хорошо понимать особенности работы системы полномочий MySQL и последствия выдачи конкретных полномочий. Ни одному пользователю не следует предоставлять больше полномочий, чем ему требуется. Эти полномочия необходимо проверять, просматривая таблицы полномочий.
В частности, не выдавайте полномочия PROCESS, FILE, SHUTDOWN и RELOAD ни одному пользователю кроме администратора, если только это не абсолютно необходимо. Полномочия PROCESS могут быть использованы для слежения за тем, что делают и вводят другие пользователи, в том числе за вводом паролей. Полномочия FILE позволяют считывать и записывать файлы »


Пароли

Убедитесь, что все пользователи (особенно root!) имеют пароли, и что эти пароли правильно выбраны и регулярно обновляются, подобно паролям операционной системы. При этом важно помнить, что использование паролей, которые представляют собой или содержат слова из какого-либо словаря — идея весьма неудачная. Лучше всего применять комбинации букв и цифр.
Если планируете хранить пароли в файлах сценариев, убедитесь, что каждый из таких сценариев доступен только тому пользователю, чей пароль хранится в данном файле.
PHP-сценариям, служащим для подключения к базе данных, требуется доступ к і паролю конкретного пользователя. Это можно сделать достаточно безопасно, помещая имя учетной записи и пароль пользователя в »


Обеспечение безопасности базы данных MySQL

Безопасность очень важна, особенно при подключении базы данных MySQL к Web-сайту. В следующих разделах описаны меры предосторожности, которые нужно предпринимать для защиты базы данных.
MySQL с точки зрения операционной системы
При использовании Unix-подобной операционной системы запуск сервера MySQL (mysqld) в качестве привилегированного процесса — не самая лучшая идея. В этом случае пользователь MySQL получает полный набор полномочий для выполнения чтения и записи файлов в любом каталоге операционной системы. Это исключительно важный момент, который легко упустить из виду, чем и воспользовались для знаменитого взлома Web-сайта Apache. (К счастью, они оказались “белыми и пушистыми”, и их единственной целью было укрепление системы безопасности.)
»


Обновление полномочий: когда изменения вступают в силу?

Сервер MySQL автоматически считывает таблицы предоставления полномочий во время своего запуска и при выполнении операторов GRANT и REVOKE. Однако, зная, где и как хранятся эти полномочия, их можно изменять вручную. При обновлении полномочий вручную сервер MySQL не заметит их изменения.
Об изменениях серверу потребуется сообщить, и это можно выполнить тремя способами. Можно ввести команду
flush privileges;
в командной строке MySQL (чтобы эту команду можно было использовать, необходимо войти в систему в качестве администратора). Этот способ обновления полномочий используется наиболее часто.
Можно также выполнить любую из команд
»


Управление доступом: использование таблиц полномочий в среде MySQL

Используя таблицы полномочий, MySQL определяет действия, которые разрешено выполнять пользователю, в ходе двухэтапного процесса:
1. Проверка права на подключение. На этом этапе на основе информации, полученной из таблицы user, MySQL проверяет, имеет ли пользователь право на подключение. Эта аутентификация выполняется на основе имени пользователя, имени хоста и пароля. Если поле имени пользователя пустое, оно соответствует всем пользователям. Имена хостов можно указывать с использованием группового символа (%). Этот символ может использоваться в качестве полного значения поля (то есть символ % соответствует всем хостам) или в качестве части имени хоста (например, %. tangledweb.com.au соответствует всем хостам, имена которых заканчиваются строкой .tangledweb.com.au). Если поле пароля пустое, пароль для подключения не »


Таблицы tables_priv и columns_priv

Таблицы tables_priv и columns_priv используются для хранения полномочий уровней, соответственно, таблицы и столбца. Они работают подобно таблице db за исключением того, что предоставляют информацию о полномочиях по отношению к таблицам внутри конкретной базы данных и по отношению к столбцам внутри конкретной таблицы.
Структура этих таблиц несколько отличается от структуры таблиц user, db и host. Схемы таблиц tables_priv и columns_priv показаны в табл. 12.4 и табл. 12.5.
Столбец Grantor таблицы tables_priv хранит имя »


Таблицы db и host

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


Дополнительные сведения по администрированию MySQL

Подробное ознакомление с системой полномочий
В главе 9 был описан процесс определения пользователей и предоставления им полномочий. Для предоставления полномочий служит команда GRANT. Если вы собираетесь выполнять действия по администрированию базы данных MySQL, полезно знать, что именно выполняет эта команда и как из нее извлечь максимальную пользу.
Выполнение оператора GRANT оказывает влияние на таблицы в специальной базе данных с именем mysql. Информация о полномочиях хранится в пяти таблицах этой базы данных. Учитывая этот факт, при выдаче полномочий для работы с базами данных следует с осторожностью предоставлять доступ к базе данных mysql.
По ходу дела заметим, что команда GRANT стала доступна, »


Создание базы данных

Для целей этого приложения мы должны хранить следующую информацию:
■ lists (списки) — списки рассылки, доступные для подписки.
■ subscribers (подписчики) — пользователи системы и их предпочтения.
■ sub_lists (списки, на которые совершена подписка) — информация о списках, на которые подписались пользователи (отношение типа “многие ко многим”).
■ mail (сообщения электронной почты) — информация об отправленных сообщениях электронной почты.
■ images (изображения) — поскольку необходимо располагать возможностью отправки сообщений электронной почты, состоящих из нескольких файлов (то есть текста, HTML-кода и набора изображений), требуется также отслеживать, какие изображения отправляются с каждым почтовым сообщением.
SQL-код, с помощью которого создается эта база данных, »


Отправка сообщений электронной почты с вложениями

В этом проекте мы хотели бы, чтобы в соответствии с предпочтениями пользователей бюллетени можно было отправлять им в форме простого текста или в виде “украшенной” HTML-версии.
Для отправки HTML-файла с внедренными в него изображениями потребуется определиться со способом отправки вложений. Простая PHP-функция mail() не обеспечивает удобной поддержки отправки вложений. Поэтому вместо нее мы будем использовать замечательный пакет Mail_Mime из библиотеки PEAR, который был разработан Ричардом Хейесом (Richard Heyes). Это пакет умеет обрабатывать HTML-наложения, поэтому он будет использоваться для вложения любых изображений, содержащихся в HTML-файле.
Инструкции по установке пакета Mail_Mime можно найти в приложении А, в части, посвященной инсталляции библиотеки PEAR.
Обзор решения
»


Загрузка файлов

Как уже упоминалось ранее, нам необходим интерфейс, который позволил бы администратору отправлять информационные бюллетени. Тем не менее, мы еще ничего не сказали о том, как администраторы будут создавать эти самые бюллетени. Можно было бы предусмотреть форму, в которой администраторы смогли бы вводить или вставлять содержимое бюллетеня. Однако, памятуя о принципах дружественного пользовательского интерфейса, администраторам будет гораздо удобнее, если они смогут создавать бюллетени в предпочитаемом ими редакторе, а затем загружать результирующие файлы на Web-сервер. Помимо прочего, это должно упростить администраторам процедуру добавления изображений в информационный бюллетень представленный в HTML-формате.
Для решения очерченной задачи можно воспользоваться возможностью загрузки файлов, которая была описана в
Нам придется создать несколько более сложную форму, нежели те, которые при менялись в предыдущих проектах. Напомним, что мы решили предоставить администраторам »


Компоненты решения

Для удовлетворения предъявляемых к приложению требований потребуется множество компонентов. К основным из них относятся: определение базы данных списков, подписчиков и заархивированных информационных бюллетеней; загрузка информационных бюллетеней, которые были созданы в автономном режиме; отправка сообщений электронной почты с вложениями.
Создание базы данных списков и подписчиков
Для каждого пользователя системы в этом проекте мы планируем отслеживать его имя и пароль, а также перечень списков рассылки, на которые тот или иной пользователь подписался. Кроме того, мы будем хранить предпочтения каждого пользователя относительно получения сообщений в виде простого текста или же в HTML- формате, дабы ему можно было отправлять соответствующую версию информационного бюллетеня.
В качестве администратора будет выступать пользователь, »


Задача

Мы планируем создать интерактивную систему компоновки и отправки информационных бюллетеней. Эта система должна позволять создание и рассылку пользователям различных информационных бюллетеней, а также предоставлять пользователям возможность подписываться на один или несколько информационных бюллетеней.
Если конкретно, система должна удовлетворять следующим требованиям:
■ Администраторы должны иметь возможность настраивать и изменять списки рассылки.
■ Администраторы должны иметь возможность рассылать информационные бюллетени в текстовом и HTML-формате всем подписчикам в рамках одного списка рассылки.
»


Страницы (2): [1] 2 »