Конференция "Corba" » Имперсонификация в трёхзвенном приложении (DCOM+ADO) [Delphi, Windows]
 
  • Un Copolly (03.03.07 18:49) [0]
    Добрый день! Возник такой вопрос, буду рад любой помощи. Пишется трёхзвенное приложение Клиенты--->DCOM--->Сервер1--->ADO--->MS SQL. Необходимо понять механизм персонификации пользователя на Сервере1 с помощью функции CoImpersonateClient (или как-нибудь ещё, главное, чтобы Сервер1 обращался к серверу БД от имени вызывающего клиента). Упростим ситуацию, допустим, на Сервере1 есть RemoteDataModule с ADOConnection, ADOTable и DataSetProvider, обращающиеся к базе данных, а на клиентах - DCOMConnection и ClientDataSet. Весь код сгенерирован автоматически, приложения пустые, идёт просто проверка такого подключения. Что нужно дописать на Сервере1, чтобы он подключался к базе данных от имени и с правами подключившегося к нему клиента? Гугль и хелп мне ничего не дали, по CoImpersonateClient в Delphi ничего нет. Ну или криво глядел, спасибо всем заранее!
  • Ломброзо © (04.03.07 17:55) [1]
    В коде править ничего не надо, а DCOM-сервер на запуск или активацию с привилегиями вызывающей стороны настраивается в dcom config (панель управления-администрирование->Component Services)
  • Dok_3D © (07.03.07 10:07) [2]
    2 Un Copolly   (03.03.07 18:49)

    Если твой "Сервер1" не exe, то в коде править нужно.

    Все просто:

    CoImpersonateClient;  // поворачиваем поток от уч. записи клиента
    ADOConnection.Open; // подключаемся к БД
    CoRevertToSelf;         // возвращаем поток обратно к уч. записи клиента



    Да, ну и конечно нужно на клинтской стороне выставить, уровень олицеворения по умолчанию Олицеворение или Представитель. Либо выставлять это дело программно в клиенских приложениях(через CoInitializaSecurity).
 
Конференция "Corba" » Имперсонификация в трёхзвенном приложении (DCOM+ADO) [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]