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