Министерство образования Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
“Хабаровский государственный технический университет”
АДМИНИСТРИРОВАНИЕ В ИНФОРМАЦИОННЫХ СЕТЯХ
ЛАБОРАТОРНАЯ РАБОТА № 11
Методические указания к выполнению лабораторной работы № 11
для студентов специальности 071900 “Информационные системы
и технологии”
Хабаровск
Издательство ХГТУ
2003
УДК 681.58:681.32
Администрирование в информационных сетях: Методические указания к выполнению лабораторной работы № 11 для студентов специальности 071900 «Информационные системы и технологии» / Сост. Г. К. Конопелько, Д. Г. Конопелько – Хабаровск: Изд-во Хабар. гос. техн. ун-та, 2003. – 12 с.
Методические указания составлены на кафедре «Автоматика и системотехника». В них приводятся задание на лабораторную работу, требования по оформлению отчета, а также общие сведения. Приводится перечень рекомендованной литературы, необходимой для выполнения задания.
Печатается в соответствии с решениями кафедры "Автоматика и системотехника" и методического совета института информационных технологий.
© Издательство Хабаровского государственного технического университета, 2003
Администрирование сервера
MySQL
в
Linux
Цель работы:
научиться управлять сервером MySQL в ОС Linux.
Введение
Практическое задание выполняется в локальной сети на рабочей станции с операционной системой Linux версии 7 или более поздней.
Порядок выполнения лабораторной работы
1. Подготовка и допуск к работе
К выполнению лабораторной работы допускаются студенты, которые подготовились к работе и имеют не более двух невыполненных предыдущих заданий.
Перед работой студент должен:
· предъявить преподавателю полностью оформленный отчет о предыдущей работе;
· ответить на вопросы преподавателя.
К работе не допускаются студенты, которые не выполнили одно из вышеперечисленных требований.
2. Отчёт по работе должен содержать следующее:
- Текст задания.
- Перечень всех использованных в лабораторной работе команд и инструкций.
- Вывод по работе.
Общие сведения
Предоставление доступа к базам данных
СУБД MySQL использует специальную базу данных для предоставления прав доступа к своим базам данных. Эти права могут базироваться на именах серверов и/или пользователей и предоставляться для одной или нескольких баз данных
Пользовательские аккаунты могут быть снабжены паролями. При обращении к базе данных, пароль шифруется. Поэтому он не может быть перехвачен и использован посторонним (это мнение автора СУБД...).
СУБД MySQL имеет три таблицы, а именно:
База данных: mysql Таблица: db |
|||||
Поле
|
Тип
|
Null
|
Ключ
|
Умолчание
|
Extra
|
Хост |
char(60) |
PRI |
|||
Db |
char(32) |
PRI |
|||
Пользователь |
char(16) |
PRI |
|||
Select_priv |
char(1) |
N |
|||
Insert_priv |
char(1) |
N |
|||
Update_priv |
char(1) |
N |
|||
Delete_priv |
char(1) |
N |
|||
Create_priv |
char(1) |
N |
|||
Drop_priv |
char(1) |
N |
База данных: mysql Таблица: host |
|||||
Поле
|
Тип
|
Null
|
Ключ
|
Умолчание
|
Extra
|
Хост |
char(60) |
PRI |
|||
Db |
char(32) |
PRI |
|||
Select_priv |
char(1) |
N |
|||
Insert_priv |
char(1) |
N |
|||
Update_priv |
char(1) |
N |
|||
Delete_priv |
char(1) |
N |
|||
Create_priv |
char(1) |
N |
|||
Drop_priv |
char(1) |
N |
База данных: mysql Таблица: user |
|||||
Поле
|
Тип
|
Null
|
Key
|
Умолчание
|
Extra
|
Хост |
char(60) |
PRI |
|||
Пользователь |
char(16) |
PRI |
|||
Пароль |
char(8) |
||||
Select_priv |
char(1) |
N |
|||
Insert_priv |
char(1) |
N |
|||
Update_priv |
char(1) |
N |
|||
Delete_priv |
char(1) |
N |
|||
Create_priv |
char(1) |
N |
|||
Drop_priv |
char(1) |
N |
|||
Reload_priv |
char(1) |
N |
|||
Shutdown_priv |
char(1) |
N |
|||
Process_priv |
char(1) |
N |
|||
File_priv |
char(1) |
N |
Ниже приведен пример добавления новых пользователей:
$ mysql mysql
mysql> INSERT INTO user VALUES ('%','monty',password('something'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user (host,user,password) values('localhost','dummy','');
mysql> INSERT INTO user VALUES ('%','admin','','N','N','N','N','N','N','Y','N','Y','N');
mysql> quit
$ mysqladmin reload
|
В результате добавлено три новых пользователя:
monty: |
Суперпользователь (администратор), должен использовать пароль, для работы с mysql. |
dummy:
>
|
Должен быть допущен к индивидуальной базе данных по таблице 'db '. |
admin: |
Не нуждается в пароле, но разрешено выполнение только команд 'mysqladmin reload' and 'mysqladmin processlist'. Может быть допущен к индивидуальной базе данных через таблицу 'db'. |
ВНИМАНИЕ!
Вы ДОЛЖНЫ использовать функцию password()
при создании пользователя, имеющего пароль. СУБД MySQL ожидает получить зашифрованный пароль.
Атрибуты, установленные в таблице пользователей перекрывают атрибуты, установленные в таблице DB. Если сервер поддерживает много баз данных, лучше создавать пользователей без прав доступа в таблице пользователей и назначать им права доступа к базе данных по таблице db.
Если Вы используете MIT threads package
, обратите внимание, что имя localhost не будет работать, так как MIT threads package
не поддерживает socket-подключения. Это означает, что Вы должны всегда определять ваш hostname (имя сервера) при подключении, даже если Вы работаете с одним и тем же сервером.
Следует помнить следующие правила при настройке прав доступа:
· Имя сервера и поля в таблице db могут содержать регулярные выражения языка SQL: символы % и _. В других полях использовать их нельзя.
· Имя сервера может быть доменным именем, именем localhost, IP адресом или SQL-выражением. Пустое поле "имя сервера" означает любой сервер.
· Поле db является именем базы данных или SQL-выражением.
· Пустое имя пользователя эквивалентно любому пользователю.
· Пустой пароль эквивалентен любому паролю. Вы можете создать суперпользователя (super-user) установив все права для него в 'Y' в таблице пользователей при создании этого аккаунта. Этот пользователь сможет делать что угодно, не считаясь со значениями, установленными в таблице DB!
· Таблица серверов проверяется только когда в таблице db поле "имя сервера" пустое.
· Все таблицы, по возможности, сортируются в порядке host-user-db:
Пользователь |
Сортируется по именам серверов и пользователей. |
db |
Сортируется по именам серверов, пользователей и баз данных. |
Сервер |
Сортируется по именам серверов и баз данных. |
Начиная с версии 3.20.19 сервера введена одна особенность, которая исключает попытки вычислить, как данный пользователь обратится к данной базе данных. Допустим существование пользователя с именем Джо
, который зарегистрирован так:
INSERT INTO user VALUES('%.external.domain.com','','','N','N','N', 'N','N','N','N','N','N','N');
Проверка таблицы баз данных будет выполнена для пользователя '' (пустое имя), а не для пользователя Джо
, даже если пользователь Джо
имеет запись в таблице доступа к базам данных (db таблице).
Создание пользовательских аккаунтов, вероятно, наиболее сложный аспект СУБД MySQL поэтому потребуется некоторое время, чтобы во всем разобраться. Использование программы mysqlaccess
делает управление доступом несколько более ясным.
Вообще лучше избегать использования регулярных выражений SQL в полях имени сервера. Это упрощает отладку.
Для начала установите все поля "имя сервера" в '%' и очистите таблицу серверов. Как только все начнет нормально функционировать, можно начинать эксперименты с добавлением имен серверов в таблицу серверов в случае такой необходимости.
Если получено сообщение об ошибке 'Access denied', то скорее всего вы нормально связались с демоном mysqld, но ваша таблица пользователей имеет ошибки.
Как работают пароли
Зашифрованный пароль сохраняется в таблице пользователей ('user').
· При установлении соединения сервер посылает случайное число клиенту.
· Клиент шифрует пароль, чтобы получить то что имеет сервер (он хранит пароли в зашифрованном виде) и вычисляет число из полученного с сервера случайного числа и зашифрованного пароля. Это число отсылается на сервер.
· Сервер вычисляет число из сохраненного в зашифрованном виде пароля и сгенерированного случайного числа. Если это число совпадет с тем, которое прислал клиент, связь устанавливается.
Запуск mysqld
при загрузке системы:
Solaris
Скопируйте скрипт mysql.server из каталога mysql bin в /etc/init.d
.
Проверьте все пути в скрипте mysql.server. Проверьте и установите safe_mysqld в /etc/init.d/mysql.server
и в /etc/rc2.d/S99mysql.server
.
Linux
В Caldera Open Linux надо добавить в файл /etc/rc.d/rc.local следующее:
/usr/local/bin/safe_mysql &
Конечно, здесь надо задать правильный путь в каталог с MySQL.
при запущенной системе:
Программа mysqld может быть запущена от имени любого пользователя. По умолчанию она запускается от имени root. Если она запускается от имени любого другого пользователя, надо установить правильные права доступа ко всем необходимым файлам.
Зайдите в систему как пользователь-владелец MySQL и дайте следующую команду (предполагается, что исполняемый модуль mysql находится в вашем пути, если это не так, укажите полный путь):
safe_mysql &
Добавление функций в MySQL
Если Вы понимаете C++, то добавить функцию к СУБД MySQL относительно просто.
Сначала добавьте строку в файл sql_lex.cc с именем функции в массив sql_functions.
Затем добавьте две строки в файл sql_yacc.y. Первая определяет символ препроцессора yacc. Вы должны добавить это к началу файла. Затем определите параметры функции, и создайте 'item' с этими параметрами.
В файле item_func.h объявляют класс, который наследуется из Item_num_func или Item_str_func, в зависимости от того, возвращает ли ваша функция число или строку.
В intem_func.cc добавьте:
double *Item_func_newname::val()
если Вы определяете числовую функцию, или
String *Item_func_newname::Str(String *str)
если Вы определяете строковую функцию.
Для строковой функции вы должны также определить следующую функцию:
void Item_func_newname::fix_length_and_dec()
Она должна по крайней мере вычислить 'max_length' основанный на полученных параметрах. max_length - максимальное число символов, которое функция может вернуть (максимальная длина возвращаемого значения).
Если функция не может возвращать null, вы должны также установить 'maybe_null=0'.
Для строковых функций параметр 'String *str', предоставляет буфер для хранения результата. Строковая функция должна вернуть строку, которая хранит результат.
Все строковые функции должны избегать выделения памяти больше, чем им абсолютно необходимо! Системные ресурсы не бесконечны...
Быстрая загрузка данных
Самый быстрый способ загружать данные в MySQL - команда LOAD DATA INFILE. Это в 3 - 20 раз быстрее, чем использование инструкций INSERT. Для еще большего быстродействия можно использовать процедуру, описанную ниже и предусматривающую отключение функции формирования ключа на вашей таблице во время загрузки данных. Для этого надо находиться в вашем MySQL каталоге баз данных, или обеспечивать полные пути к вашей базе данных.
isamchk -rq -k0 [имя_базы_данных]/[имя_таблицы] |
Удаление ключей |
LOAD DATA INFILE ... |
Чтение ваших данных |
isamchk -rq [имя_базы_данных]/[имя_таблицы] |
Создание ключей таблицы заново |
mysqladmin reload. |
Сообщите, чтобы mysql использовал новую таблицу |
Задание на лабораторную работу
1. Запустите СУБД MySQL.
2. Создайте минимум двух пользователей.
3. Создайте минимум две базы данных на каждого пользователя.
4. Создайте по одной таблице в каждой базе данных и заполните их записями.
5. Продемонстрируйте результаты преподавателю.
Контрольные вопросы
1. Как осуществляется запуск MySQL?
2. Какова процедура создания новых пользователей?
3. Где хранится информация о пользователях и базах данных?
Библиографический список
1. Шумаков П. В. Delphi 3 и создание приложений баз данных данных / П. В. Шумаков. – М.: Нолидж, 1999. – 320 c.
2. «Microsoft Knowledge Base», Web-сервер корпорации Microsoft, http://www.microsoft.com/rus/support/kbrus.htm
3. Маслов В. В. «Введение в Perl», Web-сервер Citforum http://www.citforum.ru/ internet/perl_tut/ index.shtml
4. Федосеева А. «Спецификация языка Perl», Web-сервер Citforum http://www.citforum.ru/database/cnit/p2.shtml
2. Чекалов А. «Прагматический подход к разработке приложений Web баз данных», Web-сервер Citforum http://www.citforum.ru/internet/webdbapp/ index.shtml
3. Встроенная справочная система операционной системы Windows.
АДМИНИСРИРОВАНИЕ В ИНФОРМАЦИОННЫХ СЕТЯХ
Методические указания к выполнению лабораторной работы № 11
для студентов специальности 071900 «Информационные системы
и технологии»
Конопелько Геннадий Константинович,
Конопелько Денис Геннадьевич
Главный редактор Л. А. Суевалова
Редактор ____________
Компьютерная верстка Д. Г. Конопелько
Подписано в печать . Формат 60х84 1/16.
Бумага писчая. Гарнитура “Таймс”. Печать офсетная. Усл. печ. л. Х,ХХ
Тираж 100 экз. Заказ
Издательво Хабаровского государственного
технического университета.
680035, Хабаровск, ул. Тихоокеанская, 136.
Отдел оперативной полиграфии издательства
Хабаровского государственного технического
университета.
680035, Хабаровск, ул. Тихоокеанская, 136.