Как сделать это правильно? (LDAP + трехзвенка)

Anatoly Korobkov
Дата: 22.06.2009 20:47:04
Есть трехзвенка: клиент набирает логин-пароль, сервер это дело проверяет и организует ADOConnection на SQL-сервер (MS SQL 2005) с указанными логин-паролем и выполняет всякие действия в БД по поручению клиента.
Есть задача перевести это на ActiveDirectory, т.е. клиенты не набирают логин-пароль и, соответственно, данные не пересылаются на сервер.
Возникает проблема: как в сервере подсоединиться к SQL-серверу от имени такого AD-клиента???
Имя клиента вытащить не проблема. Но как взять его пароль? Да и верно ли это? Может есть другой механизм как организовать коннект к SQL от имени пользователя?

Буду весьма признателен за помощь-совет в данном вопросе!
ДжекНепотрошитель
Дата: 23.06.2009 10:48:15
А у тебя неправильная архитектура. В трехзвенках вопросы авторизации должны решаться на сервере приложений, а с СУБД он должен общаться не под бюджетом пользователя, а под технологическим бюджетом. Тем более что постоянное создание новых подключений портит полезный эффект от использования сервера приложений.
MaratIsk
Дата: 23.06.2009 12:23:07
нужно уточнять что за сервер приложений используется
Anatoly Korobkov
Дата: 23.06.2009 17:36:20
ДжекНепотрошитель
А у тебя неправильная архитектура. В трехзвенках вопросы авторизации должны решаться на сервере приложений, а с СУБД он должен общаться не под бюджетом пользователя, а под технологическим бюджетом.
Не соглашусь. Большим плюсом данной схемы (с созданием коннекшнов с переданными логин-пароль) является то, что она гарантирует бОльшую надежность, нежели работа под тех. бюджетом: как не изголяйся, как сервер приложений не ломай, все равно доступ на SQL сервер будет ограничен логин-паролем пользователя.
ДжекНепотрошитель
Тем более что постоянное создание новых подключений портит полезный эффект от использования сервера приложений.
У меня между клиентом и сервером приложений создается постоянное TCP-соединение. Соответственно, ADOConnection создается только 1 раз при логине клиента. Особых затрат это не требует.
MaratIsk
нужно уточнять что за сервер приложений используется
Самописный. Стандартный TCP-сервер и такой же стандартный TCP-клиент. TCP-клиент посылает разные запросы (асинхронно), некоторые из них приводят к обращению к SQL от имени пользователя.

Все-таки остается открытым вопрос: можно ли заставить SQL сервер принимать ADOConnection от имени AD-пользователя? Или можно как-то извлекать пароль из AD, имея только имя пользователя???
Petro123
Дата: 23.06.2009 19:53:54
На сиквеле неэффективно и вредно делать 3е звено. Зайди к ним на сервер.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
Petro123
Дата: 23.06.2009 19:56:06
На сиквеле неэффективно и вредно делать 3е звено. Зайди к ним на сервер.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
Anatoly Korobkov
Дата: 23.06.2009 21:52:53
Petro123
На сиквеле неэффективно и вредно делать 3е звено.

А на сиквеле никто и не делает. Промежуточный уровень, это отдельные TCP-сервера, имеющие свою бизнес-логику и иногда обращающиеся от имени пользователя к скулю.

Petro123
Зайди к ним на сервер.

Не понял, к кому зайти. :)
Petro123
Дата: 24.06.2009 09:19:41
Anatoly Korobkov
Petro123
На сиквеле неэффективно и вредно делать 3е звено.

А на сиквеле никто и не делает. Промежуточный уровень, это отдельные TCP-сервера, имеющие свою бизнес-логику и иногда обращающиеся от имени пользователя к скулю.

Petro123
Зайди к ним на сервер.

Не понял, к кому зайти. :)

я тебе про фому, а ты про ерёму. Перенеси БЛ на сервер или клиенты, и не будет таких сабж-вопросов. Или спроси про 3-х звенки на форуме СУБД.

Хочешь просто - MS рекомендует БЛ на сервере. Дяже ЯП туда засунул.
Хочешь сложно и "рукописно" - делай на оракле. Там SSO есть, и куча примочек-стандартов для этого.
Anatoly Korobkov
Дата: 24.06.2009 21:34:31
Petro123
я тебе про фому, а ты про ерёму. Перенеси БЛ на сервер или клиенты, и не будет таких сабж-вопросов. Или спроси про 3-х звенки на форуме СУБД.

[quot Petro123]Хочешь просто - MS рекомендует БЛ на сервере. Дяже ЯП туда засунул.
Хочешь сложно и "рукописно" - делай на оракле. Там SSO есть, и куча примочек-стандартов для этого.
Видимо я плохо объяснил... Есть SQL Server с реализованной бизнес-логикой. Есть промежуточные сервера в задачи которых входит, в том числе, проведение клиентских операций в SQL Server. Реализация сделана так, что проведение этих операций осуществляется именно от имени (логин-пароль) пользователя, а не под технологическим логином. Благодаря этому значительно повышается уровень безопасности системы, ибо взлом промежуточного сервера не предоставит прав выше чем это прописано в БД. Раз уж были предложения перевести все под единый логин, объясню, почему этого не стоит делать: технологический логин должен обеспечивать работу всех клиентов, имеющих самые разные права, а, следовательно, должен иметь доступ ко всем процедурам всех клиентов (по сути, наивысший уровень доступа). Соответственно, уровень безопасности системы определяется только надежностью работы промежуточных серверов

Описанный механизм прекрасно работает. Однако теперь есть задача - добавить поддержку AD. Возникла идея сделать такой вот mixed mode:
Если пользователь заходит через AD, то передается только логин пользователя. Дальше проверяются его права в AD, а затем организуется коннекшн с переданным логином и предопределенным (вшитым) паролем. Соответственно, администратор, при импорте пользователя из AD, задает ему в SQL Server тот самый предопределенный пароль.
Таким образом, обычные пользователи работают, передавая логин-пароль, а пользователи AD передают только логин. Пароль используется предопределенный заранее.
Как считаете? Может есть более "правильный" способ?
___void
Дата: 25.06.2009 08:27:27
Anatoly Korobkov

Описанный механизм прекрасно работает. Однако теперь есть задача - добавить поддержку AD. Возникла идея сделать такой вот mixed mode:
...
Как считаете? Может есть более "правильный" способ?


IMHO,
похоже, вам просто скучно и нечем заняться...

Одна из "идей" много-звенок - это как раз абстрагироваться от ОС, СУБД и т.д.
а вы пытаетесь притянуть за уши "очередной результат работы больного воображения Билли"...