Лабораторная #1 по базам данных

Лабораторная работа №1. Интерфейс СУБД MySQL. Предоставление доступа и привилегий. Утилиты, входящие в состав СУБД

Цель работы: Ознакомиться с приложениями, включенными в состав СУБД MySQL. Получить навыки управления учетными записями пользователей и определения привилегий. Ознакомиться с утилитами, входящими в состав СУБД MySQL, получить навыки работы с ними.

Установка MySQL

Есть несколько вариантов установки, в зависимости от того, будете ли вы использовать СУБД на своём личном компьютере (что рекомендуется для полноценного освоения), или будете использовать компьютеры института.

Установка на личном компьютере

Вы можете воспользоваться тем же вариантом, что и для установки на компьютер института, но проще будет использовать специальный инсталлятор. Для установки на личном компьютере вы просто скачиваете с сайта http://dev.mysql.com/downloads/mysql/ MySQL installer - это стандартный установщик, при помощи которого вы установите MySQL так же, как любую другую прогрумму Windows. В процессе установке следует выбрать вариант "Developer Default", чтобы установить полный необходимый вам набор инстурментов. Все остальные параметры можно оставить по умолчанию. Пароль для администратора вы можете придумать сами.

Установка на компьютере инстутута

Скачать актуальный дистрибутив СУБД MySQL можно по адресу
https://dev.mysql.com/downloads/mysql/
Нам понадобится вариант Windows (x86, 64-bit), ZIP Archive. Скорее всего, вы так же можете получить его из сетевого диска, куда его предварительно скопировал преподаватель. В данном случае вы просто распаковываете скачанный архив к себе на локальный (не сетевой!) диск.

Запуск MySQL

Запуск на личном компьютере

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

Запуск на компьютере института

Управление сервером будет осуществляться из командной строки. Для этого необходимо выполнить следующие команды (перейдя в папку MySQL):

  1. Сначала инициализируем базу:
    bin\mysqld.exe --initialize --skip-log-syslog --standalone --console
  2. Запомните пароль, который будет сгенерирован для пользователя root
  3. Теперь запускаем базу:
    bin\mysqld.exe --skip-log-syslog --standalone --console
    Если вы всё проделали правильно, то в консоли должна появиться строка "mysqld.exe: ready for connections".
    После этого консоль перестаёт принимать ваш ввод и работает только на вывод информации. Не закрывайте эту консоль - вместе с ней вы закроете серверный процесс и больше не сможете общаться с СУБД! Для того, чтобы работать дальше, вам потребуется открыть ещё одну консоль.
  4. И меняем пароль. Для этого запускаем клиентскую программу mysql
    Bin\mysql.exe -u root -p
    и вводим текущий пароль.
  5. И, оказавшись в консоли MySQL, меняем пароль:
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
    Не забудьте переподключиться и проверить, что пароль поменялся! Выйти из консоли MySQL в консоль Windows можно командой
    quit

Привилегии в MySQL

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

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

Теперь перейдём к рассмотрению каждой группы отдельно. И начнём с прав на управление данными в таблицах.

  • SELECT - эта привилегия позволяет делать выборку (вытаскивание) записей из таблиц баз данных.
  • INSERT - привилегия, которая необходима для добавления новых записей в таблицу.
  • UPDATE - право, позволяющее обновлять записи в таблице.
  • DELETE - эта привилегия позволяет удалять записи из таблицы.
  • FILE - разрешает делать выборку записей и записывать данные в файл, а также считывать их оттуда.

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

  • CREATE - привилегия, позволяющая создавать новые базы данных, а также новые таблицы в базе данных.
  • ALTER - привилегия, позволяющая переименовывать таблицы, вставлять новые поля в таблицу, удалять поля из таблицы, а также модифицировать их.
  • INDEX - разрешает создавать индекс по определённому полю и удалять его. О том, что это такое и для чего нужно мы поговорим в одной из следующих статей.
  • DROP - право, которое позволяет удалять либо таблицы, либо целые базы данных.
  • CREATE TEMPORARY TABLES - возможность создавать временные таблицы, которые хранятся во время сессии, а после окончания сессии данная таблица автоматически удаляется.

И последняя группа привилегий - это привилегии, связанные с администрированием баз данных.

  • GRANT - привилегия, которая позволяет создавать новых пользователей, а также менять права у существующих. Тут есть очень важная деталь: нельзя изменять значения привилегий, которыми сам не обладаешь. То есть если человек обладает привилегией GRANT, но не обладает привилегией SELECT, то он не может новым пользователям дать привилегию SELECT. Впрочем, это вполне логично.
  • SUPER - позволяет использовать команду "kill", то есть убить поток. Поток - это текущее подключение другого пользователя к базе данных.
  • PROCESS - привилегия, позволяющая выполнить команду "processlist", которая показывает список потоков.
  • RELOAD - позволяет открывать и закрывать файлы журналов, а также перечитывать таблицы привилегий пользователей.
  • SHUTDOWN - привилегия, позволяющая выполнить команду "shutdown", отключающая работу сервера.
  • SHOW DATABASES - разрешает просматривать все существующие базы данных.
  • REFERENCES - данная привилегия ещё не доступна, а только зарезервирована для использования в будущем.
  • LOCK TABLES - позволяет блокировать таблицы от указанных потоков.
  • EXECUTE - позволяет запускать хранимые процедуры.
  • REPLICATION CLIENT - даёт право получать местонахождение ведущего (master) и ведомых (slaves) серверов.
  • REPLICATION SLAVE - это привилегия, позволяющая читать ведомым журнала ведущего сервера.

И, наконец, специальные привилегии, связанные с ограничением на доступные ресурсы:

  • MAX QUERIES PER HOUR - максимальное количество запросов в час, которое может отправить пользователь.
  • MAX UPDATES PER HOUR - максимальное количество команд в час, которые каким-либо образом изменяют либо таблицу, либо базу данных.
  • MAX CONNECTIONS PER HOUR - максимальное количество подключений в час, которое может сделать пользователь.

Если значение вышеназванных пределов равны "0", то ресурсы для пользователя не ограничены.

Создание нового пользователя в MySQL

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

Давайте начнем с создания нового пользователя из консоли MySQL:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

К сожалению, на данном этапе пользователь "newuser" не имеет прав делать что-либо с базами данных. На самом деле, даже если если пользователь "newuser" попробует залогиниться (с паролем "password"), он не попадет в консоль MySQL.

Таким образом, первое, что нам необходимо сделать, это предоставить пользователю доступ к информации, которая ему потребуется.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Звездочки в этой команде задают базу и таблицу, соответственно, к которым у пользователя будет доступ. Конкретно эта команда позволяет пользователю читать, редактировать, выполнять любые действия над всеми базами данных и таблицами.

Поле завершения настройки прав доступа новых пользователей, убедитесь, что вы обновили все права доступа:

FLUSH PRIVILEGES;

Теперь ваши изменения вступят в силу.

Назначение привилегий

Для назначения прав конкретному пользователю можно использовать следующую схему:

GRANT [тип прав] ON [название базы данных].[название таблицы] TO ‘[имя пользователя]’@'localhost’;

Если вы хотите дать доступ к любой базе данных или к любой таблице, поставьте звездочку (*) вместо названия базы данных или таблицы.

Каждый раз, когда вы изменяете права доступа, не забудьте использовать команду Flush Privileges.

Лишения прав доступа практически идентично их назначению:

REVOKE [тип прав] ON [название базы данных].[название таблицы] FROM ‘[имя пользователя]’@‘localhost’;

По аналогии с использованием команды DROP для удаления базы данных, вы можете использовать эту команду и для удаления пользователя.

DROP USER ‘demo’@‘localhost’;

Для тестирования учетной записи созданного пользователя, разлогиньтесь с помощью команды:

quit

и залогиньтесь снова, введя в терминате следующую команду:

mysql -u [имя пользователя]-p

Основные утилиты MySQL.

В состав дистрибутива MySQL входят следующие утилиты:

  • mysqld
  • mysql
  • mysqladmin
  • mysqlaccess
  • mysqlshow
  • mysqldump
  • isamchk

Внимание! Утилиты - это отдельные программы, которые находятся в папке bin, а не команды MySQL. Для их запуска вам нужно выйти из консоли MySQL (если вы в ней), и использовать обычную консоль Windows. Так же рекомендуется перед запуском утилит сменить текущую папку на ту, в которой у вас находится MySQL.

Утилиты mysqld и mysql были подробно рассмотрены ранее, поэтому возвращаться к ним не будем. Кратко рассмотрим остальные.

Mysqladmin

Утилита для администрирования сервера. Может использоваться администратором, а также некоторыми пользователями, которым предоставлены определенные привилегии, например – Reload_priv, Shutdown_priv, Process_priv и File_priv. Данная команда может использоваться для создания баз данных, изменения пароля пользователя(администратор может изменить пароль любому пользователю, а рядовой пользователь – только свой собственный), перезагрузки и остановки сервера, просмотра списка процессов, запущенных на сервере. Mysqladmin поддерживает следующие команды:

  • Create [database_name] Создает базу данных
  • Drop [database_name] Удаляет базу данных и все таблицы в ней
  • Reload Перезагружает сервер
  • Shutdown Останавливает работу сервера MySQL
  • Processlist Выводит список процессов на сервере
  • Status Выводит сообщение о статусе сервера

Пример использования mysqladmin для изменения пароля:

mysqladmin -u your_name -p password new_password
Следует заметить, что в случае использования mysqladmin для установки пароля, не требуется использование функции password().Mysqladmin сам заботится о шифровании пароля.

Mysqlaccess

Используется для проверки привилегий пользователя для доступа к конкретной базе данных. Общий синтаксис:
mysqlaccess [host] [user] [db] опции
Полезная утилита для проверки прав доступа пользователя, если он получает сообщение Access denied, при попытке соединиться с базой данных. Опции:
  • -?, --help Справка
  • -u, --user=[username] Имя пользователя
  • -p, --password=[password] Пароль пользователя
  • -h, --host=[hostname] Имя хоста для проверки прав доступа
  • -d, --db=[dbname] Имя базы данных для проверки прав доступа
  • -U, --superuser=[susername] Имя суперпользователя(root)
  • -P, --spassword=[spassword] Пароль администратора
  • -b, --brief Выводит краткие сведения о таблице

Mysqlshow

Используется, чтобы показать, с какими базами данных работает сервер, какие таблицы содержит каждая БД и какие колонки есть в каждой таблице.Синтаксис:
mysqlshow [опции] [database [table [field]]]
Mysqlshow может использовать следующие параметры:
  • -?, --help Справка
  • -h, --host=[hostname] Имя сервера
  • -k, --key Показать ключи для таблицы
  • -p, --password=[password] Пароль пользователя
  • -u, --user=[username] Имя пользователя
  • -p, --port=[port] Порт для связи
  • -V, --version Вывести информацию о версии
Если ввести mysqlshow без аргументов, будут показаны все базы данных, если указать имя БД, будут показаны все таблицы в ней. Не забывайте так же указывать ваше имя пользователя и пароль, если он не пустой. Команды
mysqlshow
mysqlshow mysql

Mysqldump

Программа mysqldump используется для создания дампа содержания базы данных MySQL. Она пишет инструкции SQL в стандартный вывод. Эти инструкции SQL могут быть переназначены в файл. Можно резервировать базу данных MySQL, используя mysqldump, но при этом Вы должны убедиться, что в этот момент с базой данных не выполняется никаких других действий. Программа mysqldump поддерживает следующие параметры (Вы можете использовать короткую или подробную версию):
  • -#, --debug=[options] Вывести в протокол отладочную информацию. В общем виде 'd:t:o, filename`.
  • -?, --help Справка.
  • -c, --compleat-insert Генерируйте полные инструкции insert (не исключая значений, которые соответствуют значениям столбца по умолчанию).
  • -h, --host=[hostname] Соединиться с сервером hostname.
  • -d, --no-data Экспорт только схемы информации (исключая данные).
  • -t, --no-create-info Экспорт только данных, исключая информацию для создания таблицы. Противоположность -d.
  • -p, --password=[password] Пароль пользователя, для соединения с сервером MySQL. Обратите внимание, что не должно быть пробела между -p и паролем.
  • -q, --quick Не буферизовать результаты запроса, дамп выдать непосредственно к STDOUT.
  • -u, --user=[username] Имя пользователя. Если не задано, используется текущий логин.
  • -v, --verbose Вывести подробную информацию относительно различных стадий выполнения mysqldump.
  • -P, --port=[port] Порт для связи.
  • -V, --version Информация о версии.

Вы можете направить вывод mysqldump в клиентскую программу MySQL, чтобы копировать базу данных. ПРИМЕЧАНИЕ: Вы должны убедиться, что база данных не изменяется в это время, иначе Вы получите противоречивую копию!

Для справки:

mysqldump -u root -p mysql user>mysql-1.sql
mysqldump -u root mysql>mysql-2.sql

Примечание флаг –p используется в случае, если пользователь наделен паролем.
После выполнения этой команды появился файл mysql-1.sql и mysql-2.sql. Загрузите их в текстовый редактор, чтобы поподробнее изучить.

Задание

  • Запустите сервер MySQL. Зарегистрируйте своего пользователя в консольном приложении, задайте ему права.
  • С помощью утилиты Mysqlshow выполните команду на просмотр структуры и состав таблиц базы Mysql.
  • Приведите в отчете её схему. С помощью утилиты Mysqldump получите полный дамп базы Mysql (данные и таблицы), а также отдельные дампы таблиц и данных.

Контрольные вопросы:

  1. Каким способом возможен запуск серверной части СУБД.
  2. Что такое привилегия. Каково её предназначение.
  3. Какие основные утилиты входят в состав СУБД, какие функции они выполняют.