Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: безопасность и DCOM  (Прочитано 12145 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dumb
Гость
« : 08-09-2003 05:24 » 

имеется MMC snap-in, при загрузке он создает COM-объект на удаленной машине и получает его IPersistStorage. Открывает локальный файл и получает его IStorage. вызывает IPersistStorage::Load с этим IStorage. при настройках по умолчанию получает "нет доступа". если вызвать CoInitializeSecurity(NULL,-1,NULL...), то все работает, но это проверено на тестовой программе, а внутри MMC эта функция уже вызвана. полагаю, следует ковыряться в прокси IStorage который я передаю в IPersistStorage::Load. есть ли более простое и логичное решение? (логичное в смысле, что мне не нужна безопасность на интерфейсах, которые я передаю удаленному объекту).
Записан
NetRaider
Гость
« Ответ #1 : 08-09-2003 07:11 » 

А на файл разрешения стоят правильные?
Если удаленный объект создается и другие методы вызываются без ошибок, тогда можно перед вызовом Load можно попробовать сделать так:
CoSetProxyBlanket(pIPersistStorage,
        RPC_C_AUTHN_NONE,
        RPC_C_AUTHZ_NONE,
        NULL,
        RPC_C_AUTHN_LEVEL_NONE,
        RPC_C_IMP_LEVEL_IDENTIFY,
        NULL,
        EOAC_NONE);
Записан
NetRaider
Гость
« Ответ #2 : 08-09-2003 07:35 » 

или на сервере клиента имперсоонировать
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 08-09-2003 08:34 » 

А пояснить мне как ... полному 0 в этом можно??? Интересно...
Записан

А птичку нашу прошу не обижать!!!
NetRaider
Гость
« Ответ #4 : 09-09-2003 00:18 » 

Цитата: Гром
А пояснить мне как ... полному 0 в этом можно??? Интересно...


А что конкретно интересует ?
Записан
dumb
Гость
« Ответ #5 : 17-09-2003 05:00 » 

Цитата: NetRaider
А на файл разрешения стоят правильные?
Если удаленный объект создается и другие методы вызываются без ошибок, тогда можно перед вызовом Load можно попробовать сделать так:
CoSetProxyBlanket(pIPersistStorage,
        RPC_C_AUTHN_NONE,
        RPC_C_AUTHZ_NONE,
        NULL,
        RPC_C_AUTHN_LEVEL_NONE,
        RPC_C_IMP_LEVEL_IDENTIFY,
        NULL,
        EOAC_NONE);


можно, конечно... не знаю -- попробую... но вопрос более общий: а что если удаленный объект сам захочет обратиться к интерфейсу, который я ему передал? (: первоначальный вопрос можно переформулировать так: есть ли возможность расставить разрешения на интерфейсы со стороны сервера, причем детально, на каждый -- свои, не в стиле CoInitializeSecurity? есть, конечно, и замечательно простое решение (: -- в настройках DCOM "разрешения доступа по умолчанию" установить доступ для всех... но это уж слишком круто, IMHO
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #6 : 17-09-2003 05:19 » 

NetRaider, все... с самого начала.
Записан

А птичку нашу прошу не обижать!!!
NetRaider
Гость
« Ответ #7 : 17-09-2003 09:17 » 

Цитата

есть ли возможность расставить разрешения на интерфейсы со стороны сервера, причем детально, на каждый -- свои


Это зависит от платформы на которой сервер крутится.
1)В W2k просто, там в COM+ реализована ролевая защита, похожая на группы в NT. Можно отдельные права выставлять как на интерфейс, так и на методы, причем это возможно делать програмно, либо декларативно - через средства администрирования.

2)NT4
Здесь только руками Жаль
В реализации QueryInterface сервера вызвать
1. CoImpersonateClient
2. OpenThreadToken
3. Вытащить из токена SID пользователя и проверить(используя AccessCheck, либо свой метод), можно ли ему возвращать запрошенный интерфейс.Если нельзя тогда return E_ACCESSDENIED.

Вместо шагов 2 и 3 можно соорудить маленькую хитрость -
Создать обьект ядра на который навешиваются права доступа. Хорошо подходит ветка реестра - необходимо содать несколько веток и назначить некоторым пользователям права на них. В коде QueryInterface после имперсоонации попытаться открыть эти ветки.

Если необходима настройка прав на методы интерфейса - тогда придется для каждого(!) метода применять вышеописанный подход, что IMHO гемор полный.

Цитата

а что если удаленный объект сам захочет обратиться к интерфейсу, который я ему передал?

А что ему мешает ? Или это про ConnectionPoint'ы ?
Записан
dumb
Гость
« Ответ #8 : 22-09-2003 03:03 » new

это ИМЕННО про ConnectionPoint'ы  Жаль кроме того, с общим рабочим решением все понятно... вопрос был именно о наиболее простой реализации
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines