Файл: Экзаменационные вопросы по мдк. 04. 01. Технология разработки и защиты баз данных.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 29.10.2023

Просмотров: 79

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.



  1. Определение прав пользователя с конкретных компьютеров 26(нет ответа)

С тем, чтобы можно было определять права пользователям с конкретных компьютеров, в MySQL обеспечивается возможность указывать имя пользователя (user_name) в форме user@host
Если необходимо указать строку user, в которой содержатся специальные символы (такие как '-') или строку host, в которой содержатся специальные или групповые символы (такие как '%'), можно заключить имя удаленного компьютера или пользователя кавычки (например, 'test-user'@'test- hostname')
В большинстве случаев для задания пользователей и их паролей следует пользоваться командой GRANT:
GRANT ALL PRIVILEGES ON *.* TO

first@"%" IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

Создание полного суперпользователя, который может соединится с сервером отовсюду с паролем some_pass
Команда FLUSH PRIVILEGES; обновляет данные о привилегиях
GRANT RELOAD, PROCESS ON *.* TO admin@localhost;

Пользователь может подсоединяться с localhost без пароля, ему назначены привилегии RELOAD и PROCESS
GRANT SELECT, INSERT ON taxi.* TO Mike@localhost;

Выдает права INSERT и SELECT на базу taxi (на все таблицы – это задается символом звездочки) пользователю Mike, который подключается локально


  1. Хэширование данных 27

Хэширование - это преобразование входного массива данных определённого типа и произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называют "хэш функциями", а их результат "хэшем, хэш кодом"

Хеш-таблица – это структура данных, реализующая интерфес ассоциативного массив, то есть она позволяет хранить пары вида “ключ-значение” и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.



  1. Пример хэш-функции 28

Исходными данными являются некоторый целый ключ key и размеры таблицы m. Результатом данной функции является остаток от деления этого ключа на размер таблицы

int h(int key, int m) {

return key%m; // значения

}



  1. Понятие коллизия 29

Ситуация, когда разным ключам соответствует одно значение хэш функции. Ключи в этом случае называются синонимами.

Пример:




  1. Алгоритм MD5 30

Рассмотрим функцию md5(string)

По данному алгоритму возвращается значение в виде 32-разрядной шестнадцатеричной строки. Т.е имея любой длины набор символов и применив к ней алгортм MD5 мы получим строку в 32 символа причём в 16-ричном представлении.




  1. Алгоритм SHA1 31

Рассмотрим функцию SHA(string)

По данному алгоритму возвращается значение в виде 40-разрядной шестнадцатиричной строки или NULL (в том случае если входной элемент был равен NULL). SHA() является синонимом для функции SHA1().



  1. IF и CASE в SQL. 32

Функция if в зависимости от результата условного выражение возвращает одно из двух значений. Условное обозначение

IF (условие1, значение1, значение2)

Пример SELECT ProductName, Manufacturer,

IF(ProductCount > 3, 'Много товара', 'Мало товара')

FROM Products;

В хранимых процедурах функция if принимает следующий вид

If (условие)

Then (выполнение1)

Else (выполнение2)

End if

Функция case в зависимости от результата условного выражения возвращает одно из двух значений. Условное обозначение

Case

When (условие1) then (результат_1)

When (условие2) then (результат_2)

…..

When (условиеN) then (результат_N)

Else (другой результат)



  1. Циклы в SQL 33

Оператор цикла WHILE

WHILE условие DO

запрос

END WHILE

Запрос будет выполняться до тех пор, пока условие истинно.
Оператор цикла REPEAT

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

REPEAT

запрос

UNTIL условие

END REPEAT
Оператор цикла LOOP

Этот цикл вообще не имеет условий, поэтому обязательно должен иметь оператор LEAVE. Синтаксис следующий:

LOOP

запрос
END LOOP



  1. Создание клиентского приложения через C#(подключение к БД) 34

Подключение ссылки на MySQLData. Правой кнопкой мыши на проект, добавить ссылку, ищем MySQL.Data. Далее подключаем в код using MySQL.Data.MySQLClient.

Далее создаем метод для подключения к бд.
Public void Connection(sql){

String sql = “”

MySqlConnection connection = new MySqlConnection("server = localhost; user = root; password = 1234567; database = kursovaya; port = 3306");

connection.Open();

MySqlDataAdapter dataAdapter = new MySqlDataAdapter(sql, connection);

dataSet = new DataSet();

dataAdapter.Fill(dataSet);

dataGridView1.DataSource = dataset.Tables[0]

connection.Close();

}


  1. Области применения хэширования 35

1) Создание электронных подписей

2) Хранение паролей в базах данных систем безопасности

3) В рамках современной криптографии для создания уникальных ключей онлайн

4) Проверка подлинности и целостности элементов файловой системы ПК





  1. Понятие курсора 36

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

3 команды управления курсором:

1) Open – открывает курсор

2) Fetch – берёт текущую запись из результирующего набора, после каждого применения курсора следующая запись становится активной

3) Close – закрыть курсор

Оператор handler

Используется для обработки исключения, то есть случая когда данные закончатся.

SQL state ‘02000’ срабатывает когда достигнут конец курсора или когда select или update возвращают пустую строку.



  1. Применение курсоров

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

• Итерация по результирующему набору.

• Обработка данных построчно.

• Операции с курсорами внутри хранимых процедур или функций.

• Курсоры для обхода иерархических данных.

• Возможность выполнения множественных операций в одном запросе.


  1. Подзапросы с квантором any 38

Ключевое слово ANY модифицирует операцию сравнения, которая формирует подзапрос. '=ANY' означает равно некоторому значению, что эквивалентно условию IN.'>ANY' означает больше по крайней мере одного значения, что равносильно больше минимальной величины.

Задание 4. Найти авторов, которые живут в одном городе с издателем

SELECT au_lname, au_fname FROM authors WHERE city = ANY (SELECT city FROM publishers)



  1. Подзапросы с квантором all 38

Ключевое слово ALL модифицирует операцию сравнения, которая формирует подзапрос. '=ALL' означает равно каждому возвращаемому значению. '>ALL' означает больше, чем любое значение, или что равносильно: больше максимальной величины.

Задание 3. Найти книги, которые стоят больше, чем самая дорогая книга в разделе 'mod_cook'.

SELECT title FROM TITLE WHERE price > ALL (SELECT price FROM titles WHERE type='mod_cook

  1. Понятие SQL-инъекции 39

SQL-инъекция – это атака, направленная на приложение (веб), в ходе которой конструируется SQL- выражение из пользовательского ввода путем простой конкатенации. В случае успеха атакующий может изменить логику выполнения SQL-запроса так, как это ему нужно


Пример

Если вы для авторизации должны указать логин и пароль, то сформированный SQL запрос будет иметь следующий вид:

SELECT * FROM users WHERE login='user' AND password='31337';
Если вспомнить основы булевой алгебры, то можно в конструкцию SQL-запроса добавить условие, которое всегда возвращает истину.
SELECT * FROM users WHERE login='user' OR 1=1 --AND password='31337';
Для начала следует знать, что «--» означает конец запроса, и все после «--» обрабатываться не будет!

Получается, словно мы сделали запрос:
SELECT * FROM users WHERE login="user' OR 1=1;
(Пояснение лично от Кристиночки, за правильность не ручаюсь)То есть пользователь буквально вводит в поле для логина следующее:



Тем самым изменяя изначальный текст запроса, т.к. “- -” означает комментарий, а значит все, что после него - программой игнорируется, а “1=1” является всегда истинным выражением, то есть авторизация произойдет при любом значении логина даже с пустым полем пароля.



  1. Способы защиты от SQL-инъекций в MySQL 40




  1. Использование хранимых процедур.

  2. Применение регулярных выражений (проверка email клиента и т.д)

  3. Отключение сообщений об ошибках.

  4. Создание менее привилегированного пользователя

  5. Ограничение на поля ввода(в частности запретить ввод одинарных кавычек)

  6. Вызов представлений


  1. Понятие транзакция 41

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



  1. Свойства транзакций

Свойства транзакций:

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

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


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

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



  1. Пример работы с транзакциями 42

Каждая транзакция явно начинается с инструкции START TRANSACTION. Каждая транзакция явно заканчивается инструкцией COMMIT или ROLLBACK:

  • COMMIT – изменения фиксируются

  • ROLLBACK – изменения отменяются.


Код SQL для транзакции может выглядеть следующим образом:
START TRANSACTION;
SELECT balance FROM checking WHERE customer_id = 10233276;

UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;

UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
COMMIT;


  1. Уровни изоляции транзакций. 43

Существует 4 уровня изолированности транзакций.


  • READ UNCOMMITTED

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


  • READ COMMITTED

Этот уровень изолированности устанавливается по умолчанию в большинстве СУБД. Транзакция увидит только те изменения, которые к моменту ее начала подтверждены другими транзакциями, а произведенные ею изменения останутся невидимыми для других пользователей, пока текущая не будет подтверждена. На этом уровне возможно неповторяющейся чтение


  • REPEATABLE READ (MySQL)

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


  • SERIALIZABLE

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


  1. Понятие ORM.

ORM(Object-Relational Mapping)-технология - это технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования

  1. Entity Framework. Способы взаимодействия с базой данных

Это специальная объектно-ориентированная технология на базе .NET и NET Core для работы с данными.