> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Journal des événements de sécurité de System Monitor

> Téléchargez au format CSV, à l’aide d’un script, le journal des événements de sécurité de System Monitor d’ABBYY FlexiCapture concernant les modifications des permissions via la requête POST GetSecurityEventsCSV.

Ce journal enregistre les événements liés à l’ajout, à la suppression et à d’autres modifications des permissions des utilisateurs. La journalisation des événements de sécurité est désactivée par défaut et ne peut être activée que par le System Administrator, directement dans une base de données FlexiCapture. Pour plus d’informations, consultez [journal des événements de sécurité](/fr/flexi-capture/web-stations/monitoring-console/mmc-security-event-log).

<Warning>
  Seuls les utilisateurs disposant des permissions de System Administrator peuvent télécharger les journaux des événements de sécurité depuis System Monitor. Un System Administrator est l’Administrator d’un tenant par défaut.
</Warning>

Pour télécharger ce journal, utilisez une requête POST :

```http theme={null}
POST https://<server address>/FlexiCapture12/Monitoring/Tenant/GetSecurityEventsCSV
```

<div id="request-parameters">
  ## Paramètres de la requête
</div>

Tous les paramètres sont obligatoires. Assurez-vous qu’ils sont renseignés correctement.

<Info>
  La recherche dans Oracle Database est sensible à la casse. Tenez-en compte si vous utilisez Oracle Database.
</Info>

| Paramètre         | Type   | Description                                                                                                                                                                                                                                       |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `filter`          | string | Conditions de filtre pour le journal. Combinez les conditions uniquement avec les opérateurs `AND` et `OR`, définis par le paramètre `GeneralOperator`. Pour plus d’informations, voir [Build the filter parameter](#build-the-filter-parameter). |
| `columnsOrder`    | string | Liste des colonnes à inclure dans le rapport, séparées par des virgules : `ID`, `Date`, `EventType`, `Details`, `RemoteHost`, `Principal`, `TenantName`, `Writer`, `WriterTenantName`.                                                            |
| `sortColumnindex` | int    | Indice de la colonne utilisée pour trier les enregistrements du journal.                                                                                                                                                                          |
| `sortOrder`       | bool   | Ordre de tri : `true` effectue un tri décroissant, `false` un tri croissant.                                                                                                                                                                      |
| `tenantId`        | int    | Tenants à inclure dans le journal : `-1` pour tous les tenants disponibles, `0` pour le tenant par défaut, ou l’ID d’un tenant spécifique (`1` ou plus).                                                                                          |

<div id="build-the-filter-parameter">
  ### Définir le paramètre `filter`
</div>

Le paramètre `filter` accepte un objet JSON. Par exemple :

```json theme={null}
{
  "GeneralOperator": "AND",
  "FilterItems": [
    {
      "PropertyKey": "Date",
      "PropertyOperator": "BETWEEN",
      "PropertyValues": [
        "2021-08-28",
        "00:00:00",
        "2023-09-28",
        "23:59:59"
      ]
    }
  ]
}
```

Pour trouver les valeurs des paramètres `PropertyKey` et `PropertyOperator`, créez un filtre dans l’Administration and Monitoring Console :

<Steps>
  <Step title="Ouvrir les outils de développement du navigateur">
    Dans le menu du navigateur, cliquez sur **Plus d’outils → Outils de développement**, puis ouvrez l’onglet **Réseau**.
  </Step>

  <Step title="Créer un filtre dans la console">
    Ouvrez l’Administration and Monitoring Console, accédez à **System Monitor → journal des événements de sécurité**, puis cliquez sur le bouton <img src="https://mintcdn.com/abbyy/39LtOHLEp1q7pm1x/images/flexi-capture/Add_filter.png?fit=max&auto=format&n=39LtOHLEp1q7pm1x&q=85&s=7fca1d511f8470021946ae439989fb68" alt="Bouton Ajouter un filtre" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="22" height="22" data-path="images/flexi-capture/Add_filter.png" />.
  </Step>

  <Step title="Appliquer les critères de filtrage">
    Définissez les critères de filtrage, puis cliquez sur **Apply**.
  </Step>

  <Step title="Lire les paramètres du filtre">
    Cliquez sur la requête `GetFilteredSecurityEvent`. Les paramètres de filtrage sont indiqués dans l’onglet **Payload**.
  </Step>
</Steps>

<div id="example-script">
  ## Exemple de script
</div>

Le script PowerShell suivant montre comment utiliser cette API pour télécharger le journal des événements de sécurité.

<Note>
  Dans ce script, remplacez les paramètres par l’adresse de votre serveur et vos propres identifiants.
</Note>

```powershell theme={null}
# paramètres
$server = "https://<server address>"
$user = "<user name>"
$password = "<password>"
#chemin vers le dossier où le log sera enregistré
$folder = "C:\Temp\Logs\Stage"
$reportFileName = "Tenant_SecurityEvents-{0:yyMMdd-HHmmss}.csv" -f (Get-Date)
# paramètres du log
$requestBody = @"
filter={
    "Name": "Filter",
    "GeneralOperator": "AND",
    "FilterItems": [
        {
            "PropertyKey": "Date",
            "PropertyOperator": "BETWEEN",
            "PropertyValues": [
                "2021-08-28",
                "00:00:00",
                "2023-09-28",
                "23:59:59"
            ]
        }
    ]
}
&columnsOrder=Id,Date,EventType,Details,RemoteHost,Principal,TenantName,Writer,WriterTenantName,
&sortColumnindex=1
&sortOrder=true
&tenantId=-1
"@
#------------------------------------------------------------------------------
$tenant = "" # Tenant par défaut uniquement
$methodUri = "/Tenant/GetSecurityEventsCSV"
$authServer = $server
$ServerSitePath = "/FlexiCapture12/Monitoring"

function Write-Line($str, $color = "White")
{
    Write-Host $str -ForegroundColor $color
}

function Join-Uri
{
    param([Parameter(Mandatory, ValueFromPipeline)] [string]$parent, [string]$child)
    if ($parent -eq "") {return $child;}
    if ($child -eq ""){return $parent}
    if ($parent.endswith("/") -or $parent.endswith("\\")) {$parent = $parent.substring(0,$parent.Length-1)}
    if ($child.startswith("/") -or $child.startswith("\\")) {$child = $child.substring(1,$child.Length-1)}
    return "$parent/$child"
}

function Get-AuthTicket($server, $user, $password, $tenant)
{
    $tenantSuffix=""
    if ($tenant -ne ''){ $tenantSuffix = "?tenant=$tenant"}
    $URL = Join-Uri $authServer "/FlexiCapture12/Server/FCAuth/API/Soap$tenantSuffix"
    $SOAPRequest = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><FindUser xmlns="urn:http://www.abbyy.com/FlexiCapture"><userLogin>user</userLogin></FindUser></soap:Body></soap:Envelope>'
    $Headers = @{
        'SOAPAction' = '"#FindUser"'
        'Content-Type' = 'text/xml; charset=utf-8'
        'Authorization' = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($user):$($password)")))"
    }
    try
    {
        $response1 = Invoke-WebRequest -Uri $URL -Headers $Headers -Body $SOAPRequest -Method 'POST'
        return $response1.Headers['AuthTicket']
    }
    catch{
        Write-Line -str "Couldn't get 'AuthTicket': $_" -color "Red"
        return ""
    }
}

function Download-CSVReport($server, $tenant, $authTicket, $methodUri, $requestBody, $folder, $reportFileName)
{
    $reportFullFilePath = Join-Path $folder $reportFileName
    #créer le dossier silencieusement (s'il n'existe pas)
    New-Item -ItemType Directory -Force -Path $folder | Out-Null
    if ($authTicket -eq "" -or $authTicket -eq $null)
    {
        Write-Line -str "Couldn't get 'CSV-Report'" -color "Red"
    }
    else
    {
        $header = @{ "Accept" = "*/*"}
        $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
        $session.Cookies.Add($server, [System.NET.Cookie]::new('FlexiCaptureTmpPrn', "Ticket=$authTicket"))
        $tenantInUrl=""
        if ($tenant -ne '') { $tenantInUrl = "/$tenant"}
        $uri = Join-Uri $server $ServerSitePath | Join-Uri -child $tenantInUrl | Join-Uri -child $methodUri
        try{
            $response = Invoke-WebRequest -Uri $uri -Method 'POST' -Headers $header -WebSession $session -Body $requestBody -OutFile $reportFullFilePath -MaximumRedirection 0 -ErrorAction Ignore -PassThru
            if ($response.StatusCode -lt 300)
            {
                Write-Line "CSV-Report done: $reportFullFilePath" "Green"
            }
            else
            {
                Write-Line -str "HttpStatus $($response.StatusCode) in getting CSV-Report." -color "Red"
            }
        }
        catch{
            Write-Line -str "Couldn't get CSV-Report: $_" -color "Red"
            return ""
        }
    }
}

$authTicket = Get-AuthTicket -server $server -user $user -password $password -tenant $tenant
Download-CSVReport -server $server -tenant $tenant -authTicket $authTicket -methodUri $methodUri -requestBody $requestBody -folder $folder -reportFileName $reportFileName
```
