Опубликован: 11.03.2009 | Доступ: свободный | Студентов: 2469 / 426 | Оценка: 4.22 / 4.22 | Длительность: 11:41:00
Лекция 3:

Физическая модель РБД. Локальные вычислительные сети стандарта Ethernet для рабочей группы. Топологии и расширение сетей. Мониторинг и управление сетью. Увеличение пропускной способности сети. Повышение безопасности сетей

< Лекция 2 || Лекция 3: 123 || Лекция 4 >

Способы и средства увеличения пропускной способности ЛВС

Увеличение пропускной способности ЛВС может осуществляться:

  • пассивно - за счет замены оборудования и увеличения скорости сетевого обмена с 10 до 100 или 1000 мбит/сек
  • активно - за счет деления коллизионной области с помощью маршрутизаторов, мостов и коммутаторов в соответствии со схемами трафика, обеспечивая этим наилучшее использование ширины полосы пропускания сигналов.

Рассмотрим точечный сегмент Ethernet.


  1. Сеть работает медленно при слабом насыщении коллизионной области ( LAN << 40% )

    Критическое место - сервер, требуется разделить его функции и часть портировать на новое оборудование.


  2. Сеть работает медленно при LAN ~ 40%, тогда можно разделить сегмент на два подсегмента, соединив их мостом или маршрутизатором. При этом в каждой коллизионной области имеется свой сервер.

  3. Если всем клиентам сети при LAN >> 40% необходим online доступ к различными серверами, то при условии сбалансированного трафика, рекомендуемым решением увеличения пропускной способности сети является установка коммутатора

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

Защита информации и повышение безопасности работы в ЛВС

Защита может быть

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

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

Защита сетевого оборудования осуществляется посредством решения следующих задач:

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

На уровне защиты административного интерфейса сетевых устройств применяются следующие меры:

  • защита доступа к консоли
  • использование шифрования паролей
  • тщательная настройка параметров линий связи
  • использование многоуровневой системы привилегий доступа
  • использование информационных баннеров устройств
  • управление доступом Telnet
  • управление доступом SNMP (Simple Network Management Protocol - простой протокол сетевого управления)

Безопасность сети на программном уровне обеспечивается следующими мерами.

  1. Доступ к сетевым ресурсам предоставляется только зарегистрированным пользователям
  2. Ведение грамотной политики паролей для учетных записей:
    • задание минимальной длины пароля
    • задание срока действия пароля
    • блокировка учетной записи при некотором числе неудачных попыток ввода
  3. Использование брандмауэров (аппаратные или программные средства ограничения и фильтрации трафика на стыке двух сетевых сегментов)
  4. Использование фильтрования пакетов маршрутизаторами (фильтрование производится на основе заголовков протоколов)
  5. Использование NAT (Network Addres Translation) - позволяет компьютерам сети не передавать свои IP-адреса, а пользоваться одним IP-адресом шлюзового компьютера для выхода в другой сегмент сети.
  6. Использование прокси-серверов. Прокси-сервер действует на прикладном уровне модели OSI в отличие от NAT(сетевой уровень) и выполняет функцию ретрансляции данных, скрывая IP-адрес клиента.
  7. Использование безопасных протоколов, шифрующих передаваемую информацию.
    • Ipsec(состоит из двух протоколов AH(Authentication Header) и ESP(Encapsulating Security Payload) выполняющих транспортную функцию и шифрование соответственно)
    • L2TP(Layer 2 Tunneling Protocol) создает туннели в виртуальных частных сетях и для шифрования использует средства Ipsec
    • SSL(Secure Sockets Layer) Состоит из двух частей-SSLHP и SSLRP первая отвечает за проверку подлинности вторая за шифрование.(система сертификатов)
    • Kerberos используется службами каталога, чтобы предоставить пользователю единую точку входа в сеть т.е. пользователь получает доступ ко всем ресурсам сети(Active Directory)(если доступ разрешен!) (система передачи билетов TGT, ST).

Практические занятия

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

Презентация по ER-моделированию

ER нотации

Пример модели в ERwin

Подготовка SQL скриптов генерации схемы отношений БД в ERwin. Разработка скрипта для ввода тестовой информации.

Видео-презентация (Для проигрывания требуется Windows Media Player)

Архитектура MS SQL Server 2005. Настройка и использование основных компонент среды. Создание учебной базы данных.

Видео-презентация (Для проигрывания требуется Windows Media Player)

Работа с СУБД MS SQL Server 2005, ORACLE 10g. Примеры соединений с БД, технологии разработки клиенского приложения

Использование технологии Java Database Connectivity (JDBC) для работы с базами данных

Презентация

Примеры к презентации

SQL-скрипты, проект и исходные коды

package org.mai806.jdbcsample;

import java.sql.*;

public class QuerySample {
    
    public static void main(String[] args) throws Exception {
        
        /* ======== Подключение к MS SQL Server ===== */
        // Загрузка драйвера
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        // Соединение с базой данных
        Connection connection = DriverManager.getConnection(
                "jdbc:sqlserver://localhost:1433;databaseName=o01;", 
                // localhost - сервер СУБД, o01 - имя базы данных
                "sa", "123"); // пользователь, пароль
        
        /* ======== Подключение к Oracle ============
        // Загрузка драйвера
        Class.forName("oracle.jdbc.OracleDriver");
        // Соединение с базой данных
        Connection connection = DriverManager.getConnection(
                        "jdbc:oracle:thin:@localhost:1521:orcl", 
                        // localhost - сервер СУБД, orcl - SID базы оракла
                        "o01", "o01"); // пользователь, пароль         
        
        // Создание Statement
        PreparedStatement stmt = connection.prepareStatement
        ("select ID, NAME from PERSON where NAME like ?");
        stmt.setString(1, "%S%");
        // Выполнение запроса
        ResultSet rs = stmt.executeQuery();
        // Перебор результата выполнения запроса
        while(rs.next()) {
            // Пример выбора параметра по номеру или по имени
            System.out.println("ID: " +
                    rs.getLong(1) + "; NAME="+
                    rs.getString("NAME"));
        }
        
        // закрытие использованных ресурсов БД
        rs.close();
        stmt.close();
        connection.close();
    }
}
Листинг P.1. Выполнение запроса: QuerySample.java
package org.mai806.jdbcsample;

import java.sql.*;
import java.util.ResourceBundle;

public class StoredProcedureSample {
    
    private static Connection connection = null;
    public static void main(String[] args) throws Exception {
        // Получение соединения из значений параметров в файле properties
        ResourceBundle properties = ResourceBundle.getBundle("database");
        Class.forName(properties.getString("driver"));
        connection = DriverManager.getConnection(
                properties.getString("url"),
                properties.getString("user"),
                properties.getString("password"));
        
        transferAmount(1,2,100.0);
        connection.close();
    }
    
    /**
     * Переводит указанную сумму с одного счета на другой
     * @param from счет плательщика
     * @param to счет получателя
     * @param amount сумма
     */
    public static void transferAmount(long from, long to, double amount)
    throws Exception {
        // Создание Statement
        CallableStatement stmt
                = connection.prepareCall("{call TransferAmount(?,?,?)}");
        // Установка параметров
        stmt.setLong(1, from);
        stmt.setLong(2, to);
        stmt.setDouble(3, amount);
        // Выполнение процедуры
        stmt.execute(); 
    }
}
Листинг P.2. Выполнение хранимой процедуры: StoredProcedureSample.java
package org.mai806.jdbcsample;

import java.sql.*;
import java.util.ResourceBundle;

public class TransactionalSample {
    
    private static Connection connection = null;
    public static void main(String[] args) throws Exception {
        
        // Получение соединения из значений параметров в файле properties
        ResourceBundle properties = ResourceBundle.getBundle("database");
        Class.forName(properties.getString("driver"));
        connection = DriverManager.getConnection(
                properties.getString("url"),
                properties.getString("user"),
                properties.getString("password"));
        
        // Ручное управление транзакциями
        connection.setAutoCommit(false);
        
        try {
            transferAmount(2, 1, 10.0);
        } finally {
            connection.close();
        }
    }
    
    /**
     * Переводит указанную сумму с одного счета на другой
     * @param from счет плательщика
     * @param to счет получателя
     * @param amount сумма
     */
    public static void transferAmount(long from, long to,
            double amount) throws Exception {
        PreparedStatement stmt = null;
        Statement query = null;
        try {
            stmt = connection.prepareStatement
            ("update ACCOUNT set AMOUNT=AMOUNT+? where ID=?");
            // Забираем сумму со счета плательщика
            stmt.setDouble(1, -amount);
            stmt.setLong(2, from);
            stmt.execute();
            
            // Добавляем сумму на счет получателя
            stmt.setDouble(1, amount);
            stmt.setLong(2, to);
            stmt.execute();
            
            // Пост-проверка: отрицательность счета плательщика
            query = connection.createStatement();
            ResultSet rs = query.executeQuery(
                    "select AMOUNT from ACCOUNT where ID="+from+" and AMOUNT<0");
            if (rs.next()) {
                throw new Exception("На счете №"+from+" 
                недосточно средств ["+(amount+rs.getDouble(1))+"] 
                для снятия суммы ["+amount+"]");
            }
            connection.commit();
            System.out.println("Перечисление средств успешно выполнено");
        } catch(Exception e) {
            e.printStackTrace();
            connection.rollback();
        } finally {
            if (stmt!=null)
                stmt.close();
            if (query!=null)
                query.close();
        }
    }
    
}
Листинг P.3. Работа с транзакциями: TransactionalSample.java
Работа с базами данных из J2EE Web-контейнера

Презентация

Объектно-реляционное отображения для работы с базами данных

Презентация

Использование препроцессора для работы с API СУБД

Презентация

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Александра Каева
Александра Каева
Светлана Токаревская
Светлана Токаревская

Добрый день! Скажите пожалуйста, так и задумано, что в каждой лекции приложен один и тот же приктикум?

Светлана Шульдова
Светлана Шульдова
Беларусь, Минск