Die Dokumentenmanagement-Lösung für die Einhaltung des Sarbanes Oxley Act konzentriert sich auf Abschnitt 404 und 409 des Gesetzes, speziell auf Leitungsbewertung von internen Steuerelementen und Echtzeitveröffentlichung. Die Funktion eignet sich zwar unabhängig vom verwendeten Repository-Typ für alle Dokumente, aber am besten für Dokumentendateien, die in der Datenbank gespeichert sind. Deshalb empfiehlt es sich, ein Repository vom Typ Datenbank zu verwenden, wenn Sie eine SOX-Kontrolle für Ihre Dokumentendateien wünschen.
In der Praxis wird dies durch die Funktionalität gewährleistet.
Protokollieren von Lese-, Schreib- und Löschvorgängen von Dokumentdateien. Die Protokolleinträge finden Sie auf der Seite Log – Dateioperationen unter „Basisdaten“. Ferner werden Ereignismeldungen für Lese-, Schreib- und Löschvorgänge von Dokumentendateien erzeugt, sodass diese Ereignisse mit Ereignisaktionen versehen werden können. Ein Benutzer kann nur seine eigenen Protokolleinträge betrachten; es sei denn, er verfügt über die Systemberechtigung „DOCMAN ADMINISTRATOR“, dank der er sich jeden Protokolleintrag einsehen kann.
Ein Dokument gilt als „gelesen“, sobald ein Anwender in der Lage war, mit seinem PC eine Kopie der Dokumentendatei zu beziehen. Beispiele für Arbeitsgänge in der Anwendung, wo dies geschieht, sind Bearbeiten (Checkout), Anzeigen und Drucken. Ein Dokument gilt als „geschrieben“, sobald ein Benutzer eine neue oder bearbeitete Dokumentendatei eincheckt. Ein Dokument wurde gelöscht, wenn ein Anwender eine Dokumentdatei entfernt.
Technisch funktioniert SOX durch Erzwingen des Kunden, anzukündigen, dass es eine Dateioperation durchführen wird, durch Benennen der Methode Edm_File_Op_Announce_Api.Announce_File_Operation. Für Dokumente, die in einem Datenbank-Repository gespeichert sind, gilt Folgendes: Wenn die Client-Anwendung eine Dateioperation nicht ankündigt, erhält sie auch keinen Zugriff auf die Dokumentendatei (weil sich das Dokument in der Datenbank befindet, behalten wir die volle Kontrolle über den Zugriff). Wir können zwar kontrollieren, ob unser eigener Client dies tut, aber Clients von Drittanbietern oder gehackte Clients können wir nicht kontrollieren. Aus diesem Grund ist der Ankündigungsansatz notwendig. Letztendlich ist es die Ankündigungsmethode, die das Protokollieren und das Generieren des Ereignisses vollbringt. Die Ankündigungsmethode wird in einer eigenständigen Transaktion ausgeführt und setzt am Ende ein COMMIT ab, um sicherzustellen, dass der Client kein ROLLBACK durchführt, der das Erstellen eines Protokolleintrags zu verhindern versuchen würde. Die Ankündigung einer Dateioperation ist nicht erforderlich, um eine Kopie einer Datei zu erhalten, die sich in einem FTP-Repository oder in einem gemeinsamen Repository befindet. Wenn die Dateioperationen jedoch über einen offiziellen DocMan-Client ausgeführt werden, werden sie ebenfalls protokolliert, auch wenn es technisch gesehen nicht erforderlich ist, eine Kopie der Datei zu erhalten.
Protokolldatensätze werden standardmäßig alle dreißig (30) Tage gespeichert, aber dies kann mit dem SYSCFG Standardwert SYSCFG_SOX_LOG_EXPIRE_DAYS geändert werden. Ein Stapelverarbeitungslauf, der alte Datensätze löscht, wird einmal pro Tag ausgeführt.
Drei Vorlagen für SOX-Ereignisaktionen können im Vorlagenordner dieser Veröffentlichung gefunden werden. Sie sind Einsatzdateien, die von SQL*Plus oder ähnlichen Tools installiert werden. Die Ereignisse sind bereits installiert.
Neben der Nutzung des Protokolls als Überwachungsinstrument (für DocMan-Administratoren und andere Benutzer) können die Protokolldaten auch verwendet werden, um nützliche gespeicherte Abfragen zu schreiben, mit denen sich etwa Dokumente heraussuchen lassen, an denen ein Benutzer zuletzt gearbeitet hat. Das nachfolgende Beispiel zeigt eine WHERE-Bedingung für eine solche gespeicherte Abfrage, die diesen Zweck auf der Seite Dokumentrevisionen gut erfüllt:
(doc_class, doc_no) IN (SELECT doc_class, doc_no FROM &AO.edm_file_op_announce UNION SELECT doc_class, doc_no FROM &AO.document_issue_history WHERE created_by = (SELECT &AO.person_info_api.get_id_for_user('#USER_ID#') FROM DUAL) AND date_created < SYSDATE-30)
Verwenden Sie eine Sortierung wie „dt_chg desc“, um die Dokumente absteigend nach ihrer Neuheit zu sortieren.