Форум: "Базы";
Текущий архив: 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.043 c