Автор работы: Пользователь скрыл имя, 25 Января 2013 в 07:29, курсовая работа
Задание
Используя MySQL, необходимо создать базу данных для электронного магазина (Web-сервера), торгующего компьютерной техникой.
Для решения поставленной завдачи, используем комплект «Denwer».
Комплект Денвер-2 имеет нечто вроде ядра – так называемый «базовый комплект», занимающий всего около 2 MB. Базовый комплект содержит большинство необходимых для разработки web-страниц программ и утилит:
• сервер Apache; ...
Задание…………………………………………………………………………….2
Введение…………………………………………………………………………..2
Программное обеспечение……………………………………………………….2
Работа с виртуальными хостами…………………………………………………5
Работа с сервером MySQL……………………………………………………….6
Работа с таблицами БД…………………………………………………………...7
Управление данными……………………………………………………………11
Система безопасности MySQL…………………………………………………13
PHP страницы……………………………………………………………………20
Управление данными
Первое, что мы делаем, создав таблицу, это добавляем в нее данные. Если данные уже есть, может возникнуть необходимость изменить или удалить их.
Добавление данных. Добавление данных в таблицу является одной из наиболее простых операций SQL. MySQL поддерживает стандартный синтаксис INSERT:
INSERT INTO table_name (column1, column2, ..., columnN)
VALUES (value1, value2, ..., valueN)
Данные для числовых полей вводятся, как они есть. Для всех других полей вводимые данные заключаются в одиночные кавычки. Например, для ввода данных в таблицу наименования можно выполнить следующую команду:
INSERT INTO `goodslist` ( `CID` , `Name` , `Price` ) VALUES
(1, 'Sony MFM-HT205', 691),
Кроме того, управляющий символ - по умолчанию '\' - позволяет вводить в литералы одиночные кавычки и сам символ '\':
#
Ввести данные в каталог
# в c:\Personal\Stacie
INSERT INTO files (description, location)
VALUES ('Stacie\'s Directory', 'C:\\Personal\\Stacie')
MySQL позволяет опустить названия колонок, если значения задаются для всех колонок и в том порядке, в котором они были указаны при создании таблицы командой CREATE. Однако если мы хотим использовать значения по умолчанию, нужно задать имена тех колонок, в которые мы вводим значения, отличные от установленных по умолчанию. Если для колонки не установлено значение по умолчанию, и она определена как NOT NULL, необходимо включить эту колонку в команду INSERT со значением, отличным от NULL. MySQL позволяет указать значение по умолчанию при создании таблицы в команде CREATE.
Новые версии MySQL поддерживают INSERT для одновременной вставки нескольких строк:
INSERT INTO foods VALUES
(NULL, 'Oranges', 133, 0, 2, 39),
(NULL, 'Bananas', 122, 0, 4, 29),
(NULL, 'Liver', 232, 3, 15. 10)
Хотя поддерживаемый MySQL нестандартный синтаксис удобно использовать для быстрого выполнения задач администрирования, не следует без крайней нужды пользоваться им при написании приложений. Как правило, следует придерживаться стандарта ANSI SQL2 настолько близко, насколько MySQL это позволяет. Благодаря этому мы получаем возможность перейти в будущем на какую-нибудь другую базу данных. Переносимость особенно важна для тех, у кого потребности среднего масштаба, поскольку такие пользователи предполагают когда-нибудь перейти на полномасштабную базу данных.
MySQL поддерживает синтаксис SQL2, позволяющий вводить в таблицу результаты запроса:
INSERT INTO foods (name, fat)
SELECT food_name, fat_grams FROM recipes
Обратим внимание, что число колонок в INSERT соответствует числу колонок в SELECT. Кроме того, типы данных колонок в INSERT должны совпадать с типами данных в соответствующих колонках SELECT. И, наконец, предложение SELECT внутри команды INSERT не должно содержать модификатора ORDER BY и не может производить выборку из той же таблицы, в которую вставляются данные командой INSERT.
Добавим данные в две следующие таблицы:
INSERT INTO `categories` ( `CID` , `Name` ) VALUES
(1, ' Monitors'),
(2, ' Printers'),
(3, ' Noutbuki');
INSERT INTO `goodslist` ( `CID` , `Name` , `Price` ) VALUES
(1, 'Sony MFM-HT205', 691),
(1, 'Samsung 214T', 707),
(2, 'Canon Laser Shot LBP-2900', 119),
(2, 'МФУ Samsung SCX-4200', 176),
(3, 'HP Pavilion 6550', 950);
Системы безопасности MySQL
MySQL использует собственный сервер баз данных для обеспечения безопасности. При первоначальной установке MySQL создается база данных под названием «mysql». В этой базе есть пять таблиц: db, host, user, tables_priv, и columns_priv. Более новые версии MySQL создают также базу данных с названием func, но она не имеет отношения к безопасности.
MySQL использует эти таблицы для определения прав пользователей:
Мы кратко рассмотрим все таблицы, поддерживающие безопасность в MySQL, а затем рассмотрим технологию их использования при обеспечении защиты ядром MySQL.
Таблица user имеет структуру, показанную ниже:
Поле |
Тип |
Null |
Ключ |
Значение по умолчанию |
Host |
char(60) |
PRI |
||
User |
char(16) |
PRI |
||
Password |
char(16) |
|||
Select_priv |
enum('N','Y') |
N | ||
Insert_priv |
enum('N','Y') |
N | ||
Update_priv |
enum('N','Y') |
N | ||
Delete_priv |
enum('N','Y') |
N | ||
Create_priv |
enum('N','Y') |
N | ||
Drop_priv |
enum('N','Y') |
N | ||
Reload_priv |
enum('N','Y') |
N | ||
Shutdown_priv |
enum('N','Y') |
N | ||
Process_priv |
enum('N','Y') |
N | ||
File_priv |
enum('N','Y') |
N | ||
Grant_priv |
enum('N','Y') |
N | ||
References_priv |
enum('N','Y') |
N | ||
Index_priv |
enum('N','Y') |
N | ||
Alter_priv |
enum('N','Y') |
N |
В колонках Host и User можно использовать символ «%», заменяющий произвольную последовательность символов. Например, имя узла «chem%lab» включает в себя «chembiolab», «chemtestlab» и т. д.
Специальное имя пользователя «nobody» действует как одиночный «%», то есть охватывает всех пользователей, не упомянутых где-либо в другом месте.
Select_priv - Возможность выполнять команды SELECT.
Insert_priv - Возможность выполнять команды INSERT.
Update_priv - Возможность выполнять команды UPDATE.
Delete_priv - Возможность выполнять команды DELETE.
Create_priv - Возможность выполнять команды CREATE или создавать базы данных.
Drop_priv - Возможность выполнять команды DROP для удаления баз данных.
Reload_priv - Возможность обновлять информацию о доступе с помощью mysqladmin reload.
Shutdown_priv - Возможность останавливать сервер через mysqladmin shutdown.
Process_priv - Возможность управлять процессами сервера.
File_priv - Возможность читать и записывать файлы с помощью команд типа SELECT INTO OUTFILE и LOAD DATA INFILE.
Grant_priv - Возможность давать привилегии другим пользователям.
Index_priv - Возможность создавать и уничтожать индексы.
Alter_priv - Возможность выполнять команду ALTER TABLE.
В MySQL есть специальная функция, позволяющая скрыть пароли от любопытных глаз. Функция password() зашифровывает пароль. Ниже показано, как использовать функцию password() в процессе добавления пользователей в систему:
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv)
VALUES ('%', 'bob', password('mypass'), 'Y', 'Y', 'Y', 'Y')
INSERT INTO user (Host, User, Password, Select_priv)
VALUES ('athens.imaginary.com', 'jane', '', 'Y')
INSERT INTO user(Host, User, Password)
VALUES ('%', 'nobody', '')
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv)
VALUES ('athens.imaginary.com', 'ivan', password('thispass'), 'Y', 'Y', 'Y', 'Y')
Здесь первый созданный пользователь, «bob», может подключаться к базе данных с любого компьютера и выполнять команды SELECT, INSERT, UPDATE и DELETE. Второй пользователь, «jane», может подключаться с «athens.imaginary.com», не имеет пароля и может выполнять только SELECT. Третий пользователь - «nobody» - с любой машины. Этот пользователь вообще ничего не может делать. Последний пользователь - «ivan» - с машины «athens.imaginary.com», он может выполнять SELECT, INSERT, UPDATE и DELETE, как и пользователь «bob».
Имена пользователей MySQL обычно не связаны с именами пользователей операционной системы. По умолчанию клиентские средства MySQL используют при регистрации имена пользователей операционной системы, однако, обязательного соответствия не требуется. В большинстве клиентских приложений MySQL можно с помощью параметра -u подключиться к MySQL, используя любое имя. Ваше имя пользователя операционной системы не появится в таблице user, если не будет специально включено в нее с присвоением прав.
Как MySQL производит сопоставление? Некоторое имя может соответствовать на деле нескольким записям. Например, «nobody @athens.imaginary.com» соответствует и «nobody@%», и «nobody@athens.imaginary.com». Прежде чем осуществлять поиск в таблице user, MySQL сортирует данные следующим образом:
В предыдущем примере пользователь сначала будет сравниваться с «nobody» из «athens.imaginary.com», поскольку «athens.imaginary.com» в порядке сортировки стоит выше «%». Поскольку имена компьютеров сортируются раньше имен пользователей, значения привилегий для компьютера, с которого вы подключаетесь, имеют приоритет перед любыми конкретными правами, которые у вас могут быть. Если таблица user содержит записи:
Host |
User |
% |
jane |
athens.imaginary.com |
и jane подключается с «athens.imaginary.com», то MySQL будет использовать привилегии, данные «athens.imaginary.com».
Таблица db. В таблице user не упоминаются конкретные базы данных и таблицы. Таблица user управляет сервером в целом. Однако на сервере обычно находится несколько баз данных, которые служат различным целям и, соответственно, обслуживают разные группы пользователей. Права доступа к отдельным базам данных хранятся в таблице db:
Таблица 2. Таблица db
Поле |
Тип |
Null |
Ключ |
Значение по умолчанию |
Host |
char(60) |
PRI |
||
Db |
char(32) |
PRI |
||
User |
char(16) |
PRI |
||
Select_priv |
enum('N','Y') |
N | ||
Insert_priv |
enum('N','Y') |
N | ||
Update_priv |
enum('N','Y') |
N | ||
Delete_priv |
enum('N','Y') |
N | ||
Create_priv |
enum('N','Y') |
N | ||
Drop_priv |
enum('N','Y') |
N | ||
References_priv |
enum('N','Y') |
N | ||
Index_priv |
enum('N','Y') |
N | ||
Alter_priv |
enum('N','Y') |
N |
Эта таблица во многом похожа на таблицу user. Основное отличие в том, что вместо колонки Password имеется колонка Db. Таблица управляет правами пользователей в отношении определенных баз данных. Поскольку привилегии, указанные в таблице user, относятся ко всему серверу в целом, права, присвоенные пользователю в таблице user, перекрывают права, присвоенные тому же пользователю в таблице db. Например, если пользователю в таблице user разрешают доступ типа INSERT, это право действует в отношении всех баз данных, вне зависимости от того, что указано в таблице db.
Наиболее эффективно создание в таблице user записей для всех пользователей, в которых не даны никакие права. В этом случае пользователь может лишь подключиться к серверу, не выполняя никаких действий. Исключение делается только для пользователя, назначенного администратором сервера. Все остальные должны получить права доступа через таблицу db. Каждый пользователь должен присутствовать в таблице user, иначе он не сможет подключаться к базам данных.
Те же правила, которые действуют в отношении колонок User и Host в таблице user, действуют и в таблице db, но с некоторой особенностью. Пустое поле Host вынуждает MySQL найти запись, соответствующую имени узла пользователя, в таблице host. Если такой записи не найдено, MySQL отказывает в доступе. Если соответствие найдено, MySQL определяет права как пересечение прав, определяемых таблицами host и db. Иными словами, в обеих записях разрешение должно иметь значение «Y», иначе в доступе отказывается.
Таблица host. Таблица host служит особой цели. Ее структура показана в таблице 3:
Таблица 3. Таблица Host
Поле |
Тип |
Null |
Ключ |
Значение по умолчанию |
Host |
char(60) |
PRI |
||
Db |
char(32) |
PRI |
||
Select_priv |
enum('N','Y') |
N | ||
Insert_priv |
enum('N','Y') |
N | ||
Update_priv |
enum('N','Y') |
N | ||
Delete_priv |
enum('N','Y') |
N | ||
Create_priv |
enum('N','Y') |
N | ||
Drop_priv |
enum('N','Y') |
N | ||
Grant_priv |
enum('N','Y') |
N | ||
References_priv |
enum('N','Y') |
N | ||
Index_priv |
enum('N','Y') |
N | ||
Alter_priv |
enum('N','Y') |
N |