Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основное / Письменные лекции по дисциплине «Базы данных»

.pdf
Скачиваний:
98
Добавлен:
29.01.2021
Размер:
939.56 Кб
Скачать

INSERT

 

Разрешает использование

 

 

 

 

 

 

 

 

 

INSERT

 

 

 

 

 

 

 

 

 

 

 

 

LOCK TABLES

 

Разрешает использование

 

 

на таблицах,

 

 

 

LOCK TABLES

 

 

 

 

 

 

 

для которых есть привилегия SELECT

 

 

 

 

 

PROCESS

 

Разрешает использование SHOW FULL PROCESSLIST

 

 

 

 

 

 

REFERENCES

 

Зарезервировано для использования в будущем

 

 

 

 

 

 

 

 

 

 

 

 

RELOAD

 

Разрешает использование

 

 

 

 

 

 

 

 

 

FLUSH

 

 

 

 

 

REPLICATION

 

Предоставляет пользователю право запрашивать

 

CLIENT

 

местонахождение головного и подчиненных серверов

 

 

 

 

 

 

 

REPLICATION

 

Необходимо для подчиненных серверов при

 

 

 

SLAVE

 

репликации (для чтения информации из бинарных

 

 

 

журналов головного сервера)

 

 

 

 

 

 

SELECT

 

Разрешает использование

 

 

 

 

 

 

 

 

 

SELECT

 

 

 

 

 

SHOW

 

SHOW DATABASES выводит все базы данных

 

 

 

DATABASES

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SHUTDOWN

 

Разрешает использование

 

 

 

 

 

 

 

 

 

mysqladmin shutdown

 

SUPER

 

Позволяет установить одно соединение (один раз),

 

 

 

даже если достигнуто значение max_connections, и

 

 

 

запускать команды CHANGE

MASTER, KILL

thread,

 

 

 

mysqladmin debug, PURGE

MASTER LOGS и SET

GLOBAL

 

UPDATE

 

Разрешает использование

 

 

 

 

 

 

 

 

 

UPDATE

 

 

 

 

 

USAGE

 

Без привилегий

 

 

 

 

 

 

 

 

 

 

Чтобы лишить пользователя привилегий, предоставленных

командой GRANT

, воспользуйтесь значением priv

_type в GRANT

OPTION:

mysql> REVOKE GRANT OPTION ON ... FROM ...;

Для таблицы можно указать только следующие значения priv_type:

SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, INDEX и ALTER.

GRANT

Для столбца можно указать только следующие значения priv_type

(при использовании оператора column_list): SELECT, INSERT и UPDATE.

Глобальные привилегии можно задать, воспользовавшись синтаксисом ON *.*, а привилегии базы данных — при помощи синтаксиса ON db_name.*. Если указать ON * при открытой текущей базе данных, то привилегии будут заданы для этой базы данных. (Предупреждение: если указать ON * при отсутствии открытой текущей базы данных, это повлияет на глобальные привилегии!)

С тем, чтобы можно было определять права пользователям с конкретных компьютеров, в MySQL обеспечивается возможность указывать имя пользователя (user_name) в форме user@host. Если необходимо указать строку user, в которой содержатся специальные символы (такие как `-') или строку host, в которой содержатся специальные или групповые символы (такие как `%'), можно заключить имя удаленного компьютера или пользователя в кавычки (например,

'test-user'@'test-hostname').

В имени удаленного компьютера также можно указывать групповые символы. Например, user@"%.loc.gov" относится к user всех удаленных компьютеров домена loc.gov, а user@"144.155.166.%" относится к user

всех удаленных компьютеров подсети 144.155.166 класс C. Простая форма user является синонимом для user@"%".

Предупреждение: если при создании нового пользователя не указать оператор IDENTIFIED BY, будет создан пользователь без пароля. Это ненадежно с точки зрения безопасности.

Оператор WITH GRANT OPTION предоставляет пользователю возможность наделять других пользователей любыми привилегиями, которые он сам имеет на указанном уровне привилегий. При предоставлении привилегии необходимо проявлять

осмотрительность, так как два пользователя с разными привилегиями могут объединить свои привилегии!

Нельзя предоставить другому пользователю привилегию, которой нет у вас самого. Привилегия GRANT позволяет предоставлять только те привилегии, которыми вы обладаете.

Учтите, что если пользователю назначена привилегия GRANT на определенном уровне привилегий, то все привилегии, которыми этот пользователь уже обладает (или которые будут ему назначены в будущем!) на этом уровне, также могут назначаться этим пользователем. Предположим, пользователю назначена привилегия INSERT в базе данных. Если потом в базе данных назначить привилегию SELECT и указать WITH GRANT OPTION, пользователь сможет назначать не только привилегию SELECT, но также и INSERT. Если затем в базе данных предоставить пользователю привилегию UPDATE, пользователь сможет после этого назначать INSERT, SELECT и UPDATE.

Не следует назначать привилегии ALTER обычным пользователям. Это дает пользователю возможность разрушить систему привилегий путем переименования таблиц!

При запуске mysqld все таблицы назначения привилегий загружаются в память и с этого момента привилегии вступают в силу.

6.3. Утилита mysqldump

Утилита mysqldump позволяет получить дамп содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер (не обязательно MySQL-сервер). Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.

Также mysqldump имеет возможность развертывания баз данных из созданного sql-файла.

6.3.1. Создание дампа

Разберем пример простейшее использования, задампим базу данных

"database" при помощи перенаправления потока в файл "database.sql": mysqldump -uroot -h82.82.82.82 -p database > database.sql

где:

-u или --user=... — имя пользователя;

-h или --host=... — удаленный хост (для локального хоста можно опустить этот параметр);

-p или --password — запросить пароль; database — имя базы данных; database.sql — файл для дампа.

Для того чтобы сделать дамп несколько баз данных, необходимо использовать параметр --databases (или сокращенно -B), пример:

mysqldump -uroot -h82.82.82.82 -p -B database1 database2

database3 > databases.sql

А для того чтобы сделать дамп всех баз данных, необходимо использовать параметр --all-databases (или сокращенно -A), пример:

mysqldump -uroot -h82.82.82.82 -p -A > all-databases.sql

6.3.2. Развертывание дампа

Перенаправляем поток в обратную сторону и развертываем базу данных:

mysql -uroot -h82.82.82.82 -p database < database.sql

Или через mysql-console:

mysql> use database;

mysql> source database.sql

6.4. Утилита mysqlhotcopy

Утилита mysqlhotcopy

представляет собой Perl-сценарий,

использующий SQL-команды

LOCK

TABLES, FLUSH

TABLES и

Unix-утилиты cp или scp для быстрого получения резервной копии базы

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

mysqlhotcopy db_name [/path/to/new_directory]

mysqlhotcopy

db_name_1

...

db_name_n

/path/to/new_directory

mysqlhotcopy db_name./regex/

Если не указывать имена таблиц или использовать параметры -databases или -all-databases, то будет получен дамп базы данных в целом (соответственно — всех баз данных).

6.5. Утилита mysqlcheck

Начиная с версии MySQL 3.23.38 можно применять новый инструмент для проверки и восстановления MyISAM-таблиц. Отличие mysqlcheck от myisamchk состоит в том, что утилита mysqlcheck должна использоваться при работающем сервере mysqld, в то время как myisamchk — при остановленном. Преимущество же заключается в том, что теперь не нужно останавливать сервер для проверки или восстановления таблиц.

Утилита mysqlcheck использует соответствующие команды

MySQL-сервера CHECK, REPAIR, ANALYZE и OPTIMIZE удобным для пользователя образом.

Существует три альтернативных способа запуска mysqlcheck:

shell> mysqlcheck [OPTIONS] database [tables]

shell> mysqlcheck [OPTIONS] --databases DB1 [DB2 DB3...] shell> mysqlcheck [OPTIONS] --all-databases

Команда SHOW CREATE TABLE TableName; позволяет получить sql-код создания таблицы TableName.

Лекция 7. Администрирование БД

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

Задачи администратора БД;

Команды для работы с БД;

Просмотр сведений о таблице;

Утилита MySQLAdmin;

Получение информации о БД;

Статус таблиц;

Просмотр таблиц, доступных в БД;

Получение информации о статусе сервера;

Получение информации о переменных;

Получение информации о процессах;

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

Структура SQL;

Завершение потока;

Очистка КЭША MySQL;

Файлы журналов;

Как обезопасить MySQL от хакеров.

7.1. Администрирование базы данных Администрирование БД — это функция управления БД.

Лицо ответственное за администрирование БД называется

«Администратор базы данных» (АБД) или «Database Administrator» (DBA).

7.2.Задачи АБД

Проектирование БД;

Оптимизация производительности БД;

Обеспечение и контроль доступа к БД;

Обеспечение безопасности в БД;

Резервирование и восстановление БД;

Обеспечение целостности БД;

Обеспечение перехода на новую версию СУБД.

7.3.Команды для работы с БД

1.Просмотр доступных баз данных: SHOW DATABASES;

2.Создание новой БД: CREATE DATABASE;

3.Выбор БД для использования: USE <database_name>;

4.Импорт SQL-команд из файла .sql: SOURCE

<path_of_.sql_file>;

5. Удаление базы данных: DROP DATABASE <database_name>;

7.4. Просмотр сведений о таблице

Для просмотра сведений о таблице используется команда: DESCRIBE. Пример:

DESCRIBE имя_таблицы;

7.5. Утилита MySQLAdmin

MySQLAdmin — это утилита командной строки, которая поставляется с MySQL сервером и используется администраторами баз данных для выполнения некоторых простых MySQL задач, таких как установка пароля root или другого пользователя, изменение пароля root или другого пользователя, мониторинг процессов mysql, перезагрузка привилегий, проверка статуса сервера и т. д.

7.6. Получение информации о БД

SHOW DATABASES // Посмотреть все БД

SHOW [OPEN] TABLES [FROM db_name] // Показать все открытые таблицы с БД

SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] //

Показать колонки вместе с привилегиями текущего пользователя с указанной таблицы и указанной ДБ

SHOW INDEX FROM tbl_name [FROM db_name] // Посмотреть все индексы

SHOW TABLE STATUS [FROM db_name] // Посмотреть статус таблицы

SHOW STATUS // Информацию по состоянию сервера

SHOW VARIABLES // Отображает значения некоторых системных

переменных

SHOW LOGS // Показывает логи, которые мы фиксируем в

журналах

SHOW

GRANTS FOR user // Команда, которая показывает

привилегии, назначенные тому или иному пользователю

 

SHOW

CREATE

TABLE table_name //

Предоставляет

информацию

о том, как была

объявлена таблица

(но реальная

структура

таблицы может немного отличаться)

SHOW MASTER STATUS // Информация состояния binlog главной системы

SHOW MASTER LOGS // Список двоичных журналов головного сервера

SHOW SLAVE STATUS // Информация о состоянии существенных параметров потока сервера

В общем, команда SHOW позволяет получить информацию о БД,

таблицах, полях и индексах таблиц, а также информацию о состоянии сервера MySQL.

Информация выводится только при наличии у пользователя соответствующих привилегий и прав доступа.

SHOW DATABASES выводит список существующих БД на сервере

MySQL.

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

SHOW FIELDS FROM table FROM database;

SHOW FIELDS FROM database.table;

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

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

SHOW COLUMNS и его синоним SHOW FIELDS выводят список полей

таблиц с описанием типом. Если используется ключевое слово FULL, дополнительно выводится информация о привилегиях текущего пользователя.

SHOW INDEX и его синоним SHOW KEYS возвращают данные о

первичных ключах и индексах таблицы. Столбцы результата команды SHOW INDEX имеют значения, перечисленные ниже:

Столбец

Значение

 

 

Table

Имя таблицы

 

 

Non_unique

0 если индекс не может содержать дублирующихся

 

значений

 

 

Key_name

Имя индекса

 

 

Seq_in_index

Порядковый номер столбца в индексе, начиная с 1

 

 

Column_name

Имя столбца

 

 

Collation

Как столбцы отсортированы в индексе. В MySQL в

 

данном столбце могут присутствовать значения 'A' (в

 

порядке возрастания) или NULL (не отсортирован)

 

 

Cardinality

Количество уникальных значений в индексе.

 

Обновляется путем запуска isamchk -a

 

 

Sub_part

Количество индексированных символов, если столбец

 

индексируется частично. Если проиндексирован весь

 

ключ, то будет содержаться значение NULL

 

 

Null

Содержит значение 'YES', если столбец может

 

содержать NULL

 

 

Index_type

Используемый метод индексирования

 

 

Comment

Различные примечания. В версиях MySQL < 4.0.2

 

выдается, является индекс FULLTEXT или нет

Информация о таблице выводится с помощью команды SHOW TABLE

STATUS, список возвращаемых значений которой приведен ниже:

Столбец

 

 

 

Значение

 

 

 

 

 

 

Name

Имя таблицы

 

 

 

 

 

 

 

 

Type

Тип таблицы

 

 

 

 

 

 

Row_format

Формат хранения строк

 

 

(Fixed

, Dynamic

, или Compressed

)

 

 

 

 

Rows

Количество строк

 

 

 

 

 

Avg_row_length

Средняя длина строки

 

 

 

 

Data_length

Размер файла данных

 

 

 

Max_data_length

Максимальная длина файла данных

 

 

 

Index_length

Длина индексного файла

 

 

 

Data_free

Количество распределенных, но не используемых

 

байтов

 

 

 

 

 

 

Auto_increment

Следующее значение автоинкремента

 

 

 

Create_time

Время создания таблицы

 

 

 

Update_time

Время последнего обновления файла данных

 

 

Check_time

Время последней проверки таблицы

 

 

Create_options

Дополнительные параметры, использовавшиеся для

 

команды CREATE

TABLE

 

 

 

Comment

Примечания, внесенные при создании таблицы (или

 

информация о причинах, почему MySQL не может

 

получить доступ к данным в таблицах)

7.7. Статус таблиц

CHECK TABLE tbl_name [, tbl_name .] [option [option]] option = QUICK | FAST | EXTEND | CHANGED

ANALYZE TABLE tbl_name [, tbl_name.]