Главная » Delphi » Настройка ролевой системы безопасности

0

Ролевая система  безопасности COM+ замечательна тем,  что  она  может  быть  реа лизована не только  на уровне приложения, но и на уровне  компонента, интерфейса и даже метода.  Это позволяет использовать роль для контроля доступа к отдельным ме тодам без единой строки кода, написанного вручную.

Вначале  система безопасности приложения COM+ организуется именно на уровне приложения. Для этого  модифицируются свойства самого  приложения при  помощи вкладки  Security средства администрирования  (консоли  MMC)  Component  Services (рис. 18.2).

Система  безопасности приложения активизируется при  установке флажка  Enforce access checks for this application (Установить проверку  доступа  для  этого  приложе ния).  Кроме  того,  в данном  диалоговом окне можно  выбрать уровень  защиты (только на уровне процесса или на уровне процесса и компонента).

Рис. 18.2. Настройка  системы  безопас

ности приложения COM+При  организации защиты только  на уровне  процесса, доступ к приложению про исходит через своего  рода  “двери”,  “ключ” от которых есть у каждого  члена  ролевой группы.  При  выборе такого  режима защиты не  выполняется никаких проверок на уровне  компонентов, интерфейсов и методов, а информация о состоянии безопасно сти объектами приложения не обрабатывается. Такой  подход  можно  использовать в тех случаях, когда не требуется строгая защита, а достаточно простого разграничения доступа к приложению различных групп пользователей. Кроме  того,  при  таком  типе защиты повышается производительность приложения, так как средствами COM+ не выполняется дополнительных проверок.

Организация защиты на уровне  процесса и компонентов подразумевает выполне ние ролевых проверок на уровне компонентов, интерфейсов и методов. В этом случае информация о состоянии безопасности обрабатывается объектами приложения. Та кой подход  более  гибок  и обеспечивает максимальную степень безопасности, однако значительно снижает производительность приложений из за выполнения средствами COM+ дополнительных проверок. В диалоговом окне  редактирования свойств системы безопасности, представлен ном   на  рис. 18.2,   также   можно   настроить  уровень   аутентификации  приложения COM+. Этот  уровень  определяет момент, до которого выполняется аутентификация при  обращении к приложению. Возможные значения уровня  аутентификации пред ставлены в табл. 18.1, причем каждому последующему  значению

соответствует более высокая степень защиты.Таблица 18.1. Уровни аутентификации COM+

Уровень                               Описание

None                                     Аутентификация не выполняется

Connect                                Аутентификация выполняется только  в момент  подключения

Call                                        Аутентификация выполняется перед  каждым обращением

Packet                      При  аутентификации проверяется  получение всех  данных.   Это значение  уровня   аутентификации  для  серверных  приложений

COM+ установлено по умолчанию

Packet Integrity     При   аутентификации  проверяется   целостность  передаваемых данных

Packet Privacy       При  аутентификации выполняется шифрование пакета, включая данные, идентификатор отправителя и его подпись (signature)

Обратите внимание, что в процессе аутентификации участвуют и клиент, и сервер. Средства COM+  проверяют уровень  аутентификации и клиента, и сервера, а затем выбирают наибольший из  них.  Уровень аутентификации клиента может  быть  уста новлен  одним из следующих способов:

•  На   уровне   машины,  при   помощи  средства  администрирования   Component

Services (или средства DCOMCNFG для систем, отличных от Windows 2000/XP).

•  На уровне  приложения, при  помощи средства администрирования Component

Services   (или    средства   DCOMCNFG   для   систем,   отличных   от   Windows

2000/XP).

•  На уровне  процесса, используя программный вызов  функции API COM CoIni- tializeSecurity().

•   Оперативно, при  помощи программного  вызова   функции  API  CoSetProxy- Blanket().

И,  наконец, при  помощи диалогового окна  свойств   системы безопасности  (см. рис. 18.2) можно  настроить уровень  заимствования (impersonation) прав  доступа. Дан ный уровень  определяет, в какой степени серверное приложение может заимствовать права  клиента, для доступа к ресурсам  от имени этого  клиента. Возможные значения уровня заимствования прав доступа представлены в табл. 18.2.

Таблица 18.2. Уровни заимствования прав доступа COM+

Уровень                               Описание

Anonymous                        Клиент для сервера анонимен

Identify                 Сервер может  получить идентификатор  клиента и выступать  от его имени  только  при проверке прав доступаОкончание табл. 18.2.

Уровень                               Описание

Impersonate            Хоть и с некоторыми ограничениями, но сервер может  выступать от имени клиента, при  этом  действует  он от своего  лица.  Сервер может  обращаться к ресурсам  на том же самом компьютере, что и клиент. Если сервер находится на том же самом компьютере, что и клиент, то он может  обращаться к сетевым ресурсам  от имени клиента. Если сервер находится на компьютере, отличном от кли ента,  то он может  обращаться только  к тем ресурсам, которые находятся  на   том   же   самом   компьютере,  что   и  сервер.  Это значение уровня  заимствования установлено для серверных приложений COM+ по умолчанию

Delegate          Сервер полностью выступает от имени  клиента, используя все его права  вне зависимости от компьютера, на котором расположены необходимые ресурсы.  Причем права  клиента могут быть предъявлены для доступа к любым машинам  в любом количестве. Это самые широкие полномочия, которое можно предоставитьПодобно аутентификации, заимствование прав  может  быть  выполнено только  с разреше ния клиента. Получение разрешения клиента на использование его  прав  осуществляется точно так же, как при идентификации: при помощи средств  администрирования Component Services и DCOMCNFG или функций API CoInitial- izeSecurity() и CoSetProxyBlanket().

По   окончании   настройки   системы   безо

пасности на  уровне   приложения  она  может быть  настроена на  уровне  компонентов, ин терфейсов и методов. Для этого  достаточно отредактировать соответствующее свойство элемента в древовидной структуре  и на вклад ке Security. При  этом используется диалоговое окно,  подобное представленному на рис. 18.3.

Данное диалоговое окно достаточно про стое и позволяет задать режим  проверки и ро ли, обладающие доступом к этому элемента.

Рис. 18.3. Настройка системы безопас ности компонента COM+

Многоуровневые приложения

При   разработке  многоуровневых приложений,  в  которых  реализована система безопасности COM+, необходимо учитывать некоторые моменты, связанные с произ водительностью. Не нужно забывать о том,  что одной  из основных задач любой  мно гоуровневой системы является улучшение общей масштабируемости. Одной из оши бок, которые часто  приводят к противоречию между масштабируемостью и произво дительностью, является реализация системы безопасности приложения на несколь ких  уровнях  многоуровневой модели.  При  работе со службами  COM+  систему  безо пасности лучше всего реализовывать на среднем уровне.  Например, вместо  заимство вания  прав  клиента для доступа  к базе  данных, значительно эффективнее получить такой  доступ при помощи обычного подключения, которое может  быть затем распре делено  между множеством клиентов.

Программная защита

До этого  момента речь  шла преимущественно о декларативной (то  есть  управляе мой  администратором) системе безопасности, однако  в приложениях COM+ можно также  использовать и программную защиту.  В общем  случае можно  определить, при надлежит ли  клиент, вызывающий некоторый метод,  к определенной роли.  Таким образом на основании роли  клиента можно  контролировать не только  доступ к мето дам, но и их поведение. Для этого  в COM+ используется два подхода.  Первый из них заключается в использовании метода  IsCallerInRole() интерфейса IObjectCon- text. Он определен следующим образом:

function IsCallerInRole(const bstrRole: WideString): Bool;

safecall;

В качестве параметра bstrRole этой  функции передается имя роли, а возвращае мый результат типа  Boolean указывает на принадлежность текущего  клиента указан ной  роли.  Ссылку на контекст текущего  объекта можно  получить при  помощи функ ции API GetObjectContext(), которая определена таким образом:

function GetObjectContext: IObjectContext;

В следующем фрагменте программного кода перед выполнением некоторой зада

чи осуществляется проверка клиента на предмет его принадлежности роли Hero:

var

Ctx: IObjectContext;

begin

Ctx := GetObjectContext;

if (Ctx <> nil) and (Ctx.IsCallerInRole(‘Hero’)) then begin

// Здесь выполняются действия

end;

end;

Точно также  можно  использовать метод  IsCallerInRole() интерфейса ISecu- rityCallContext через ссылку, которая может  быть получена при помощи функции API  CoGetCallContext(). Использование  этой   версии  метода   более   предпочти тельно, так как интерфейс ISecurityCallContext предоставляет массу другой  ин формации о системе безопасности (например информацию о клиенте, его  аутенти фикации и уровнях  заимствования прав доступа).

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии