Аудит и история операций

Аудит действий пользователя в репозитории является неотъемлемой частью средств защиты платформы. Информация о выполняемых действиях сохраняется в протоколе доступа. По умолчанию осуществляется аудит всех операций, кроме чтения дескриптора объекта. Чтение дескрипторов осуществляется при навигации по репозиторию, поэтому включение аудита для этой операции может привести к чрезмерному увеличению размера протокола доступа.

Аудит может быть настроен для классов объектов или для отдельных объектов репозитория. Ведение истории настраивается для классов объектов. Для настройки аудита для классов объектов и истории операций предназначен интерфейс IMetabaseAuditPolicy, доступ к котором возвращает свойство IMetabasePolicy.AuditPolicy. Аудит для отдельных объектов репозитория настраивается параметрах управления доступом к объекту, которые возвращает свойство IMetabaseObjectDescriptor.SecurityDescriptor. Результат аудита операций будет доступен в протоколе доступа. Историю изменения отдельных объектов можно получить, используя метод IMetabaseObjectDescriptor.GetHistory.

Настройка аудита и истории для класса объекта:

Sub ChangeAuditAndHistoryForClass;
Var
    Mb: IMetabase;
    MbSec: IMetabaseSecurity;
    AuditPolicy: IMetabaseAuditPolicy;
    Lic: Object;
Begin
    MB := MetabaseClass.Active;
    // Получим лицензию для возможности работы с менеджером безопасности
    Lic := Mb.RequestLicense(UiLicenseFeatureType.Adm);
    MbSec := Mb.Security;
    // Изменим аудит и ведение истории для объектов класс Регламентный отчёт
    AuditPolicy := MbSec.Policy.AuditPolicy;
    AuditPolicy.FilterClass(MetabaseObjectClass.KE_CLASS_PROCEDURALREPORT) := MetabaseObjectPredefinedRights.Write Or
        MetabaseObjectPredefinedRights.Access Or MetabaseObjectPredefinedRights.Delete;
    AuditPolicy.TrackClassHistory(MetabaseObjectClass.KE_CLASS_PROCEDURALREPORT) := MetabaseObjectPredefinedRights.Write Or
        MetabaseObjectPredefinedRights.Access;
    // Сохраним изменения
    MbSec.Apply;
    // Освободим лицензию
    Lic := Null;
End Sub ChangeAuditAndHistoryForClass;

Настройка аудита для отдельного объекта репозитория:

Sub ChangeAuditForObject;
Var
    Mb: IMetabase;
    ObjDesc: IMetabaseObjectDescriptor;
    SecDesc: ISecurityDescriptor;
    AcessCL: IAccessControlList;
    Subject: ISecuritySubject;
    Lic: Object;
Begin
    Mb := MetabaseClass.Active;
    // Получим лицензию для возможности работы с менеджером безопасности
    Lic := Mb.RequestLicense(UiLicenseFeatureType.Adm);
    // Получим пользователя, для которого будут настраиваться аудит доступа
    Subject := Mb.Security.ResolveName("OWNER");
    // Получим объект, для которого настраивается аудит доступа
    ObjDesc := Mb.IteMbyId("STD_CUBE");
    SecDesc := ObjDesc.SecurityDescriptor;
    SecDesc.Edit;
    // Дополнительные параметры безопасности
    AcessCL := SecDesc.Acl;
    // Установка аудита для операций
    AcessCL.AddAce(
        AceType.Audit,
        Subject.Sid,
        MetabaseObjectPredefinedRights.Write Or
        MetabaseObjectPredefinedRights.Access Or MetabaseObjectPredefinedRights.Delete);
    // Сохраним изменения
    SecDesc.Apply(True);
    // Освободим лицензию
    Lic := Null;
End Sub ChangeAuditForObject;

Просмотр истории изменения объекта:

Sub GetObjectHistory;
Var
    MB: IMetabase;
    Desc: IMetabaseObjectDescriptor;
    History: IMetabaseObjectHistory;
    Item: IMetabaseObjectHistoryItem;
Begin
    MB := MetabaseClass.Active;
    Desc := Mb.ItemById("STD_CUBE");
    History := Desc.GetHistory;
    // Просмотр истории объекта
    For Each Item In History Do
        Debug.WriteLine(Item.Id + " | " +
            Item.Name + " | " +
            DateTime.FromDouble(Item.Stamp).ToString + " | " +
            Item.Comment + " | " +
            Item.Description + " | " +
            Item.UserName);
    End For;
End Sub GetObjectHistory;

См. также:

Работа с менеджером безопасности