Logowanie informacji nt. dostępu do danych użytkowników

W czasie projektów wykorzystujących platformę Dynamics 365 dość często pojawia się temat logowania informacji, które związane są z dostępem do danych w systemie. Najczęściej spotykane są w tym przypadku 2 możliwości:

  • Wykorzystanie mechanizmu „Read Auditing” (dostępny tylko w wersji online systemu)
  • Stworzenie niestandardowego mechanizmu logowania informacji, zapisującego je w zewnętrznym źródle danych i wykorzystującego mechanizm pluginów na zdarzeniach Retrieve oraz RetrieveMultiple.  

W czasie ostatniego z projektów, nad którym pracowałem, zetknąłem się z wymaganiem logowania wspomnianych informacji dla encji Użytkownika (SystemUser). Okazało się, że użytkownicy systemu pochodzą z różnych organizacji, a z przyczyn, o których nie chcę w tym miejscu pisać, nie jest możliwa implementacja izolacji ich danych za pomocą standardowych mechanizmów bezpieczeństwa systemu. Stanęło więc na tym, że każdy odczyt informacji z rekordu użytkownika ma być zapisywany, tak żeby było wiadomo: „kto?”, „co?” i „kiedy?”.

Oczywiście, jak to często bywa w przypadku systemu Dynamics 365 CE, napotkaliśmy na nieoczekiwany problem. Okazało się, że system domyślnie nie umożliwia dodawania rozszerzeń dla zdarzeń Retrieve i RetrieveMultiple na encji SystemUser. Wynika to zapewne z przyczyn wydajnościowych. System odwołuje się bowiem do ww. danych praktycznie w czasie wszystkich wykonywanych operacji. Przykładowo – otwarcie formatki klienta (Account) w naszym systemie – powodowało uruchomienie 4 (!) requestów typu RetrieveMultiple do encji SystemUser.

Inne mechanizmy (logowanie na poziomie serwera WWW lub SQL Audit) niestety nie spełniały naszych wymagań, związanych z czasem wymaganym na implementację oraz rodzajem danych, które powinny być zapisywane.

Ponieważ wdrażany system, opiera się na wersji on-premise platformy Dynamics 365, udało znaleźć nam się sposób na obejście ww. ograniczenia. Wymaga on modyfikacji danych w systemie na poziomie bazy danych, do której w wersji online nie mamy oczywiście dostępu.

Uwaga! Opisywana poniżej metoda jest oczywiście metodą niewspieraną przez producenta systemu.

Dodatkowo może ona spowodować znaczną degradację jego wydajności z przyczyn, o których piszę powyżej. Stosujcie ją więc tylko w przypadkach, w których NAPRAWDĘ, NAPRAWDĘ 😊 musicie.

Możliwość rejestrowania pluginów dla zdarzeń encji SystemUser możemy aktywować, uruchamiając następujący skrypt SQL na bazie naszej organizacji:

Po wykonaniu powyższej komendy oraz restarcie serwera WWW – możliwość wykonania ww. operacji zostanie odblokowana.

Total Views: 242 ,
Be the first to comment

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *