Безопасность SQL Server - VB
Формулировка задачи:
Приветствую.
Решил разобраться с безопасностью в SQL Server. И, чисто как пример - написать чат, который напрямую коннектится к серверу. Мысли следующие:
Есть три таблицы - Users, Messages, PrivateMessages.
В Users храняться все настройки пользователей, включая логин с паролем. Messages - общедоступная таблица для сообщений основного канала. PrivateMessages - таблица личных сообщений.
Все юзеры будут подключаться с одни общим логином, у которого нет никаких прав на просмотр/изменение таблиц, но есть права на хранимые процедуры.
Далее. Как будет проходить процедура авторизации. Здесь уже речь идет о возможности перехвата трафика.
Перед подключением клиент вводит логин с паролем. Когда клиент коннектится, ему сервером при помощи хранимой процедуры и инструкции PRINT передается значение глобальной переменной @@SPID, зашифрованное в MD5. Соответственно, клиент это ловит в событии коннекшена InfoMessage. На стороне клиента введенный пароль шифруется тем же самым MD5 с полученным ключом. Далее вызывается хранимая процедура с двумя параметрами, возвращающая 1 в случае наличия совпадения и 0 – соответственно в случае отсутствия.
На этом, можно сказать, авторизация завершена.
Далее все операции (изменение юзерских настроек, отправка/принятие сообщений) происходят опять же путем вызова соответствующих процедур, которые, на основе @@SPID понимают, что это за юзер и, соответственно, выдают информацию, доступную только для него.
Все казалось бы хорошо, но есть минус. @@SPID принимает слишком простые значения по порядку, которые к тому же повторяются после отключения клиента. Т.е. легко отловить их все. Всвязи с этим есть другая идея. Генерировать рэндомом какое-то уникальное число при подключении клиента. НО. Что его может генерировать? Что реагирует на подключение юзера? Возможно, привязывать @@SPID к времени подключения пользователя и на этих данных генерировать ключ. Но нет глобальной переменной начала сессии…
Так что такие вот дела. Жду идей, предложений и замечаний.
Тема, как мне кажется, достаточно интересная.
Заранее спасибо.
Решение задачи: «Безопасность SQL Server»
textual
Листинг программы
CREATE PROCEDURE spGetLoginTime AS SELECT login_time FROM sysprocesses WHERE spid = @@spid GO
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д