Физическая модель РБД. Локальные вычислительные сети стандарта Ethernet для рабочей группы. Топологии и расширение сетей. Мониторинг и управление сетью. Увеличение пропускной способности сети. Повышение безопасности сетей
Способы и средства увеличения пропускной способности ЛВС
Увеличение пропускной способности ЛВС может осуществляться:
- пассивно - за счет замены оборудования и увеличения скорости сетевого обмена с 10 до 100 или 1000 мбит/сек
- активно - за счет деления коллизионной области с помощью маршрутизаторов, мостов и коммутаторов в соответствии со схемами трафика, обеспечивая этим наилучшее использование ширины полосы пропускания сигналов.
Рассмотрим точечный сегмент Ethernet.
- Сеть работает медленно при слабом насыщении коллизионной области ( LAN << 40% )
Критическое место - сервер, требуется разделить его функции и часть портировать на новое оборудование.
- Сеть работает медленно при LAN ~ 40%, тогда можно разделить сегмент на два подсегмента, соединив их мостом или маршрутизатором. При этом в каждой коллизионной области имеется свой сервер.
- Если всем клиентам сети при LAN >> 40% необходим online доступ к различными серверами, то при условии сбалансированного трафика, рекомендуемым решением увеличения пропускной способности сети является установка коммутатора
- Если имеется несколько коллизионных областей с высоким уровнем локального трафика и одновременно требующих разнообразного серверного обслуживания, то для увеличения пропускной способности сети используются маршрутизаторы.
Защита информации и повышение безопасности работы в ЛВС
Защита может быть
- физической - закладывается при проектировании сети и включает меры, ограничивающие непосредственный доступ к сетевым устройствам (закрывающиеся монтажные шкафы, специальные короба, серверно- коммутационные зоны и т.п.)
- логической - на программно- аппаратном уровне коммутаторов, маршрутизаторов и мостов.
В любой сети передачи данных важно, прежде всего, ограничить физический доступ к сетевому оборудованию и линиям связи.
Защита сетевого оборудования осуществляется посредством решения следующих задач:
- выбор правильной конфигурации оборудования и политики контроля. Следует разработать план политики защиты сети в отношении сетевого оборудования и линий связи. Регулярно выполнять проверки состояния защиты, чтобы гарантировать требуемый уровень физической защиты.
- ограничение доступа к оборудованию и обеспечение надежности его электропитания и охлаждения.
- контроль прямого доступа ко всему сетевому оборудованию
- обеспечение защиты линий связи. Все коммуникационные линии и сетевые провода должны быть защищены от прослушивания.
- разработка плана восстановления системы в случае взлома
На уровне защиты административного интерфейса сетевых устройств применяются следующие меры:
- защита доступа к консоли
- использование шифрования паролей
- тщательная настройка параметров линий связи
- использование многоуровневой системы привилегий доступа
- использование информационных баннеров устройств
- управление доступом Telnet
- управление доступом SNMP (Simple Network Management Protocol - простой протокол сетевого управления)
Безопасность сети на программном уровне обеспечивается следующими мерами.
- Доступ к сетевым ресурсам предоставляется только зарегистрированным пользователям
- Ведение грамотной политики паролей для учетных записей:
- Использование брандмауэров (аппаратные или программные средства ограничения и фильтрации трафика на стыке двух сетевых сегментов)
- Использование фильтрования пакетов маршрутизаторами (фильтрование производится на основе заголовков протоколов)
- Использование NAT (Network Addres Translation) - позволяет компьютерам сети не передавать свои IP-адреса, а пользоваться одним IP-адресом шлюзового компьютера для выхода в другой сегмент сети.
- Использование прокси-серверов. Прокси-сервер действует на прикладном уровне модели OSI в отличие от NAT(сетевой уровень) и выполняет функцию ретрансляции данных, скрывая IP-адрес клиента.
- Использование безопасных протоколов, шифрующих передаваемую информацию.
- 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-моделированию
Подготовка 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