Архитектура Web-баз данных. Лекция 3.19

Содержание

Слайд 2

Основные функции клиента и сервера: Клиент: Принимает и проверяет синтаксис вводимого

Основные функции клиента и сервера:

Клиент:
Принимает и проверяет синтаксис вводимого запроса
Генерирует запрос

и передает его БД
Отображает полученные данные
Сервер:
Принимает и обрабатывает запросы от клиентов
Проверяет полномочия пользователей
Гарантирует соблюдение ограничений целостности
Выполняет запросы и возвращает результаты клиенту
Обеспечивает параллельный доступ к БД
Обеспечивает управление восстановлением информации

5

Слайд 3

"Клиент-серверная" архитектура: трехзвенная 6

"Клиент-серверная" архитектура: трехзвенная

6

Слайд 4

Архитектура Web-баз данных Типичная транзакция Web-базы данных состоит из следующих этапов:

Архитектура Web-баз данных

Типичная транзакция Web-базы данных состоит из следующих этапов:
1.

Web-браузер пользователя отправляет HTTP-запрос определенной Web-страницы
2. Web-сервер принимает запрос, получает файл со сценарием и передает его механизму РНР на обработку.
3. Механизм РНР начинает синтаксический анализ сценария. Если в сценарии присутствует команда подключения к базе данных и выполнения запроса в ней. РНР открыв йает соединение с сервером MySQL и отправляет необходимый запрос.
4. Сервер MySQL принимает запрос в базу данных, обрабатывает его, а затем отправляет результаты — в данном случае, обратно в механизм РНР.
5. Механизм РНР завершает выполнение сценария, форматируя результаты запроса в виде HTML, после чего отправляет результаты в HTML-формате Web-серверу.
6. Web-сервер пересылает HTML в браузер, с помощью которого пользователь просматривает результат выполнения запроса.

8

Слайд 5

1. Проверка и фильтрация данных, исходящих от пользователя. 2. Установка соединения

1. Проверка и фильтрация данных, исходящих от пользователя.
2. Установка соединения с

требуемой базой данных.
3. Передача запроса в базу данных.
4. Получение результатов.
5. Представление результатов пользователю.

Основные этапы сценария, обеспечивающего доступ к базе данных

9

Слайд 6

Проверка и фильтрация данных, исходящих от пользователя - trim($searchterm); - if

Проверка и фильтрация данных, исходящих от пользователя

- trim($searchterm);
- if (!$searchtype

| | !$searchterm)
{
echo " Вы не ввели поисковые детали.
Попробуйте еще раз." ;
exit;
}
addslashes()
stripslashes()
$searchterm = addslashes ($searchterm)

10

Слайд 7

Установка соединения $db = mysql_pconnect("localhost", "user_name", “user_pass"); В случае успеха функция

Установка соединения

$db = mysql_pconnect("localhost", "user_name", “user_pass");
В случае успеха функция вернет идентификатор

связи с базой данных (который следует сохранить для дальнейшего использования), а в случае неудачи — значение false.
if (!$db)
{
echo " Ошибка: Нет соединения с базой данных.";
exit;
}
- mysql_connect()
- mysql_close().

11

Слайд 8

Выбор базы данных int mysql_select_db (string database, [int database_connection] ) database

Выбор базы данных

int mysql_select_db (string database, [int database_connection] )
database –имя базы

данных
database_connection – идентификатор соединения с сервером

12

Слайд 9

Выполнение запроса к базе данных Настройка запроса: $query = "select *

Выполнение запроса к базе данных

Настройка запроса:
$query = "select * from $userstable

where $searchtype like'%$searchterm%'" ;
Выполнение запроса:
$result = mysql_query ($query);
- int mysql_db_query(string database, string query, [int database_connection] ) ;

13

Слайд 10

Получение результатов запроса mysql_num_rows()- возвращает количество строк, которые возвращает запрос; mysql_fetch_array()

Получение результатов запроса

mysql_num_rows()- возвращает количество строк, которые возвращает запрос;
mysql_fetch_array() - возвращает

каждую строку в виде ассоциативного массива;
mysql_fetch_row() – возвращает нумерованный массив;
$row = mysql_fetch_array($result) ;
Имея $row в ассоциативном массиве, можно пройти каждое поле и должным образом его отобразить, например, $row[‘title’], $row[‘autor’] и т.д.,
при этом функцию stripslashes() вызывают для того, чтобы "подчистить" значение, прежде чем отображать его пользователю.
$row = mysql_fetch_row($result);
Значения атрибутов будут храниться в каждом порядковом значении $row[0], $row[l] и т.д.

14

Слайд 11

$row = mysql_fetch_object($result); После этого к каждому атрибуту можно получить доступ

$row = mysql_fetch_object($result);
После этого к каждому атрибуту можно получить доступ через

$row->title, $row->author и т.д.
Каждый из этих вариантов подразумевает выборку строки за один раз.
Другой вариант —
получить доступ, используя mysql_result(). Для этого потребуется указать номер строки (от 0 до количества строк минус 1) и название поля, например:
$row = mysql_result($result, $i, "title");
Название поля можно задать в виде строки (либо в форме "title" либо в форме "books.title") или номером (как в mysql_fetch_row()).

15

Слайд 12

Внесение новой информации в базу данных - установить соединение - отправить

Внесение новой информации в базу данных

- установить соединение
- отправить запрос


- проверить результаты
$isbn = addslashes ($isbn) ;
$author = addslashes ($author) ;
$title = addslashes ($title) ;
$price = doubleval ($price) ;
doubleval() - принимает в качестве аргумента переменную и возвращает значение, преобразованное к типу double;
intval() - принимает в качестве аргумента переменную и возвращает значение, преобразованное к типу integer;
strval() - принимает в качестве аргумента переменную и возвращает значение, преобразованное к типу string;

16

Слайд 13

настраиваем запрос, в данном случае это INSERT: $query = "insert into

настраиваем запрос, в данном случае это INSERT:
$query = "insert into books

values (' ".$isbn." ', ' ".$author." ', ' ''.$title." ', ' ".$price" ' ) ";
$result = mysql_query($query);
mysql_affected_rows() - возвращает количество рядов, задействованных в последнем запросе INSERT, UPDATE или DELETE

17

Слайд 14

Изменение данных Изменение данных, находящихся в базе сочетает в себе два

Изменение данных

Изменение данных, находящихся в базе сочетает в себе два этапа:


- извлечение данных из базы с выводом их на экран;
- внесение данных через форму обратно в базу.

18

Слайд 15

Код извлечения данных из базы с выводом их на экран $db=mysql_pconnect

Код извлечения данных из базы с выводом их на экран

$db=mysql_pconnect

( "localhost", "root" ) ;
mysql_select_db("books") ;
if ($id) {
$query = "SELECT * FROM book WHERE id=$id" ;
$result = mysql_query ($query) ;
$myrow = mysql_fetch_array($result);
?>

" >
Автор: " >
Название : " >
ISBN : ">
Цена : ">


19

Слайд 16

Внесение данных через форму обратно в базу $db=mysql_pconnect ( "localhost", "root"

Внесение данных через форму обратно в базу

$db=mysql_pconnect ( "localhost", "root"

) ;
mysql_select_db("books") ;
if ($id) {
if ($submit) {
$query = "UPDATE book SET autor= '$autor', title = '$title', price ='$price ', isbn = '$isbn' WHERE id=$id" ;
$result = mysql_query($query) ;
echo "Information updated.\ n " ;
}
…………..
?>

20

Слайд 17

$result = mysql_query("SELECT * FROM book"); while ($myrow = mysql_fetch_array($result)) {

$result = mysql_query("SELECT * FROM book");
while ($myrow = mysql_fetch_array($result))

{
printf(" %s %s
\n", $PHP_SELF, $myrow["id"], $myrow["autor"], $myrow["title"]);
}
}
?>
Возможные спецификаторы:
%d – целочисленное значение
%f – значение с плавающей точкой и др.

21

Слайд 18

Удаление данных из базы …………… if ($delete) { $query = "DELETE

Удаление данных из базы

……………
if ($delete) {
$query = "DELETE FROM book

WHERE id=$id" ;
$result = mysql_query( $query) ;
echo " Record deleted!" ;
}
…………………

22

Слайд 19

if ( !$id ) { $result = mysql_query( "SELECT * FROM

if ( !$id ) {
$result = mysql_query( "SELECT * FROM

book" ) ;
while ($myrow = mysql_fetch_array( $result) ) {
printf( " %s %s %s %s \n" , $PHP_SELF, $myrow["id"],
$myrow["autor"] ,
$myrow["title"],
$myrow[“isbn”] ,
$myrow[“price”]) ;
printf(" Удалить
" , $PHP_SELF,
$myrow["id"]) ;
}
}

23

Слайд 20

Методика настройки базы данных MySQL для использования на Web-сайте 1. Проведена

Методика настройки базы данных MySQL для использования на Web-сайте

1. Проведена базовая

установка MySQL на Web-сервере, которая включает в себя:
• Установку файлов
• Установку пользователя MySQL
• Настройку
• Установку пароля для пользователя root (желательно)
• Запуск сервера MySQL
2. Имеется доступ к MySQL.

24

Слайд 21

Создание баз данных и подключение пользователей Система баз данных MySQL может

Создание баз данных и подключение пользователей
Система баз данных MySQL

может поддерживать множество различных баз данных. Обычно, на одно приложение существует одна база данных.
Создание базы данных с использованием PHPmyAdmin.

26

Слайд 22

Слайд 23

Слайд 24

Слайд 25

Слайд 26

Слайд 27

Слайд 28

Слайд 29

Скрипты размещены на сервере в директории home/localhost/www; база данных находится в

Скрипты размещены на сервере в директории home/localhost/www;
база данных находится в

директории mysql/data, где каждая таблица представляется файлами формата
*.MYI - индексы,
*.MYD – данные,
*.frm - структура таблицы.

34

Слайд 30

Пользователи и привилегии Система MySQL может содержать много пользователей. Каждый пользователь,

Пользователи и привилегии
Система MySQL может содержать много пользователей.
Каждый пользователь,

которому необходимо работать в системе, должен получить учетную запись и пароль.

35

Слайд 31

Система привилегий MySQL Одна из лучших характеристик MySQL заключается в поддержке

Система привилегий MySQL
Одна из лучших характеристик MySQL заключается в поддержке

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

36

Слайд 32

Как MySQL использует таблицы привилегий (БД mysql) Таблица user предназначена для

Как MySQL использует таблицы привилегий (БД mysql)

Таблица user предназначена для определения,

может ли пользователь подключаться к серверу MySQL и обладает ли он привилегиями администратора. Таблицы db и host определяют, к каким базам данных пользователь может иметь доступ. Таблица tables_priv — какие таблицы в базе данных разрешается использовать, a таблица columns_priv — к каким столбцам в таблицах имеется доступ.

37

Слайд 33

Слайд 34

1. Проверка соединения. На этом этапе MySQL проверяет, есть ли у

1. Проверка соединения. На этом этапе MySQL проверяет, есть ли у

вас право подключаться, исходя из данных таблицы user. Используется информация об имени пользователя, хосте и пароле (если поле имени пользователя пусто, значит, подходит любое имя пользователя).

MySQL использует таблицы привилегий с целью определения прав пользователя и совершает это в два этапа:

39

Слайд 35

Слайд 36

2. Подтверждение запроса. Всякий раз когда соединение уже установлено и запрос

2. Подтверждение запроса.
Всякий раз когда соединение уже установлено и запрос

отправлен, MySQL проверяет, есть ли у вас необходимый уровень привилегий для выполнения такого запроса. Система начинает с проверки глобальных при-вилегий (по таблице user), и если их недостаточно, проверяет таблицы db и host. Если привилегий все равно не хватает, MySQL проверит таблицу table_priv и, в конце концов, таблицу columns_priv.

42

Слайд 37

Слайд 38

Слайд 39

Слайд 40

Слайд 41

После редактировании привилегий, необходимо сообщить серверу, что произошли изменения - для

После редактировании привилегий, необходимо сообщить серверу, что произошли изменения - для

этого необходимо перезагрузить сервер.
После этого при следующем подключении пользователя будут проверяться его привилегии глобального уровня; привилегии уровня базы данных будут проверяться при встрече функции mysql_select_db( ), а привилегии уровня таблицы и столбцов — при новом запросе пользователя.

47

Слайд 42

Обеспечение безопасности баз данных MySQL Пароли Пароль пользователя должен быть сохранен

Обеспечение безопасности баз данных MySQL

Пароли
Пароль пользователя должен быть сохранен в РНР

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

48

Слайд 43

Привилегии пользователей Один из способов повышения уровня безопасности - принцип наименьших

Привилегии пользователей
Один из способов повышения уровня безопасности - принцип наименьших

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

49

Слайд 44

RELOAD - позволяет администратору перезагружать таблицы привилегий и подавлять привилегии, хосты

RELOAD - позволяет администратору перезагружать таблицы привилегий и подавлять привилегии, хосты

и таблицы.
SHUTDOWN - позволяет администратору останавливать сервер MySQL.
PROCESS - позволяет администратору просматривать и удалять процессы на сервере.
FILE - позволяет помещать в таблицы данные из файлов и наоборот.

50

Привилегии администраторов:

Слайд 45

SELECT ( таблицам, столбцам ) - разрешает пользователям выбирать строки (записи)

SELECT ( таблицам, столбцам ) - разрешает пользователям выбирать строки (записи)

в таблицах.
INSERT ( таблицам, столбцам ) - разрешает пользователям вставлять новые строки в таблицы.
UPDATE ( таблицам, столбцам ) - разрешает пользователям изменять значения в существующих строках таблиц.
DELETE (таблицам ) - разрешает пользователям удалять существующие строки в таблицах.
INDEX (таблицам ) - разрешает пользователям создавать и удалять индексы определенных таблиц.
ALTER (таблицам ) - разрешает пользователям изменять структуру существующих таблиц, добавляя столбцы, переименовывая столбцы или таблицы и изменяя тип данных в столбцах.
CREATE (базам данных, таблицам ) - разрешает пользователям создавать новые базы
данных или таблицы.
DROP (базам данных, таблицам ) - разрешает пользователям удалять базы данных или
таблицы
ALL - предоставляет все привилегии (можно также написать ALL PRIVILEGES).
USAGE - не предоставляет никаких привилегий. Подобным образом можно
подключить пользователя, дать ему возможность входить в систему, но без
разрешения что-либо делать.

51

Слайд 46

При создании пользователя специально для Web-соединений - ему можно выдать минимум

При создании пользователя специально для Web-соединений - ему можно выдать минимум

необходимых привилегий, не предоставляя возможности выполнять DROP, ALTER и CREATE.
Кроме того, необходимо проверять данные, исходящие от пользователя и размер данных.

53

Слайд 47

Реализация контроля доступа if(!isset($name)&& !isset ($password)){ ?> Flease Log In This

Реализация контроля доступа

if(!isset($name)&& !isset ($password)){
?>
Flease Log In
This page

is secret.

User name
Password


else if($name=="user" && $password=="pass") {
// Комбинация имени и пароля посетителя правильная
echo “welcome on a secret page.”;
}
?>

55

Слайд 48

Хранение паролей Сценарий Отдельный файл База данных 56 Реализация контроля доступа

Хранение паролей

Сценарий
Отдельный файл
База данных

56

Реализация контроля доступа

Слайд 49

// Запрос к базе данных , чтобы проверить, существует ли соответствующая


// Запрос к базе данных , чтобы проверить, существует ли соответствующая

запись
$query = " select count (*) from authors where
name='$name ' and
pass = '$password ' " ;
$result =mysql_query($query);
}
$count = mysql_result ($result , 0, 0) ;
if ( $count > 0) {
echo " Добро пожаловать! " ;
}
e l se {
e c h o " Неверный пароль! < / h1 >" ;
}
}
?>

57

Слайд 50

create database auth; create table authors ( name varchar ( 10

create database auth;
create table authors (
name varchar ( 10

) not null ,
pass varchar( 30 ) not null ,
primary key ( name)
) ;
insert into authors values ( 'user' , 'pass123' ) ;
insert into authors values ( 'testuser' , password ( 'test123') ) ;
grant select , insert , update , delete on authors . *
to myuser@localhost
identified by 'mypass12345' ;

58

Слайд 51

Шифрование паролей Однонаправленный алгоритм хэширования обеспечит дополнительную защиту базы данных. Хеширование

Шифрование паролей

Однонаправленный алгоритм хэширования обеспечит дополнительную защиту базы данных.
Хеширование

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

59

Слайд 52

Хеш-функцией называется такое математическое или алгоритмическое преобразование заданного блока данных, которое

Хеш-функцией называется такое математическое или алгоритмическое преобразование заданного блока данных, которое

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

60

Слайд 53

PHP-функция crypt() представляет собой однонаправленную криптографическую хэш-функцию: string crypt (string str

PHP-функция crypt() представляет собой однонаправленную криптографическую хэш-функцию:
string crypt (string str

[ , string salt ] )
Получив на входе строку str, эта функция возвращает псевдослучайную строку.
Например, если передать в функцию строку "pass" и аргумент salt равный "хх",
то crypt( ) вернет строку "xxkTlmYjIikoII".

61

Слайд 54

Вместо PHP-кода i f ( $username == "user" && $password =

Вместо PHP-кода
i f ( $username == "user" && $password =

= "pass" ) {
// Пароль совпадает
}
можно воспользоваться таким кодом
if ( $username = ‘user ' && crypt ( $password, 'хх' )= ='xxkTlmYjIikoII') {
/ / Пароль совпадает
}

62

Слайд 55

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

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

базу данных.
Если для хранения данных аутентификации используется база данных MySQL, можно воспользоваться
PHP-функцией crypt() или MySQL-функцией password(). Результат этих функций не совпадает, но они имеют одно предназначение.
Обе функции — crypt() и password() — получают строку как аргумент и применяют к полученной строке необращаемый алгоритм хэширования.

63

Слайд 56

В PHP можно генерировать хэши при помощи md5( )( message digest

В PHP можно генерировать хэши при
помощи md5( )( message digest algorithm)

или sha1( ) (sha-256 и sha-512 - secure hashing algorithm ),
в первом случае получаем 128-битное значение (32 символа), во втором 160-битный (40 символов).

64

Слайд 57

Например, пароль «pass» имеет следующие хеши: $md5pass=1a1dc91c907325c69271ddf0c944bc72; $sha1pas=9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684; 65

Например, пароль «pass» имеет следующие хеши:
$md5pass=1a1dc91c907325c69271ddf0c944bc72;
$sha1pas=9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684;

65