есть ли возможность расставить разрешения на интерфейсы со стороны сервера, причем детально, на каждый -- свои
Это зависит от платформы на которой сервер крутится.
1)В W2k просто, там в COM+ реализована ролевая защита, похожая на группы в NT. Можно отдельные права выставлять как на интерфейс, так и на методы, причем это возможно делать програмно, либо декларативно - через средства администрирования.
2)NT4
Здесь только руками
В реализации QueryInterface сервера вызвать
1. CoImpersonateClient
2. OpenThreadToken
3. Вытащить из токена SID пользователя и проверить(используя AccessCheck, либо свой метод), можно ли ему возвращать запрошенный интерфейс.Если нельзя тогда return E_ACCESSDENIED.
Вместо шагов 2 и 3 можно соорудить маленькую хитрость -
Создать обьект ядра на который навешиваются права доступа. Хорошо подходит ветка реестра - необходимо содать несколько веток и назначить некоторым пользователям права на них. В коде QueryInterface после имперсоонации попытаться открыть эти ветки.
Если необходима настройка прав на методы интерфейса - тогда придется для каждого(!) метода применять вышеописанный подход, что IMHO гемор полный.
а что если удаленный объект сам захочет обратиться к интерфейсу, который я ему передал?
А что ему мешает ? Или это про ConnectionPoint'ы ?