Здравствуйте VladD2, Вы писали:
KS>>Имеется два компьютера, работающих п/у WinNT 4.0. KS>>На одном работает сервис, он запускает через DCOM на KS>>другом компьютере in-proc сервер, который компилирует файл.
VD>Ну, и какое отношение они могут иметь друг к другу?
Сервису нужны результаты компиляции этого файла
KS>>В DCOMCNFG на этот in-proc launch и access — everyone.
VD>Чего? Ты случаем не о суррогатах говоришь? DCOMCNFG задает права на доступ к DCOM-приложениям (exe-шникам), а in-proc-сервер по определению является библиотекой и не имеет отношение к конкретному приложению. Сурогат же не является in-proc-сервером. Есть еще один вариант – in-proc может быть установлен в COM+/MTS-приложение. Тогда DCOMCNFG вообще не поможет, так как настройки надо делать в специальных средствах администрирования.
Мы добавили AppID для этого инпроса в .rgs-файле, чтобы управлять им в DCOMCNFG
KS>>На файл установлено ограничение — доступ к нему имеет определенный пользователь.
VD>На какой файл? Ничего непонятно! Если на исполнимый файл DCOM-сервера, то доступ к серверу сможет получить только этот пользователь. Если речь идет о файле который нужно компилировать, то просто нужно запускать DCOM-сервер под учетной записью которой дано право доступа к этому файлу (и не в коем случае из под дефолтного "ланчинг узерь"). А имперсонация здесь вообще не нужна. Если нужно обеспечить проверку прав доступа к файлу применительно к вызывающему клиенту, то клиент должен делать вызов с уровнем имперсонации имперсонэйт, а сервер (а не клиент) делать эту самую имперсонацию. При этом проверки к локальным ресурсам (файлам на локальном диске, веткам реестра) будут производиться применительно к клиенту.
На файл, который нужно скомпилировать
KS>> Мы на клиенте делаем имперсонацию, но они до сервера не доходят, поэтому компиляция файла не проходит — access denied.
VD>Кто они? Зачем на клиенте делать имперсонацию (это бессмысленно)? Причем тут вообще in-proc-сервер?
Права доступа имперсонируемого пользователя
KS>>Пытались использовать cloaking, используя на клиенте Win2000 — ничего не получилось.
VD>Для клоакинга нужно иметь и на клиенте и на сервере W2k. Клоакинга же тебе без надобности, нужно просто сделать имперсонацию на сервере.
Как? Мы пыталисью, но инпрос на сервере запускается с правами анонимного пользователя и не имеет права на имперсонацию
KS>>Что нужно предпринять, чтобы сервер получил доступ к файлу.
VD>Для начала нужно определиться с тем, что конкретно нужно? Почему клиент не может просто вызывать метод сервера, а тот просто компилировать нужный файл?
Наш сервис работает под системным аккаунтом, поэтому некоторые операции, которые требуют некоторых дополнительных привелегий, мы выполняем под специальным аккаунтом (имперсонируемся)
VD>PS
VD>В нулевом номере RSDN Mag будет статья о защите в DCOM/COM+. Очень советую ее почитать. Журнал должен выйти на следующей неделе.