Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

Пароль+логин в трехзвенке   Найти похожие ветки 

 
lvp   (2004-03-29 19:28) [0]

Привет мастерам! Такой вопрос: как можно передать логин+пароль пользователя БД от клиента к серверу приложений?


 
just me   (2004-03-29 19:48) [1]

В системах, построенных по многозвенной архитектуре, клиент не должен знать "логин+пароль пользователя БД", поскольку его авторизацию и аутентификацию выполняет не SQL-сервер (как это имеет место быть в двухзвенке), а АПП сервер (как - это другой вопрос, это надо строить самому). А вот последний как раз и ходит к SQL-серверу с использованием "логин+пароль пользователя БД"


 
Nikolay M. ©   (2004-03-30 09:11) [2]


> аутентификацию выполняет АПП сервер (как - это другой вопрос,
> это надо строить самому).

Предложу примерный вариант аутентификации.
1) Пароль имеем только на этапе ввода оного пользователем, дальше везде используется только необратимая функция (хэш) от пароля, например, MD5(пароль).
2) Храним на сервере табличку юзеров в виде (UserID, Login, MD5(пароль)).
3) При аутентификации:
а) клиентское приложение дергает некий метод сервера, например WantAuthorise,
б) в ответ сервер генерирует произвольную случайную строку S и отдает ее назад клиенту,
в) клиентское приложение колбасит строку S с помощью хэша пароля, вводимого юзером, например: MD5(S + MD5(пароль)) и отсылает ее назад вместе с логином,
г) сервер проверяет присланную клиентским приложением строку: ведь MD5(пароль) сервер знает, поэтому вычислить MD5(S + MD5(пароль) сможет.
Если на этапе г) строки для соотв. логина совпали, значит все ок, если нет: извиняйте.
Правда, если на апп-сервере требуется MS SQL аутентификация для разных юзеров СУБД, т.е. разграничение прав доступа к БД реализовано на уровне СУБД, а не апп-сервера, тогда пароль придется хранить на сервере в открытом или зашифрованном виде, чтобы поднимать коннект под конкретным MS SQL-юзером.


 
Digitman ©   (2004-03-30 11:39) [3]

реализуй собственного наследника интерфейса IAppServer

IMyAppServer = interface(IAppServer)
 function Autorization(User, Pwd, Role: String): Boolean;
end;

...

var
 MyAppserver: IMyAppServer;
..
MyAppserver := XXXConnection.GetServer as IMyAppServer;
if not MyAppserver.Autorization("Вася Пупкин", "Пароль", "Кул-программер") then
ShowMessage("Сервер приложений не дал тебе, Вася Пупкин, авторизацию");


 
Nikolay M. ©   (2004-03-30 12:27) [4]


> Digitman ©   (30.03.04 11:39) [3]

Почему бы результатом ф-ции Autorization не сделать интерфейс апп-сервера? Чтобы клиент мог получить доступ к методам сервера только после авторизации.


 
Digitman ©   (2004-03-30 12:35) [5]


> Nikolay M. ©   (30.03.04 12:27) [4]


а это уже иной вопрос


 
Nikolay M. ©   (2004-03-30 14:43) [6]

Вообще, имхо, если делать по-хорошему, тогда [2] + [3] с дополнением в [4].



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
8-1066642085
ИЛЕЙ
2003-10-20 13:28
2004.04.25
MP3 в Delphi


14-1081187191
gn
2004-04-05 21:46
2004.04.25
Эволюция Hello World


1-1081515243
LeShick
2004-04-09 16:54
2004.04.25
Скопировать вчерашний файл


1-1081146956
Comp
2004-04-05 10:35
2004.04.25
Поиск шрифта


14-1081071766
uw
2004-04-04 13:42
2004.04.25
Наука утверждает...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский