уровень аутентификации и даже изменить его в процессе выполнения. Ниже приводятся возможные значения этого уровня:
1. None
Аутентификация не выполняется. В этом случае клиент анонимен для сервера и никакого контроля за передаваемыми
данными не проводится.
2. Connect
Именно этот уровень обычно выбирается администратором как уровень по умолчанию. Аутентификация клиента
выполняется при первом соединении клиента
с сервером. Защиты передаваемых данных нет.
3. Call
Аутентификация клиента выполняется при каждом вызове метода сервера. Выполняется защита от перехвата и
прочтения передаваемых данных стандартными средствами. Для этого выполняется шифрование последовательных
номеров передаваемых пакетов.
4. Packet
Аутентификация выполняется при пересылке каждого пакета. Шифруются номера передаваемых пакетов.
5. Packet_Integrity
Кроме того, что выполняется на предыдущем уровне
, вычисляется, шифруется и передается контрольная сумма
пакета. В результате контролируется целостность передаваемых данных.
6. Packet_Privacy
В дополнение к функциональности предыдущего уровня выполняется шифрование всех передаваемых данных.
Выбор того или иного уровня аутентификации определяется соотношением степени секретности данных и расходами на
поддержку того или иного уровня безопасности. COM+ предоставляет возможность задавать разные уровни безопасности
динамически, что позволяет гибко учитывать требования приложения к безопасности.
z Уровень имперсонализации
Этот уровень определяется только клиентским приложением (и серверным, когда оно выступает клиентом по отношению к
другому серверному приложению). Уровень имперсонализации определяет объем прав доступа, которые клиентское
приложение желает передать серверному.
Рассмотрим прежде всего сам механизм имперсонализации. После входа пользователя в систему все запускаемые (прямо и
косвенно) им процессы имеют
маркер доступа (access token), содержащий, в частности, такую информацию как SID
(Security IDentifier) пользователя и SID всех груп, в которых зарегистрирован данный пользователь, а также различные его
привелегии. Каждому локальному ресурсу приписан список ACL (Access Control List), содержащий элементы ACE (Access
Control Entry), в каждом из которых разрешается или запрещается определенный набор способов доступа к данному ресурсу
для некоторого SID. При попытке обращения некоторого
потока к некоторому локальному ресурсу происходит
последовательный просмотр ACL этого ресурса и все SID из маркера доступа процесса, содержащего данный поток,
сопоставляются с SID из очередного ACE. Процесс просмотра ACL прекращается, как только выясняется, что данный поток
обладает достаточными правами для доступа к ресурсу, либо, напротив, что доступ запрещается.
Каждое запущенное серверное приложение в COM+ является принципалом
, обладающим собственным SID. Предположим,
что некоторый поток в этом приложении исполняет вызов, пришедший от некоторого клиента. По умолчанию права
доступа данного потока определяются маркером доступа процесса, в котором исполняется приложение. Таким образом, по
умолчанию используются права доступа, данные администратором принципалу, от имени которого запущено приложение.
Однако, как правило, принципал, от имени
которого запущено приложение, не совпадает с клиентом, запустившим
приложение. Таким образом, прав приложения может быть недостаточно для доступа к необходимым локальным ресурсам.
Однако эти права могут иметься у клиента. Вызвав функцию
ImpersonateClient (подробнее это будет рассмотрено далее),
поток серверного приложения будет далее использовать новый маркер доступа, содержащий данные вызвавшего его
клиента, и, следовательно, сможет выступать от его имени.
Объем передаваемых прав определяет сам клиент. В нашем случае (все параметры заданы по умолчанию) уровень
имперсонализации для всех вызовов с данной машины на на
удаленные машины определяет администратор. Вот
возможные значения для этого уровня:
1. Anonimous
Данный уровень, при котором клиент анонимен для сервера, не используется
2. Identity
Идентификационная информация о клиенте известна серверу, но ее недостаточно для доступа к локальным ресурсам
от лица клиента. Именно этот уровень обычно выбирается администратором как уровень имперсонализации по
умолчанию.
3. Impersonate
Данный
уровень имперсонализации достаточен для того, чтобы сервер мог получать доступ ко всем локальным
ресурсам от лица клиента. Это наивысший уровень имперсонализации для SSP NT LAN Manager.
4. Delegate
При этом уровне сервер может делать удаленные вызовы от лица клиента. Этот уровень появился в SSP Kerberos.
Что делать, если уровни аутентификации и имперсонализации, установленные по умолчанию администратором данной
конкретной
машины, не устраивают клиентское приложение? Имеются два выхода:
z Клиентское приложение задает собственный уровень безопасности по умолчанию в рамках своего процесса
z Клиентское приложение может динамически менять свои требования к уровню безопасности в процессе выполнения.
Для задания собственного уровня безопасности по умолчанию в рамках своего процесса клиентское приложение может вызвать
функцию
CoInitializeSecurity. Серверное COM+ приложение не должно вызывать эту функцию, т.к.она вызывается автоматически и
вторичный ее вызов завершится ошибкой.
Если клиентское приложение не вызвало
CoInitializeSecurity явно, эта функция будет вызвана автоматически при первом
маршалинге интерфейса, который был инициирован данным приложением. При этом при задании уровня безопасности будут
использованы параметры, заданные в локальной системе по умолчанию. При явном вызове этой функции клиентское приложение
задает, в частности, следующие параметры: