Безопасность 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.429 из 5