Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748

Безопасность SQL Server

04.04.2011, 12:40. Показов 2906. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Решил разобраться с безопасностью в SQL Server. И, чисто как пример - написать чат, который напрямую коннектится к серверу. Мысли следующие:
Есть три таблицы - Users, Messages, PrivateMessages.
В Users храняться все настройки пользователей, включая логин с паролем. Messages - общедоступная таблица для сообщений основного канала. PrivateMessages - таблица личных сообщений.
Все юзеры будут подключаться с одни общим логином, у которого нет никаких прав на просмотр/изменение таблиц, но есть права на хранимые процедуры.
Далее. Как будет проходить процедура авторизации. Здесь уже речь идет о возможности перехвата трафика.
Перед подключением клиент вводит логин с паролем. Когда клиент коннектится, ему сервером при помощи хранимой процедуры и инструкции PRINT передается значение глобальной переменной @@SPID, зашифрованное в MD5. Соответственно, клиент это ловит в событии коннекшена InfoMessage. На стороне клиента введенный пароль шифруется тем же самым MD5 с полученным ключом. Далее вызывается хранимая процедура с двумя параметрами, возвращающая 1 в случае наличия совпадения и 0 – соответственно в случае отсутствия.
На этом, можно сказать, авторизация завершена.
Далее все операции (изменение юзерских настроек, отправка/принятие сообщений) происходят опять же путем вызова соответствующих процедур, которые, на основе @@SPID понимают, что это за юзер и, соответственно, выдают информацию, доступную только для него.
Все казалось бы хорошо, но есть минус. @@SPID принимает слишком простые значения по порядку, которые к тому же повторяются после отключения клиента. Т.е. легко отловить их все. Всвязи с этим есть другая идея. Генерировать рэндомом какое-то уникальное число при подключении клиента. НО. Что его может генерировать? Что реагирует на подключение юзера? Возможно, привязывать @@SPID к времени подключения пользователя и на этих данных генерировать ключ. Но нет глобальной переменной начала сессии…
Так что такие вот дела. Жду идей, предложений и замечаний.
Тема, как мне кажется, достаточно интересная.
Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2011, 12:40
Ответы с готовыми решениями:

[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection
Login failed- User: Reason: Not defined as a valid user of a trusted SQL Server connection Вот такую ошибку выдает. В DSN...

Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server?
ВОПРОС: Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server? MS SQL Server...

Как средствами джавы реализовать просмотр базы данных Access, SQL Server, SQL Server Compact и запись в нее?
---

23
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
04.04.2011, 14:57
а если сделать randomize (кол-во секунд с 1 января 1970 года) ?
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
04.04.2011, 15:22  [ТС]
'Генерировать рэндомом какое-то уникальное число при подключении клиента. НО. Что его может генерировать? Что реагирует на подключение юзера? '
0
Silver
04.04.2011, 15:37
посмотри в поле login_time таблицы master..sysprocesses
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
04.04.2011, 15:43
ну хорошо.
а если так?
Code
1
2
3
CREATE TABLE text (
text_id smallint IDENTITY (1,1) NOT NULL
)
и получаем в text_id уникальный ключ с автоинкрементом
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
04.04.2011, 16:37  [ТС]
2Silver: логин у всех один
2PMSSpy: Не понял задумки... подробнее...
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
04.04.2011, 17:31
ну грубо говоря так:
создаем таблицу.
пользователь входит на сайт (страница приветствия)
здесь срабатывает скрипт добавления в таблицу еще одной записи и тут же возвращает значение (по моей задумке - достаточно id, хотя таблицу можно использовать для сбора данных о пользователе)
id уникален - потому как я предлагаю использовать его в качестве primary key (ключ) с автоинкрементом (для уникальности).
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
04.04.2011, 17:38  [ТС]
Хм... может я не очень подробно описал, но мне кажется, что из описания вполне понятно, что это не ASP.
Нет никакого сайта. Есть клиентская прога. И SQL Server.
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
04.04.2011, 17:44
тогда триггер
пусть пользователь вызывает какое-нибудь событие на сервере
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
04.04.2011, 17:58  [ТС]
Триггер. про это я уже думал.
Но предлоежния есть какие-нибудь? какое событие?
надо, чтобы сервер сразу при подключении запускал этот триггер.
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
04.04.2011, 18:06
еще раз повторюсь. пусть клиент приветствует сервер добавлением строчки о себе в табличку посещений. типа 'привет тебе с IP xxx.xxx.xxx.xxx. время такое-то'
и на добавление записи ставь триггер
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
04.04.2011, 23:40  [ТС]
мда... с работы домой ехал - обдумал твое предложение... видимо, на самом деле, стоит сделать именно так... Только не по IP, а по нику идентификация. Спасибо за предложенный вариант.
Так вот... алгоритм вроде бы следующий.... Если что-то не так (заметите дырку, какую-то ошибку, или если появится какой-то другой вариант) - прошу отписать)
1. После коннекта юзера он обращается к ХП в качестве параметра передает ник.
2. ХП записывает в таблицу logins Ник и Время текущего обращения.
3. Методом Print выдает Значение MD5, сгенерированное на основе времени и @@SPID.
4. Клиент кодирует пароль на основе полученного ключа в MD5 и запускает другую ХП с парамиетрами НИК и Зашифрованный пароль.
5. ХП делает следующее...
а) проверяет, есть ли в таблице logins запрос для данного ника.
б) если нет- отфутболивает.
в) узнает, каким должен быть зашифрованный пароль из Users для данного ника используя данные из Logins и @@SPID.
г) в случае несовпадения – отфутболивает, в случае совпадения – помечает в таблице logins, что авторизация прошла успешно и что эту строку уже использовать нельзя.

Ну чтож... вроде ничего не забыл. Если ошибаюсь - прошу поправить.
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
05.04.2011, 09:04
я вот что еще подумал.
по умолчанию все пользователи имеют право обращаться СТРОГО к этой самой ХП и ничему больше.
Если пользователи лезет куда не надо - отфутболить. И по тайм-ауту тоже отфутболить, скажем через 30-45 секунд.
0
Silver
05.04.2011, 10:28
Логин конечно один, но spid разный.
Делая выборку по spid мы можем получить
уникальное время подключения к базе.
Вот пример ХП
SQL
1
2
3
4
5
6
CREATE PROCEDURE spGetLoginTime 
AS
SELECT login_time 
FROM sysprocesses
WHERE spid = @@spid
GO
Silver
05.04.2011, 10:57
Боюсь, что данная схема неработоспособна.
-- цитата ---
Все юзеры будут подключаться с одни общим логином, у которого нет никаких прав на просмотр/изменение таблиц, но есть права на хранимые процедуры.
-------------
Если я правильно понял, то коннект будет осуществляться
с единым логином и паролем, так?
Но почему ты считаешь, что если 'нет никаких прав на просмотр/изменение таблиц' напрямую, то права будут в хранимой
процедуре?
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
05.04.2011, 12:22  [ТС]
2Silver:
Это стандартный способ.
Создай таблицу, запрети на нее доступ юзеру.
Создай процедуру AS select * from table.
Попробуй обратиться к таблице с запросом select * from table и затем запустить процедуру. Запрос выдаст ошибку - будет орать о запрещенном доступе. Процедура же выполнится без проблемм.
и вопрос по поводу времени логина... таблица sysprocesses не существует.

2PMSSpy: 'по умолчанию все пользователи имеют право обращаться СТРОГО к этой самой ХП и ничему больше.'
Вопрос в том как реализовать.
По таймаутут тоже отфутболивать, согласен.

Но, еще вопрос. Человек выходит некорректно из чата (завис/выключили эл-во/т.д.). Как отследить его уход и добавить сообщение в канал о том, что он исчез?
На мой взгляд - вариант только один - от юзера посылать каждые, к примеру, 10 секунд сообщения серверу (обновлять таблицу Users) и устанавливать дату последнего обновления. И написать просьенькую серверную программулину, которая будет слдедить - если разница между ткущим временем и последним апдейтом какого-то юзера более 15 секунд, то выдавать сообщение о выходе юзера.
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
05.04.2011, 12:33
согласен.
может интервал, в течение которого пользователь обязан сделать запрос на сервер, тоже хранить в таблице и выдавать настройки при логине?
и опять же пресловутый триггер на тайм-аут?
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
05.04.2011, 12:42  [ТС]
А зачем? Если будет известно время последнего обращения, то его всегда можно сравнить с текущим.

А что за триггер на таймаут? Сам по себе он не запустится...
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
05.04.2011, 13:16
а как ты планируешь реализовывать отключение по тайм-ауту и вместе с этим сообщать в чат, что юзер ушел?
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
05.04.2011, 13:21  [ТС]
'И написать просьенькую серверную программулину, которая будет слдедить - если разница между ткущим временем и последним апдейтом какого-то юзера более 15 секунд, то выдавать сообщение о выходе юзера.'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2011, 13:21
Помогаю со студенческими работами здесь

Подключиться к SQL 2000. BASE_STRING = 'Driver={SQL Server};Server=(local);Database=mybase;
Пишу поключение BASE_STRING = 'Driver={SQL Server};Server=(local);Database=mybase;', тестирую соединение в редакторе (Ultradev), все...

Как можно осуществить репликацию между офисной БД (MS SQL Server) и БД в Интернете (MS SQL Server) ?
Подскажите пожалуйста, как можно осуществить репликацию между офисной БД (MS SQL Server) и БД в Интернете (MS SQL Server) и где об этом...

Microsoft SQL Server Compact Edition в SQL Server Management Studio Express
Не могу понять как настроить SQL Server Management Studio Expres чтоб открывать и создавать бд sql ce. В менеджере просто нет возможности...

SQL Server 2012 Management Studio Express не появляется служба SQL Server
Здравствуйте. Установил SQL Server Management Studio Express 2012 , необходимый для работы одной программы конфигурирования устройства. Там...

Настройка SQL Server 2008 для работы с SQL Server Management Studio
Доброго времени суток. Подскажите пожалуйста, что нужно сделать для того, чтобы SQL Server Management Studio соединялось с SQL сервером ?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru