Вы находитесь на странице: 1из 28

Лекция 01.12.2020 г.

Администрирование базы данных

по дисциплине:
«Базы данных»

Поток ИКПИ-81-85, ИКВТ-81,82


План лекции:
1. Получение информации о: базе
данных; статусе сервера;
переменных; процессах;
привилегиях.

2. Завершение потока, очистка


кэша.

3. Файлы журналов.

4. Безопасность.
Администрирование базы
данных

Администрирование базы данных – это


функция управления базой данных (БД).

Лицо ответственное за администрирование


БД называется “Администратор базы
данных” (АБД) или “Database Administrator”
(DBA).
Задачи АБД
• Проектирование базы данных.
• Оптимизация производительности базы данных.
• Обеспечение и контроль доступа к базе данных.
• Обеспечение безопасности в базе данных.
• Резервирование и восстановление базы данных.
• Обеспечение целостности баз данных.
• Обеспечение перехода на новую версию СУБД.
Команды для работы с базами
данных
1. Просмотр доступных баз данных
SHOW DATABASES;
2. Создание новой базы данных
CREATE DATABASE;
3. Выбор базы данных для использования
USE <database_name>;
4. Импорт SQL-команд из файла .sql
SOURCE <path_of_.sql_file>;
5. Удаление базы данных
DROP DATABASE <database_name>;
Просмотр сведений о таблице
mysqladmin – это утилита командной строки,
которая поставляется с MySQL сервером и
используется администраторами баз данных
для выполнения некоторых простых MySQL
задач, таких как установка пароля root или
другого пользователя, изменение пароля root
или другого пользователя, мониторинг
процессов mysql, перезагрузка привилегий,
проверка статуса сервера и т.д.
Получение информации о: базе
данных
SHOW DATABASES

or SHOW [OPEN] TABLES [FROM db_name]

or SHOW [FULL] COLUMNS FROM tbl_name [FROM


db_name]

or SHOW INDEX FROM tbl_name [FROM db_name]

or SHOW TABLE STATUS [FROM db_name]


or SHOW STATUS

or SHOW VARIABLES

or SHOW LOGS

or SHOW [FULL]

or SHOW GRANTS FOR user

or SHOW CREATE TABLE table_name

or SHOW MASTER STATUS

or SHOW MASTER LOGS

or SHOW SLAVE STATUS

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

SHOW DATABASES выводит список существующих баз данных на сервере MySQL.

Вывод информации о таблицах и столбцах может происходить с использованием ключевого


слова FROM или без него с указанием пути к исследуемому объекту.

mysql> SHOW FIELDS FROM table FROM database;


mysql> SHOW FIELDS FROM database.table;

SHOW TABLES Выводит список существующих таблиц.

Ключевое слово OPEN указывает MySQL выводить только открытые таблицы, данные которых
находятся в КЭШе MySQL.

SHOW COLUMNS и его синоним SHOW FIELDS выводят список полей таблиц с описанием
типов. Если используется ключевое слово FULL, дополнительно выводится информация о
привилегиях текущего пользователя.
SHOW INDEX и его синоним SHOW KEYS возвращают
данные о первичных ключах и индексах таблицы. Столбцы
результата команды SHOW INDEX Имеют значения,
перечисленные
Информация о таблице выводится с помощью
команды SHOW TABLE STATUS, список
возвращаемых значений которой приведен
Статус таблиц
CHECK TABLE tbl_name [, tbl_name .] [option [option]]
option = QUICK | FAST | EXTEND | CHANGED
ANALYZE TABLE tbl_name [, tbl_name.]

Проверка данных таблиц на наличие ошибок выполняется функцией CHECK


TABLE.

Если найдена ошибка в таблице данных или индексов, таблица помечается как
дефектная и не может быть использована до тех пор, пока не будет
восстановлена.

Функция ANALYZE TABLE проверяет состояние индексов в таблицах.


На время проверки таблица обычно блокируется "на чтение".
Просмотр таблиц, доступных в
базе данных
SHOW TABLES
Получение информации о
статусе сервера

Команда SHOW STATUS


выводит список runtime-
переменных, по которым
можно судить о состоянии
сервера MySQL.
Получение информации о
переменных
В SQL Server имеется более тридцати глобальных переменных, не имеющих
параметров, которые определяются и поддерживаются системой. Все
глобальные переменные имеют префикс в виде двух символов @. Вы можете
извлечь значение любой из них с помощью простого запроса SELECT, как в
следующем примере:
 
SELECT @@CONNECTIONS
 
Здесь используется глобальная переменная @@CONNECTIONS для
извлечения количества подключений к SQL Server со времени запуска
программы.
 
 
Получение информации о переменных

@@ERROR - Содержит номер ошибки, возникшей при выполнении последнего


оператора в текущем соединении. Если ошибка не обнаружена, содержит 0. Значение этой
системной переменной переустанавливается после выполнения каждого очередного
оператора. Если требуется сохранить содержащееся в ней значение, то это значение
следует переносить в локальную переменную сразу же после выполнения оператора, для
которого должен быть сохранен код ошибки.

@@IDENTITY - Содержит последнее идентификационное значение, вставленное в базу


данных в результате выполнения последнего оператора INSERT. Если в последнем
операторе INSERT не произошла выработка идентификационного значения, системная
переменная @@IDENTITY содержит NULL. Это утверждение остается справедливым,
даже если отсутствие идентификационного значения было вызвано аварийным
завершением при выполнении оператора. А если с помощью одного оператора
осуществляется несколько операций вставки, этой системной переменной присваивается
только последнее идентификационное значение.
Получение информации о
процессах
SHOW PROCESSLIST выводит информацию о выполняющихся потоках.

Для того, чтобы видеть все потоки, пользователю нужно иметь привилегии
processlist, иначе он сможет увидеть только свои собственные потоки.

Без указания опции FULL выводятся только первые 100 или меньше
символов запроса потока.

Прервать выполнение потока можно с помощью функции KILL.


Получение информации о привилегиях

Важно не только давать и отбирать


привилегии, но и иметь информацию
о том, какими правами доступа
обладает каждый из субъектов.

PRIVILEGES записывает и заново


открывает информацию о привилегиях
пользователей. Это делается для
вступления в силу изменений,
сделанных в политике привилегий.
Завершение потока

KILL thread_id

Каждое подключение к MySQL выполняется в отдельном


потоке. При необходимости можно определить поток командой
SHOW PROCESSLIST и отключить соединение с ним.

Для того, чтобы видеть все потоки, необходимо иметь


привилегии Process_priv, иначе видны только потоки текущего
пользователя.
Очистка кэша

FLUSH [HOSTS]
[.LOGS]
[.PRIVILEGES]
[.[TABLE | TABLES] table_name [, table_name.]]
[. TABLES WITH READ LOCK]
[.STATUS]

Очистка КЭШа MySQL сбрасывает всю информацию, находящуюся в


КЭШе данных MySQL, на диск.

Для выполнения этой операции необходимы привилегии Reload_priv.


Очистка кэша
Ключевое слово HOST указывает MySQL очистить информацию о клиентских площадках.
Применяется при смене клиентского IP-адреса или появлении ошибок связи с сервером.

LOGS закрывает и повторно открывает все журналы. Если определен журнал изменений или
binary-журнал без расширения, то номер в расширении имени журнала будет увеличен на 1
относительно предыдущего файла.

Использование TABLES без перечисления имен таблиц закрывает и открывает все открытые
таблицы. При этом записываются все изменения, внесенные в таблицы. При перечислении
имен таблиц будет перезагружена информация только из указанных таблиц.

FLUSH TABLES WITH READ LOCK закрывает все открытые таблицы и блокирует их чтение
до тех пор, пока не будет выполнена команда UNLOCK TABLES. БЛОКИРОВАНИЕ базы
данных подобным образом позволяет выполнять резервное копирование базы данных.

STATUS обнуляет runtime-переменные сервера.


Файлы журналов
Одно из основных требований к СУБД - надежное хранение данных во внешней памяти.

Под надежностью хранения понимается то, что СУБД должна быть в состоянии
восстановить последнее согласованное состояние БД после любого аппаратного или
программного сбоя.

Обычно рассматриваются два возможных вида аппаратных сбоев: так называемые мягкие
сбои, которые можно трактовать как внезапную остановку работы компьютера (например,
аварийное выключение питания), и жесткие сбои, характеризуемые потерей информации
на носителях внешней памяти.

Примерами программных сбоев могут быть аварийное завершение работы СУБД (из-за
ошибки в программе или некоторого аппаратного сбоя) или аварийное завершение
пользовательской программы, в результате чего некоторая транзакция остается
незавершенной.

Первую ситуацию можно рассматривать как особый вид мягкого аппаратного сбоя; при
возникновении последней требуется ликвидировать последствия только одной транзакции.
Файлы журналов
Журнал - это особая часть БД, недоступная пользователям
СУБД и поддерживаемая особо тщательно (иногда
поддерживаются две копии журнала, располагаемые на
разных физических дисках), в которую поступают записи обо
всех изменениях основной части БД.

В разных СУБД изменения БД журнализуются на разных


уровнях: иногда запись в журнале соответствует некоторой
логической операции изменения БД (например, операции
удаления строки из таблицы реляционной БД), а порой
запись соответствует минимальной внутренней операции
модификации страницы внешней памяти.
SHOW LOGS выводит информацию о существующих журналах.
Как обезопасить MySQL от
хакеров
При подключении к серверу MySQL используется, как правило,
пароль.

По линии связи пароль не передается в виде открытого текста, но


алгоритм шифрования не очень сложный.
Толковый хакер, если ему удастся перехватить трафик между
клиентом и сервером, при определенной настойчивости может
взломать пароль.

Поэтому если связь между клиентом и сервером осуществляется


по ненадежной сети, для шифрования связи следует использовать
SSH-туннель.
Для обеспечения безопасности
MySQL-системы необходимо
строго придерживаться
следующих рекомендаций:
1. У всех пользователей MySQL должны быть пароли.

2. Для приложений клиент/сервер является общепринятым, что клиент может указывать любое имя пользователя, но
если для other_user не задан пароль, то кто угодно может зайти под любым именем, просто введя mysql -u other_user
db_name.

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

4. Не предоставляйте привилегии PROCESS всем пользователям.

5. Команда mysqladmin processlist выводит текст запросов, обрабатываемых в данный момент.

6. Следовательно, любой пользователь, имеющий право на выполнение этой команды, получает возможность
прочитать, например, такой запрос другого пользователя, как UPDATE user SET password=PASSWORD('not_secure').

7. Чтобы обеспечить здесь хоть минимальную защиту, все файлы создаваемые с помощью команды SELECT ... INTO
OUTFILE, сделаны общедоступными для записи, но перезаписать существующие файлы нельзя.

8. Привилегия FILE может быть также использована для чтения любого файла, доступного пользователю, от имени
которого запускается сервер.
9. Можно также прочитать любой файл в текущую базу данных.

10.Это может быть использовано в корыстных целях. Возможно, например, с помощью команды LOAD DATA загрузить
`/etc/passwd' в таблицу и прочесть ее позже с помощью SELECT.

11.Чтобы ограничить число подключений, доступных для отдельного пользователя, можно в mysqld задать значение
переменной max_user_connections.