Текущий архив: 2010.12.19;
Скачать: CL | DM;
Вниз
Какой способ взаимодействия программ выбрать? Найти похожие ветки
← →
И. Павел © (2010-09-09 08:37) [0]Здравствуйте.
Подскажите, пожалуйста, как можно (и можно ли вообще) реализовать такую задачу максимально безопасно:
Мне нужно написать две программы: серверную часть и клиентскую.
Серверная часть работает на сервере постоянно. Она по очереди авторизуется под всеми пользователями в чужой, разработанной другой фирмой, программе и получает некоторую информацию. Она повторяет это действие каждые 5 минут. Полученную информацию она сравнивает с тем, что получила на предыдущем шаге и результат сравнения должна передать пользователю по первому его требованию (т.е. тогда, когда он захочет, хотя можно это и синхронизировать, и сервер может посылать пользователю информацию, а пользователь принимать, а не инициировать передачу, но так будет менее удобно пользователю).
Вся сложность заключается в том, что пароли пользователей и сама информация является конфиденциальной, и:
1. Пользователь может получить от программы только ту информацию, которая предназначена ему. Он не имеет права даже просматривать информацию других пользователей.
2. Лучше, чтобы пароль пользователя не могли получить не другие пользователи, не даже он сам.
Сейчас у меня есть такой вариант решения задачи:
1. Серверная часть авторизуется в чужой программе 0под логином и паролем администратора (так неправильно, т.к. хоть администратор может получить информацию обо всех пользователях, она не совсем верна).
2. Эту информацию сервер хранит в таблицах базы данных MS SQL: он считывает информацию, полученную на предыдущем шаге, суммирует ее с новой, и записывает результат опять в таблицу.
3. Пользовательская часть не имеет доступ к серверу, где работает серверная часть, но может читать таблицы, ища там свою информацию.
Недостатки этого способа:
1. Серверная часть не знает логины и пароли пользователей, поэтому ей приходится использовать не совсем корректную информацию из учетной записи администратора.
2. Все клиенты читают данные из общих таблиц. Это небезопасно, т.к. любой пользователь, определив пароль, под которым моя программа входит в базу, сможет просмотреть и изменить всю таблицу, а не только ту часть, которая предназначена ему (т.к. клиент тоже может менять одно поле в таблице).
3. Я даже еще не решил, как клиентская часть должна доказывать серверной части, что она имеет право получить данные. Клиентская часть должна запускаться без ведома пользователя, и какую-либо информацию пользователь может сообщить серверу только один раз – при установке ему программу. То есть пользователь не может вводить в клиентскую часть свой логин и пароль при каждом запуске программы, т.к. это будет очень неудобно для пользователя.
Учитывая второй недостаток, пришлось сократить информацию, которую получает клиент, до минимума, но это плохо: теперь пользователю сообщается буквально пара слов (не конфиденциальных слов :) ), а в идеале должен даваться развернутый отчет.
Хотя мне кажется, что если за дело возьмется профессиональный взломщик, он не будет морочиться с моей программой, а поставит клавиатурный шпион на машину какого-нибудь начальника. Ну или использует тот факт, что наши системные администраторы любимыми паролями считают "0" и "1"...
Заранее спасибо за любой совет.
PS: если вы дочитали до сюда с самого начала - спасибо за терпение :)
← →
Дмитрий Тимохов (2010-09-09 10:18) [1]А как в чужой программе проходит авторизация? Своя система авторизации или воспринимается авторизация из домена Windows? (ну т.е. как в MSSQL - либо NT-авторизация, либо SQL- авторизация)
← →
Сергей М. © (2010-09-09 10:24) [2]
> Лучше, чтобы пароль пользователя не могли получить ...даже он сам
Так не бывает.
Поручив вести свои "конфиденциально-интимные" дела с кем-либо некоему посреднику, скажем, адвокату, ты всегда рискуешь стать жертвой утечки информации через этого посредника, будь он хоть трижды "супернадежнен".
← →
И. Павел © (2010-09-09 10:25) [3]> А как в чужой программе проходит авторизация? Своя система
> авторизации или воспринимается авторизация из домена Windows?
> (ну т.е. как в MSSQL - либо NT-авторизация, либо SQL- авторизация)
Там своя авторизация. Но логин и пароль - это логин и пароль пользователя SQL сервера.
PS: кажется, я нашел решение:
1. Чтобы пользователь мог ввести свой логин/пароль, но не прочитать чужие, я запрещу всем клиентам доступ к таблице паролей. А пароль буду записывать клиенты через хранимую процедуру, которая будет проверять - существует ли такой SQL пользователь, и только если да, то будут записывать пароль.
2. Чтобы клиент мог прочитать из таблиц только записи, которые предназначены ему, я запрещу всем клиентам доступ к таблицам с информацией, и они будут просить этот доступ у хранимой процедуры (или функции) и она будет запускать другую хранимую процедуру/функцию/вью под другим пользователем, который имеет право выборки из таблицы. При этом будут выбираться только записи, предназначенные именно для этого клиента.
Жду и надеюсь на советы по организацию этого способа, критику и другие предложения.
← →
И. Павел © (2010-09-09 10:25) [4]> [2] Сергей М. © (09.09.10 10:24)
Да я знаю, что если захотят сломать - всегда сломают. :)
← →
И. Павел © (2010-09-09 10:28) [5][3] И. Павел © (09.09.10 10:25)
Забыл написать: сама авторизация на SQL сервере клиентом будет производиться под учетной записью Windows. Это избавит пользователя от ввода пароля второй раз.
← →
Anatoly Podgoretsky © (2010-09-09 11:16) [6]> И. Павел (09.09.2010 10:28:05) [5]
Это приятные мелочи и не больше, зато нет риска перехвата пароля при
коннекте к серверу. А перехват в Виндоус уже давно проблематичен, начиная с
Висты.
Страницы: 1 вся ветка
Текущий архив: 2010.12.19;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.009 c