- •Задания для самостоятельной работы
- •Тема 1. Разработка клиентского приложения в среде ado.Net
- •Тема 2. Параллельное выполнение транзакций
- •Тема 3. Использование olap средств (дополнительно)
- •Приложение. Построение клиентского приложения в среде ado.Net
- •Организация интерфейса
- •Аутентификация пользователя
- •Вариант шифрования пароля
- •Выполнение хранимых процедур Подготовка
- •Подготовка соединения
- •Подготовка команды
- •Подготовка параметров
- •Выполнение команды select
- •Выполнение команды select count(*)
- •Выполнение других команд
- •Использование объекта типа DataSet
- •Создание фрагмента базы данных
- •Связывание таблиц с оконными формами
- •Именование объектов
- •Обмен данными с базой данных
- •Редактирование схемы
Аутентификация пользователя
Предусмотреть в системе возможность работы многих пользователей. Каждый пользователь должен иметь входное имя (login) и пароль. Аутентификацию пользователей можно организовать средствами самой СУБД или средствами клиентского приложения.
В первом случае придется на сервере СУБД регистрировать всех пользователей с их паролями, определять их роли, при этом пароль будет передаваться по сети в незашифрованном виде. Во втором случае соединение с СУБД устанавливается в соответствии с правами администратора базы данных (используется аутентификация Windows), а в базе данных создается дополнительная таблица, содержащая login’ы пользователей, их зашифрованные пароли и роли. При входе в систему пользователь вводит свой login и незашифрованный пароль. На клиенте пароль шифруется, и на сервер передается запрос, содержащий зашифрованный пароль. Затем на клиенте анализируется результат запроса, и выполняются необходимые действия.
Вариант шифрования пароля
Используется криптографический алгоритм шифрования из Studio.net, для которого необходимо подключить следующие пространства имен:
using System.Security.Cryptography; – для метода шифрования,
using System.Text; – для получения массива байтов.
Необходимые данные:
объект типа string для ввода текстового пароля,
массив элементов типа byte для преобразования строки в массив байтов,
массив элементов типа byte для получения зашифрованного пароля в виде массива байтов,
объект типа string для получения строкового представления зашифрованного пароля.
Порядок действий:
Ввести пароль (считать из текстовой переменной).
Преобразовать строку в массив байтов:
byte [] a1 = ASCIIEncoding.ASCII.GetBytes(s1);
Получить Hash-преобразование для массива байтов:
byte [] a2 = new MD5CryptoServiceProvider().ComputeHash(a1);
Преобразовать полученный массив байтов в символьную строку для передачи в базу данных:
string s2 = "";
for(int j = 0; j < a2.Length; ++j)
s2 = s2 + a2[j].ToString("X2");
Здесь X – означает, что преобразуется как 16-ричный код; цифры A, B, … , F представлены в верхнем регистре;
2 – означает, что один байт, содержащий некоторый код, записывается в два байта (один байт содержит две 16-ричные цифры, каждая цифра в символьном представлении записывается в одно байте).
Выполнение хранимых процедур Подготовка
В .NET Framework можно выделить две части:
OleDb Manager Provider, обеспечивающий работу с любым источником данных, доступным через OleDb провайдер,
SqlClient Manager Provider, обеспечивающий работу с данными, хранящимися в MS SQL Server (версии 7 и выше).
Для использования SqlClient Manager Provider в основной файл следует добавить:
using System.Data.SqlClient;
Для выполнения хранимых процедур используются объекты SqlConnection, SqlCommand и SqlParameter; их определение и реализация в ADO.NET отличаются от ADO.
Объекты типа SqlConnection и SqlCommand целесообразно объявить в области определения класса:
<тип_видимости> SqlConnection con;
< тип_видимости > SqlCommand cmd;
Всю необходимую подготовку объектов целесообразно разместить в конструкторе формы, однако открытие и закрытие соединения с сервером базы данных, в соответствии с методологией ADO.NET, следует выполнять при каждой операции с базой данных; здесь же формируется объект SqlCommand и создаются необходимые параметры.