ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.11.2023
Просмотров: 47
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Процедуры вызываются оператором CALL и могут использовать как входные параметры (передающие значения в процедуру), так и выходные параметры (возвращающие результаты процедуры вызывающему программному объекту). Процедуры могут вызываться из процедур, функций и других типов программных объектов. Хранимые процедуры, создаются оператором CREATE PROCEDURE. Модификация тела хранимой процедуры осуществляется оператором АLTER PROCEDURE.
Эти операторы могут использовать:
• пользователи, которым разрешено создавать объекты базы данных, т.е. тем, кто имеет класс полномочий - RESOURCE;
• администратор базы данных.
Любая хранимая процедура всегда выполняется с привилегиями ее владельца. Это позволяет пользователям, не имеющим прямого доступа к таблицам данных, возможность обращения к этим таблицам через процедуры, которые они имеют право использовать. Для каждой таблицы хранимые процедуры представляет собой унифицированный механизм взаимодействия с ней. Это лишает пользователей сделать что-нибудь лишнее с таблицами данных и способствует поддержанию целостности данных.
Триггер — это специальный вид хранимой процедуры, которую СУБД вызывает при выполнении операций модификации соответствующих таблиц.
Триггер автоматически активизируется при выполнении операции, с которой он связан. Триггеры связываются с одной или несколькими операциями модификации над одной таблицей, Например, триггер может выполняться при вставке, изменении или удалении строки в существующей таблице.
Триггер сообщает СУБД, как нужно выполнять команды SQL INSERT, UPDATE,
DELETE чтобы выполнялись бизнес правила организации.
33. Администрирование баз данных. Функции администратора.
Администрация базы данных в основном состоит в обеспечении того, чтобы точная и непротиворечивая информация была доступна пользователям в нужное время и в нужной форме.
Администратор базы данных должен хорошо знать структуру БД, состав и все характеристики системы, так как сбои и нарушения в системе могут возникнуть в самых различных местах.
Функции администратора базы данных главным образом лежат в области работы с пользователями базы данных, планировании, проектировании и реализации информационных систем. Эффективная работа включает в себя разработку общих стандартов и процедур, целью которых является эффективный контроль целостности и защиты данных.
Администратор БД отвечает за следующие аспекты:
• проектирование структуры БД, методы упорядочивания файлов
БД, методы доступа к файлам БД;
• задание ограничений целостности при описании структуры БД и обработки БД;
• первоначальную загрузку и ведение БД;
• защиту данных;
• обеспечение восстановления БД;
• сбор статистики по характеру запросов;
• анализ эффективности работы БД;
• работу с конечными пользователями;
• подготовку и поддержку ПО;
• организационно-методическую работу по проектированию БД.
Администратор базы данных назначается в момент инсталляции системы и наделяется рядом особых привилегий: располагает всеми полномочиями по всем объектам базы данных и для всех команд.
При решении вопросов защиты данных в обязанности администратора базы данных входит следующее:
• классификация данных в соответствии с их использованием;
• определение прав доступа отдельных пользователей к определенным группам данных в базе и ограничений на характер операций, выполняемых пользователем с этими данными;
• организация системы контроля доступа к данным;
• тестирование всех вновь создаваемых средств защиты данных;
• периодическое проведение проверок правильности функционирования системы защиты данных;
• исследование возникающих случаев нарушения защиты данных и проведение политики их предотвращения;
• исследование современных достижений в области технологии защиты данных и их использование для совершенствования соответствующих средств функционирующей БД и т. п.
34. Обеспечение согласованности данных в
многопользовательском режиме обработки. Понятие
транзакции.
Пусть несколько пользователей, не сговариваясь заранее и действуя примерно в одно и то же время, хотят изменить значение атрибута в некоторой таблице, например, зарезервировать несколько мест на определенный рейс или заявить о готовности осуществить покупку некоторого товара в электронном магазине.
Самое простое решение, гарантирующее соответствие состояния таблицы естественно понимаемому положению дел в предметной области,
— выстроить все запросы в очередь.
Именно это решение применяется во многих случаях в сетевых операционных системах: открытый на запись файл недоступен (ограниченно доступен) для других пользователей сети. Для СУБД такой способ обеспечения согласованного изменения данных (по сути, целостности данных) приведет к катастрофическому снижению производительности.
На начальных этапах развития СУБД их создатели шли по пути деления таблиц на внутреннем уровне представления на страницы и осуществление блокировок на уровне страниц. Позже появились более совершенные технологии, в основе которых лежит понятие транзакции.
Транзакция (transaction) представляет собой последовательность операторов обработки данных на языке SQL, которая представляет собой логическую единицу работы СУБД. Управление транзакциями обеспечивает интерпретацию некоторого блока операций как неделимого целого.
Управление транзакциями гарантирует, что, либо будут выполнены все операции из блока, либо не будет выполнено ни одной.
На основании этого тезиса можно выделить следующие свойства транзакций:
1) Атомарности - транзакция должна быть выполнена целиком или не выполнена вовсе.
2) Согласованности - по мере выполнения транзакции данные переходят из одного согласованного состояния в другое, т.е. транзакция не разрушает взаимной согласованности данных.
3) Изолированности - транзакции, конкурирующие за доступ к БД, выполняются изолированно друг от друга, но для пользователя это может выглядеть так, что они выполняются одновременно.
4) Долговечности. Если транзакция успешно завершена, то изменения данных, которые были произведены, не могут быть потеряны ни при каких обстоятельствах.
Транзакции необходимы для устранения конфликтов пользователей, пытающихся одновременно обращаться к одним и тем же данным.
35. Использование транзакций для восстановления после сбоев
или отказов системы. Причины отказов.
Потеря изменений происходит в ситуации, когда две или несколько программ читают одни и те же данные, вносят в них какие-либо изменения и затем пытаются одновременно записать результат на прежнее место.
Разумеется, в базе данных могут быть сохранены изменения, выполненные только одной программой - другие изменения будут потеряны.
Транзакции используются для восстановления данных после сбоя или отказа системы. Источниками отказов могут быть:
1) Системные ошибки. Системные ошибки возникают тогда, когда система вошла в нежелательной состояние, например, такое, как взаимоблокировка, не позволяющая нормально продолжить выполнение программы. Такой отказ может приводить, а может и не приводить к повреждению файлов данных. Принцип блокировки заключается в том, что когда пользователь выбирает данные из БД, СУБД автоматически запрещает к ним доступ, чтобы какой-либо пользователь не мог провести над ними операции обновления. Существует много видов блокировок. В основном операции блокирования и разблокирования производятся автоматически, но в некоторых системах пользователи могут управлять определенными аспектами блокировок, например с помощью команд SQL они могут выбрать уровень применения блокировки (уровень строки или уровень таблицы).
2) Отказы оборудования. Два наиболее часто встречающихся отказа: ошибка диска (авария головки), потеря способности передачи данных через сеть.
3) Логические ошибки. Плохие данные или их отсутствие часто является причиной, не позволяющей нормально продолжить выполнение программы.
В стандарте ANSI/ISO SQL включены операторы фиксации транзакции и отката транзакции СОММIТ, ROLLBACK.
• СОММIТ означает успешное завершение транзакции, все изменения принимаются.
• ROLLBACK - прерывание транзакции, отмена выполненных действий сделанных в БД в рамках этой транзакции
Если какую-то транзакцию необходимо отменить до того, как она будет выполнена - либо по причине какого-то сбоя, либо просто потому, что пользователю что-то не понравилось, - результаты выполнения всех ее операторов, которые успели завершиться, должны быть отменены.
Транзакцию можно отменить (или вернуть в исходное положение) с помощью команды транзакции ROLLBACK в любой момент до выполнения команды транзакции СОММIТ.
Для сохранения промежуточных состояний, подтверждения или отката транзакции, используется специальный механизм, называемый журналом
транзакций. Журнал транзакций создается на этапе создания базы данных и обеспечивает надежное хранение данных, возможность восстановления согласованного состояния БД после любого рода сбоев.
В журнале транзакций фиксируются все изменения БД. После сбоя восстанавливается всегда последнее согласованное состояние базы.
Восстановление базы происходит в следующих случаях:
1. Индивидуальный откат транзакций (применение ROLLBACK, аварийное завершение работы программы, взаимоблокировка, при параллельном выполнении транзакций).
2. Восстановление после потери содержимого оперативной памяти (мягкий сбой) (аварийное выключение питания, неустранимый сбой процессора).
3. Поломка ВЗУ (жесткий сбой).
В журнале транзакций, каждая транзакция имеет свой номер. Все изменения помечаются номером транзакции и значениями изменяемых атрибутов, там же сохраняются команды начала и конца транзакции.
36. Идентификация и аутентификация пользователей баз
данных (установление подлинности)
На самом элементарном уровне концепции обеспечения безопасности баз данных и управления информацией исключительно просты. Необходимо поддерживать два фундаментальных принципа: проверку полномочий
(санкционирование) и проверку подлинности (аутентификация).
Идентификация - присвоение объекту уникального имени или числа.
Проверка полномочий (авторизация пользователя) основана на том, что для каждого пользователя или процесса информационной системы устанавливается набор санкционированных действий, которые он может выполнять по отношению к определенным объектам.
Аутентификация или проверка подлинности означает достоверное подтверждение того, что пользователь или процесс, пытающийся выполнить санкционированные действия, действительно является тем, за кого он себя выдает. Указанные проверки используются совместно для принятия решения о доступе.
При подключении пользователя к серверу MySQL происходит
идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
Подлинность обычно устанавливается один раз, но в установках, обеспечивающих высокую степень безопасности, может потребоваться периодическая перепроверка или перепроверка в определенных условиях.
Повторное установление подлинности желательно, например, после системных сбоев. Процедуры идентификации, аутентификации и авторизации являются обязательными для любой защищенной ИС.
Можно выделить три типа принципов, лежащих в основе конкретных процедур аутентификации:
— аутентификация, основанная на знании (пользователь обладает некоторым конфиденциальным знанием);
— аутентификация, основанная на наличии (пользователь обладает некоторым конфиденциальным предметом);
— аутентификация, основанная на проверке характеристик
(пользователь предъявляет некоторые уникальные характеристики).
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
37. Учетные записи пользователей. Общие сведения
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User. Таким образом, в MySQL идентификация пользователя основана не только на имени пользователя, но и на комбинации имени пользователя и хоста, с которого пользователь подключается.
В качестве хоста может быть любой компьютер или сервер, подключенный к локальной или глобальной сети. Это значит, что можно ограничить круг хостов, с которых разрешено подключаться данному пользователю. Например, можно создать разные учетные записи (а, следовательно, назначить разные привилегии доступа) для пользователя student, подключающегося с компьютера localhost, и для пользователя student, подключающегося с компьютера somedomain.com.
При подключении пользователя к серверу MySQL происходит идентификация пользователя, то есть поиск его учетной записи. Этот поиск в таблице user начинается с тех записей, в которых в поле Host не содержится подстановочных символов. Так, например, если в таблице зарегистрированы две учетные записи с идентификаторами, соответственно, 'student'@% и 'student'@'localhost', то при подключении пользователя с именем student с локального компьютера будет выбрана вторая запись.
После определения учетной записи выполняется аутентификация
(проверка подлинности) пользователя. Суть аутентификации состоит в том, пароль, введенный пользователем, сравнивается с паролем учетной записи, хранящемся в поле Password таблицы user.
38. Создание учетной записи пользователя, установка пароля,
просмотр учетных записей и их удаление.
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
этот журнал можно по дате создания. Далее перечисляют имена всех журналов вплоть до последнего, созданного перед сбоем.
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6
Учетная запись пользователя MySQL представляет собой запись
(строку) в таблице user (Пользователь) системной базы данных mysql.
Первичным ключом в этой таблице служат поля Host и User.
Для создания учетной записи пользователя используется команда:
CREATE USER <идентификатор пользователя>
[IDENTIFIED BY [PASSWORD] '<Пароль>'];
Если же вводится не реальный, а зашифрованный пароль, то необходимо указывать параметр PASSWORD. Это позволяет избежать передачи незашифрованного пароля при отправке на сервер команды
CREATE USER. Для получения зашифрованного значения из реального пароля можно использовать функцию: PASSWORD('<Реальный пароль>')
Установка пароля выполняется следующей командой:
SET PASSWORD [FOR <идентификатор пользователя>] =
PASSWORD('<Пароль>');
Параметрами этой команды являются идентификатор учетной записи пользователя и новый пароль для этой записи. Если не указать идентификатор пользователя, то ваш пароль будет изменен.
Например, при выполнении следующей команды: SET PASSWORD FOR
'student'@'%' =PASSWORD('newstudent'); для пользователя student будет установлен пароль newstudent при подключении с любого компьютера.
Для удаления учетной записи пользователя используется команда:
DROP USER <идентификатор пользователя>;
После удаления учетной записи пользователь больше не может подключаться к серверу MySQL. Однако, если в момент удаления пользователь был подключен к серверу, то соединение не прерывается.
Вместе с учетной записью удаляются все привилегии доступа для этой записи.
Чтобы получить информацию обо всех зарегистрированных пользователях необходимо выполнить запрос к таблице user (Пользователь) системной базы данных mysql следующим образом:
SELECT * FROM mysql.user;
Первые три поля Host, User и Password в таблице user нам уже известны.
Далее следуют поля глобальных привилегий, которые будут рассмотрены в разделе «Система привилегий доступа», а также поля, в которых содержатся параметры безопасности соединения и сведения о ресурсах, предоставляемых соединению (эти поля нами рассматриваться не будут).
39. Система привилегий доступа. Общие сведения.
Под привилегией будем понимать некоторый поддерживаемый системой признак, который определяет право пользователя на выполнение той или иной операции с базой данных.
Для создания привилегии доступа в MySQL необходимо определить следующие параметры:
• идентификатор учетной записи пользователя, которому предоставляется привилегия;
• тип привилегии, то есть тип операций, которые будут разрешены пользователю;
• область действия привилегии.
MySQL позволяет использовать следующие основные типы привилегий:
•
ALL [PRIVILEGES] – предоставляет все привилегии, кроме GRANT OPTION, для указанной области действия;
•
ALTER – разрешает выполнение команд ALTER DATABASE и
•
ALTER TABLE;
•
CREATE – разрешает выполнение команд CREATE
•
DATABASE и CREATE TABLE;
•
CREATE USER – разрешает выполнение команд CREATE
USER, DROP USER, RENAME USER;
•
DELETE – разрешает выполнение команды DELETE;
•
DROP – разрешает выполнение команд DROP DATABASE и DROP TABLE;
•
FILE – разрешает чтение и создание файлов на сервере с помощью команд SELECT…INTO OUTFILE и LOAD DATA INFILE;
•
INDEX – разрешает выполнение команд CREATE INDEX и DROP INDEX;
•
INSERT – разрешает выполнение команды INSERT;
•
SELECT – разрешает выполнение команды SELECT;
•
LOCK TABLES – разрешает выполнение команды LOCK TABLES при наличии привилегии SELECT для блокируемых таблиц;
•
SHOW DATABASES – разрешает отображение всех баз данных при выполнении команды SHOW DATABASES (если эта привилегия отсутствует, то в списке будут отображены только те базы данных, по отношению к которым у пользователя есть какая-либо привилегия);
•
RELOAD – разрешает выполнение команды FLUSH;
•
SUPER – привилегия администратора сервера; в частности, разрешает выполнение команды SET GLOBAL;
•
UPDATE – разрешает выполнение команды UPDATE;
•
GRANT OPTION – разрешает назначать и отменять привилегии другим пользователям (эта возможность распространяется только на те привилегии, которые есть у самого пользователя для указанной области действия).
Область действия привилегии может распространяться на все базы данных (такие привилегии называются глобальными), отдельную базу данных, таблицу или поле таблицы.
Для каждого типа привилегии имеются свои допустимые области действия. Так, привилегии FILE, SHOW DATABASES, RELOAD, SUPER и CREATE
USER могут быть только глобальными.
Чтобы получить разрешение на выполнение операции с каким-либо объектом базы данных, пользователю достаточно иметь привилегию соответствующего типа для какой-либо области действия, содержащей этот объект.
40. Предоставление, просмотр и отмена привилегий доступа
пользователей.
Для предоставления привилегий пользователям используется команда GRANT, имеющая следующий формат:
GRANT <Тип привилегии>
[(<Список полей>)] ON <Область действия>
TO <идентификатор пользователя>
[WITH GRANT OPTION];
В качестве области действия можно указать одно из следующих значений:
• *.* – привилегия будет действовать глобально;
• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;
• * – привилегия будет действовать для базы данных, которая во время выполнения команды GRANT является текущей;
• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных).
Существует ряд особенностей, которые необходимо учитывать при назначении привилегий. Рассмотрим их подробнее.
• Если учетная запись с указанным идентификатором не существует, то команда GRANT автоматически создает такую запись. Чтобы отключить автоматическое создание учетной записи нужно в значении переменной sql_mode указать ключевое слово NO_AUTO_CREATE_USER.
• Привилегия ALTER должна предоставляться с осторожностью, поскольку пользователь может изменить настройки системы привилегий путем переименования таблиц и столбцов.
• Использование параметра WITH GRANT OPTION при создании привилегии дает пользователю возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия.
Для удаления привилегии, которая была ранее назначена пользователю, используется команда REVOKE, имеющая следующий формат:
REVOKE <Тип привилегии>
[(<Список столбцов>)] ON <Область действия>
FROM <идентификатор пользователя>;
Параметры команды REVOKE по своему смыслу аналогичны параметрам команды GRANT. Аналогичны и правила вступления изменений в силу.
Отметим, что в MySQL при удалении баз данных, таблиц и полей связанные с ними привилегии не удаляются автоматически, а для удаления таких привилегий требуется выполнить команду REVOKE.
Чтобы узнать, к каким объектам имеет доступ конкретный
пользователь, служит команда:
SHOW GRANTS [FOR идентификатор пользователя>];
Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, то можно увидеть свои привилегии.
Чтобы получить информацию о пользователях, обладающих привилегиями доступа к тому или иному объекту базы данных можно использовать таблицы user, db, tables_priv и columns_priv.
• Глобальные привилегии хранятся в таблице user. Каждому типу привилегии соответствует отдельное поле (столбец), допускающее значения 'Y' (операция разрешена) и 'N' (операция не разрешена).
• Привилегии, областью действия которых является отдельная база
данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют поля Host (хост), Db (база данных) и User
(пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных.
Как и в таблице user, каждой привилегии соответствует отдельное поле
(столбец), в котором допустимыми являются значения 'Y' и 'N'.
• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_priv. Первичным ключом в этой таблице служат поля Host (Хост),
Db (База данных), User (Пользователь) и Table_name (Имя таблицы).
Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице.
• Привилегии для отдельных полей хранятся в таблице columns_priv.
Первичный ключ этой таблицы состоит из полей, идентифицирующих пользователя (Host и User), и полей, идентифицирующих поле (Db,
Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к полю, содержатся в поле Column_priv
(Привилегии доступа к полю) с типом данных SET.
41. Резервирование баз данных. Полное резервное копирование
базы данных. Ведение двоичных журналов.
Обычно рекомендуется использовать стратегию резервного копирования, сочетающую в себе два взаимодополняющих метода:
• полное резервное копирование базы данных, выполняемое с определенной периодичностью;
• ведение двоичных журналов, в которых регистрируются все изменения данных в промежутках между резервными копированиями.
Двоичные журналы. В файле двоичного журнала накапливается история изменений в базе данных за определенный период времени, что обеспечивает возможность воспроизвести эти изменения при необходимости.
Чтобы включить ведение двоичных журналов, следует запустить сервер MySQL с параметром –log-bin.
Во время работы сервера в папке data корневой папки MySQL будут создаваться двоичные журналы. Они представляют собой файлы с именами вида <Имя xocтa>-bin.xxxxxx, где xxxxxx – порядковый номер журнала.
Очередной файл журнала создается в следующих случаях:
• когда предыдущий файл достиг своего предельного размера;
• когда происходит запуск или перезапуск сервера;
• когда происходит принудительный «сброс» журналов.
«Сброс» журналов при полном резервном копировании необходим для того, чтобы изменения в базе данных, происходящие с момента резервирования, отражались в новом файле (при этом старые файлы журналов становятся ненужными). Кроме того, принудительный «сброс» осуществляется перед промежуточным резервным копированием: сервер начнет протоколировать изменения в новом файле, а предыдущие файлы нужно скопировать на резервный носитель.
Полное резервное копирование баз данных выполняется с помощью утилиты mysqldump. Для запуска этой утилиты следует открыть окно командной строки Windows и выполнить команду: mysqldump –u <Имя пользователя> -p [Опциональные параметры]
<Копируемые базы данных и таблицы> > <Путь и имя результирующего файла>
В ответ на запрос Enter password (Введите пароль) нужно ввести пароль пользователя.
После того, как файл с резервной копией базы данных будет создан, его следует перенести на резервный носитель информации, который должен быть надежно защищен от несанкционированного доступа. При создании резервной копии впервые, рекомендуется проверить ее корректность, выполнив тестовое восстановление данных.
42. Восстановление данных в СУБД MY SQL.
Восстановление утраченных данных в случае сбоя согласно стратегии резервного копирования проводится в два этапа:
• в первую очередь необходимо восстановить базу данных из резервной копии;
• затем требуется восстановить изменения данных, которые произошли с момента создания резервной копии, из двоичных журналов.
Перед началом восстановления данных должен быть запущен сервер
MySQL. Если при сбое были повреждены таблицы, управляющие доступом пользователей, при запуске сервера необходимо указать параметр – skip- grant-tables.
Для восстановления базы данных из файла, содержащего полную резервную копию, нужно открыть окно командной строки Windows и выполнить команду mysql –u root –p [<Имя базы данных>] < <Путь и имя файла>
После появления приглашения Enter password (Введите пароль) нужно ввести пароль пользователя root.
Обратим внимание на следующий факт. Поскольку файл с резервной копией содержит данные в виде SQL-команд, то с его помощью можно восстанавливать отдельные таблицы по своему выбору, просто копируя SQL- команды CREATE TABLE и INSERT в какое-либо клиентское приложение и отправляя их на сервер.
Следующим шагом является восстановление изменений из двоичных журналов, которое выполняется с помощью команды: mysqlbinlog <Список журналов> | mysql –u root -p
В качестве первого журнала указывается тот журнал, ведение которого началось в момент запуска полного резервного копирования. Определить
43. Профилактическая проверка таблиц и их восстановление в
СУБД MY SQL.
После сбоев в работе сервера, а также при появлении подозрительных сообщений об ошибках необходимо проверить таблицу на наличие повреждений.
CHECK TABLE <Список таблиц>;
Команда CHECK TABLE отображает результат проверки таблиц.
Например, чтобы получить информацию о состоянии таблиц db и user системной базы данных mysql, нжно выполнить следующую команду: CHECK
TABLE mysql.db, mysql.user;
Если в столбце Msg_text (Текст сообщения) присутствует значение, отличное от OK или Table is already up to date (Таблица уже проверена), то это означает, что таблица повреждена.
Для восстановления таблицы необходимо выполнить следующие действия.
1) Выполнить команду:
REPAIR TABLE <Имя таблицы> QUICK;
После выполнения команды REPAIR TABLE будет получена таблица с теми же столбцами, что в результате выполнения команды CHECK TABLE.
Таблица может включать несколько строк, причем, если в последней строке в столбце Msg_text (Текст сообщения) указано значение OK, то это значит, что таблица успешно восстановлена. В противном случае нужно выполнить следующий пункт.
2) Скопировать файл <Имя таблицы>.MYD из папки <Корневая папка
MySQL>\ data\<Имя базы данных> в любую резервную папку, т.к. при попытке восстановления данные, содержащиеся в этом файле, могут быть повреждены.
3) Выполнить команду:
REPAIR TABLE <Имя таблицы>;
Если же и эта команда не помогла восстановить таблицу, необходимо выполнить команду:
REPAIR TABLE <Имя таблицы> EXTENDED;
Если опять не получилось исправить повреждения, следует выполнить команду:
REPAIR TABLE <Имя таблицы> USE_FRM;
Параметр USE_FRM должен использоваться только в том случае, если все предыдущие действия не дали ожидаемого результата.
Если таблица все же не была восстановлена, нужно перейти к следующему пункту.
4) Открыть файл с полной резервной копией базы данных (созданный в подразделе «Полное резервирование»). Найти в нем SQL-команду CREATE
TABLE для той таблицы, которую нужно восстановить.
С помощью этой команды нужно создать точно такую же таблицу в другой базе данных. Затем следует переместить файлы <Имя таблицы>.MYI и
<Имя таблицы>.frm из папки <Корневая папка MySQL>\data\<Имя другой базы данных> в папку <Корневая папка MySQL>\data\<Имя исходной базы данных>. Далее нужно повторить действия, описанные в п. 3.
5) Если все попытки исправления таблицы оказались неудачными, можно воссоздать таблицу из резервной копии с использованием двоичных журналов.
44. Журналы работы (журнал ошибок, двоичные журналы,
общий журнал запросов, журнал медленных запросов) и их
просмотр в СУБД MY SQL.
По умолчанию журналы работы сервера MySQL хранятся в папке data корневой папки MySQL. Их несколько видов.
Журнал ошибок – это файл с именем <Имя хоста>.err. Содержит сведения об ошибках в работе сервера, а также о запусках и остановках сервера. Просмотреть этот файл можно в любом текстовом редакторе.
1 2 3 4 5 6