

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Überwachen von Datenbankaktivitäts-Streams
<a name="DBActivityStreams.Monitoring"></a>

Datenbankaktivitäts-Streams überwachen und melden Aktivitäten. Der Aktivitäts-Stream wird erfasst und an Amazon Kinesis übertragen. Von Kinesis aus können Sie den Aktivitäts-Stream überwachen, oder andere Dienste und Anwendungen können den Aktivitäts-Stream zur weiteren Analyse nutzen. Sie können den zugrunde liegenden Namen des Kinesis-Streams mit dem AWS CLI-Befehl `describe-db-instances` oder der RDS-API-Operation `DescribeDBInstances` finden.

Amazon RDS verwaltet den Kinesis Stream wie folgt:
+ Amazon RDS erzeugt den Kinesis Stream automatisch mit einem Aufbewahrungszeitraum von 24 Stunden. 
+  Amazon RDS skaliert den Kinesis-Stream bei Bedarf. 
+  Wenn Sie den Datenbankaktivitäts-Stream stoppen oder die DB-Instance löschen, löscht Amazon RDS den Kinesis-Stream. 

Die folgenden Kategorien von Aktivitäten werden überwacht und in das Prüfprotokoll des Aktivitäts-Streams aufgenommen:
+ **SQL-Befehle** – Alle SQL-Befehle werden geprüft, ebenso vorbereitete Anweisungen, integrierte Funktionen und Funktionen in PL/SQL. Aufrufe von gespeicherten Prozeduren werden überprüft. Alle SQL-Anweisungen, die in gespeicherten Prozeduren oder Funktionen ausgegeben werden, werden ebenfalls überprüft.
+ **Sonstige Datenbankinformationen** – Die überwachte Aktivität umfasst die vollständige SQL-Anweisung, die Zeilenzahl der betroffenen Zeilen aus DML-Befehlen, Objekte, auf die zugegriffen wurde, und den eindeutigen Datenbanknamen.  Datenbankaktivitäts-Streams überwachen auch die Bindevariablen und die Parameter der gespeicherten Prozedur. 
**Wichtig**  
Der vollständige SQL-Text jeder Anweisung ist im Prüfprotokoll des Aktivitäts-Streams sichtbar, inklusive aller sensiblen Daten. Datenbankbenutzerkennwörter werden jedoch redigiert, wenn Oracle sie wie in der folgenden SQL-Anweisung aus dem Kontext ermitteln kann.   

  ```
  ALTER ROLE role-name WITH password
  ```
+ **Verbindungsinformationen** – Die überwachte Aktivität umfasst Sitzungs- und Netzwerkinformationen, die Server-Prozess-ID und Beendigungscodes.

Wenn ein Aktivitätsstream während der Überwachung Ihrer DB-Instance fehlschlägt, werden Sie über RDS-Ereignisse benachrichtigt.

In den folgenden Abschnitten können Sie auf Datenbankaktivitäts-Streams zugreifen, diese prüfen und verarbeiten.

**Topics**
+ [Zugriff auf einen Aktivitäts-Stream von Amazon Kinesis aus](DBActivityStreams.KinesisAccess.md)
+ [Prüfungsprotokoll-Inhalte und Beispiele für Datenbankaktivitäts-Streams](DBActivityStreams.AuditLog.md)
+ [JSON-Array databaseActivityEventList für Datenbankaktivitäts-Streams](DBActivityStreams.AuditLog.databaseActivityEventList.md)
+ [Verarbeitung eines Datenbank-Aktivitäts-Streams mit dem AWS SDK](DBActivityStreams.CodeExample.md)

# Zugriff auf einen Aktivitäts-Stream von Amazon Kinesis aus
<a name="DBActivityStreams.KinesisAccess"></a>

Wenn Sie einen Aktivitäts-Stream für eine Datenbank aktivieren, wird ein Kinesis-Stream für Sie erstellt. Von Kinesis aus können Sie die Datenbankaktivität in Echtzeit überwachen. Zur weiteren Analyse der Datenbankaktivität können Sie Ihren Kinesis-Stream mit Consumer-Anwendungen verbinden. Sie können den Stream auch mit Compliance-Management-Anwendungen wie Security Guardium von IBM oder SecureSphere Database Audit and Protection von Imperva verbinden.

Sie können entweder über die RDS- oder Kinesis-Konsole auf Ihren Kinesis-Stream zugreifen.

**So greifen Sie über die RDS-Konsole auf einen Aktivitätsstream zu**

1. Öffnen Sie die Amazon-RDS-Konsole unter [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Wählen Sie im Navigationsbereich **Datenbanken** aus.

1. Wählen Sie den/die Amazon-RDS-Datenbank-Instance aus, auf der Sie einen Aktivitätsstream gestartet haben.

1. Wählen Sie **Konfiguration**.

1. Wählen Sie unter **Database activity stream** (Datenbank-Aktivitätsstream) den Link unter **Kinesis stream** (Kinesis-Stream) aus.

1. Wählen Sie in der Kinesis-Konsole **Monitoring** (Überwachung) aus, um mit der Überwachung der Datenbankaktivität zu beginnen.

**So greifen Sie über die Kinesis-Konsole auf einen Aktivitätsstream von Kinesis zu**

1. Öffnen Sie die Kinesis-Konsole unter.[https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis).

1. Wählen Sie Ihren Aktivitäts-Stream aus der Liste der Kinesis-Streams aus.

   Der Name eines Aktivitäts-Streams besteht aus dem Präfix `aws-rds-das-db-` gefolgt von der Ressourcen-ID der Datenbank. Im Folgenden wird ein Beispiel gezeigt. 

   ```
   aws-rds-das-db-NHVOV4PCLWHGF52NP
   ```

   Um die Amazon-RDS-Konsole zum Ermitteln der Ressourcen-ID für die Datenbank zu verwenden, wählen Sie Ihre DB-Instance aus der Liste der Datenbanken aus und wählen dann die Registerkarte **Konfiguration** aus.

   Um den vollständigen Kinesis-Stream-Namen für einen Aktivitäts-Stream mit AWS CLI zu finden, verwenden Sie eine [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html)-CLI-Anfrage und notieren den Wert von `ActivityStreamKinesisStreamName` in der Antwort.

1. Wählen Sie **Monitoring (Überwachung)** aus, um mit der Überwachung der Datenbankaktivität zu beginnen.

Weitere Informationen zur Verwendung von Amazon Kinesis finden Sie unter [Was sind Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html).

# Prüfungsprotokoll-Inhalte und Beispiele für Datenbankaktivitäts-Streams
<a name="DBActivityStreams.AuditLog"></a>

Überwachte Ereignisse werden im Datenbankaktivitäts-Stream als JSON-Zeichenfolgen dargestellt. Die Struktur besteht aus einem JSON-Objekt mit einem `DatabaseActivityMonitoringRecord`, der wiederum ein Array von Aktivitätsereignissen `databaseActivityEventList` enthält. 

**Anmerkung**  
Für Datenbankaktivitäts-Streams enthält das JSON-Array `paramList` keine Nullwerte aus Anwendungen im Ruhezustand.

**Topics**
+ [Prüfungsprotokollbeispiele für Aktivitäts-Streams](#DBActivityStreams.AuditLog.Examples)
+ [DatabaseActivityMonitoringRecords JSON-Objekt](#DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords)
+ [databaseActivityEvents JSON-Objekt](#DBActivityStreams.AuditLog.databaseActivityEvents)

## Prüfungsprotokollbeispiele für Aktivitäts-Streams
<a name="DBActivityStreams.AuditLog.Examples"></a>

Im Folgenden sehen Sie Beispiele für entschlüsselte JSON-Prüfprotokolle von Aktivitätsereignisdatensätzen.

**Example Aktivitätsereignisdatensatz - eine CONNECT-SQL-Anweisung**  
Im Folgenden sehen Sie einen Aktivitätsereignisdatensatz einer Anmeldung unter Verwendung einer `CONNECT`-SQL-Anweisung (`command`) durch einen JDBC-Thin-Client (`clientApplication`) für Ihre Oracle-DB.  

```
{
    "class": "Standard",
    "clientApplication": "JDBC Thin Client",
    "command": "LOGON",
    "commandText": null,
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:15:36.233787",
    "netProtocol": "tcp",
    "objectName": null,
    "objectType": null,
    "paramList": [],
    "pid": 17904,
    "remoteHost": "123.456.789.012",
    "remotePort": "25440",
    "rowCount": null,
    "serverHost": "987.654.321.098",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 987654321,
    "startTime": null,
    "statementId": 1,
    "substatementId": null,
    "transactionId": "0000000000000000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SESSION",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DBID": 123456789
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((ADDRESS\u003d(PROTOCOL\u003dtcp)(HOST\u003d205.251.233.183)(PORT\u003d25440))));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "a1b2c3d4e5f6.amazon.com",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "unknown",
        "OS_USERNAME": "sumepate",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 1,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5124715
    }
}
```
Der folgende Aktivitätsereignisdatensatz zeigt einen Anmeldefehler für Ihre SQL-Server-DB.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "LOGIN",
            "clientApplication": "Microsoft SQL Server Management Studio",
            "command": "LOGIN FAILED",
            "commandText": "Login failed for user 'test'. Reason: Password did not match that for the login provided. [CLIENT: local-machine]",
            "databaseName": "",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 0,
            "logTime": "2022-10-06 21:34:42.7113072+00",
            "netProtocol": null,
            "objectName": "",
            "objectType": "LOGIN",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 0,
            "startTime": null,
            "statementId": "0x1eb0d1808d34a94b9d3dcf5432750f02",
            "substatementId": 1,
            "transactionId": "0",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 0,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 0,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "<action_info "xmlns=\"http://schemas.microsoft.com/sqlserver/2008/sqlaudit_data\"><pooled_connection>0</pooled_connection><error>0x00004818</error><state>8</state><address>local machine</address><PasswordFirstNibbleHash>B</PasswordFirstNibbleHash></action_info>"-->,
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "",
                "connection_id": "98B4F537-0F82-49E3-AB08-B9D33B5893EF",
                "audit_schema_version": 1,
                "database_principal_id": 0,
                "server_principal_sid": null,
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```
Wenn ein Datenbankaktivitätsstream nicht aktiviert ist, ist das letzte Feld im JSON-Dokument `"engineNativeAuditFields": { }`. 

**Example Aktivitätsereignisdatensatz einer CREATE TABLE-Anweisung**  
Im Folgenden sehen Sie ein Beispiel eines `CREATE TABLE`-Ereignisses für Ihre Oracle-Datenbank.  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "CREATE TABLE",
    "commandText": "CREATE TABLE persons(\n    person_id NUMBER GENERATED BY DEFAULT AS IDENTITY,\n    first_name VARCHAR2(50) NOT NULL,\n    last_name VARCHAR2(50) NOT NULL,\n    PRIMARY KEY(person_id)\n)",
    "dbid": "0123456789",
    "databaseName": "ORCL",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:22:49.535239",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.01",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1234567890,
    "startTime": null,
    "statementId": 43,
    "substatementId": null,
    "transactionId": "090011007F0D0000",
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": "CREATE SEQUENCE, CREATE TABLE",
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-10-13-0-122",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 12,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5133083
    }
}
```
Das folgende Beispiel zeigt ein `CREATE TABLE`-Ereignis für Ihre SQL-Server-Datenbank.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "SCHEMA",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "ALTER",
            "commandText": "Create table [testDB].[dbo].[TestTable2](\r\ntextA varchar(6000),\r\n    textB varchar(6000)\r\n)",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:44:38.4120677+00",
            "netProtocol": null,
            "objectName": "dbo",
            "objectType": "SCHEMA",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 84,
            "startTime": null,
            "statementId": "0x5178d33d56e95e419558b9607158a5bd",
            "substatementId": 1,
            "transactionId": "4561864",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "",
                "is_column_permission": false,
                "object_id": 1,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000000",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "EE1FE3FD-EF2C-41FD-AF45-9051E0CD983A",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

**Example Aktivitätsereignisdatensatz einer SELECT-Anweisung**  
Das folgende Beispiel zeigt ein `SELECT`-Ereignis für Ihre Oracle-DB.  

```
{
    "class": "Standard",
    "clientApplication": "sqlplus@ip-12-34-5-678 (TNS V1-V3)",
    "command": "SELECT",
    "commandText": "select count(*) from persons",
    "databaseName": "1234567890",
    "dbProtocol": "oracle",
    "dbUserName": "TEST",
    "endTime": null,
    "errorMessage": null,
    "exitCode": 0,
    "logTime": "2021-01-15 00:25:18.850375",
    "netProtocol": "beq",
    "objectName": "PERSONS",
    "objectType": "TEST",
    "paramList": [],
    "pid": 17687,
    "remoteHost": "123.456.789.0",
    "remotePort": null,
    "rowCount": null,
    "serverHost": "987.654.321.09",
    "serverType": "oracle",
    "serverVersion": "19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3",
    "serviceName": "oracle-ee",
    "sessionId": 1080639707,
    "startTime": null,
    "statementId": 44,
    "substatementId": null,
    "transactionId": null,
    "engineNativeAuditFields": {
        "UNIFIED_AUDIT_POLICIES": "TEST_POL_EVERYTHING",
        "FGA_POLICY_NAME": null,
        "DV_OBJECT_STATUS": null,
        "SYSTEM_PRIVILEGE_USED": null,
        "OLS_LABEL_COMPONENT_TYPE": null,
        "XS_SESSIONID": null,
        "ADDITIONAL_INFO": null,
        "INSTANCE_ID": 1,
        "DV_COMMENT": null,
        "RMAN_SESSION_STAMP": null,
        "NEW_NAME": null,
        "DV_ACTION_NAME": null,
        "OLS_PROGRAM_UNIT_NAME": null,
        "OLS_STRING_LABEL": null,
        "RMAN_SESSION_RECID": null,
        "OBJECT_PRIVILEGES": null,
        "OLS_OLD_VALUE": null,
        "XS_TARGET_PRINCIPAL_NAME": null,
        "XS_NS_ATTRIBUTE": null,
        "XS_NS_NAME": null,
        "DBLINK_INFO": null,
        "AUTHENTICATION_TYPE": "(TYPE\u003d(DATABASE));(CLIENT ADDRESS\u003d((PROTOCOL\u003dbeq)(HOST\u003d123.456.789.0)));",
        "OBJECT_EDITION": null,
        "OLS_PRIVILEGES_GRANTED": null,
        "EXCLUDED_USER": null,
        "DV_ACTION_OBJECT_NAME": null,
        "OLS_LABEL_COMPONENT_NAME": null,
        "EXCLUDED_SCHEMA": null,
        "DP_TEXT_PARAMETERS1": null,
        "XS_USER_NAME": null,
        "XS_ENABLED_ROLE": null,
        "XS_NS_ATTRIBUTE_NEW_VAL": null,
        "DIRECT_PATH_NUM_COLUMNS_LOADED": null,
        "AUDIT_OPTION": null,
        "DV_EXTENDED_ACTION_CODE": null,
        "XS_PACKAGE_NAME": null,
        "OLS_NEW_VALUE": null,
        "DV_RETURN_CODE": null,
        "XS_CALLBACK_EVENT_TYPE": null,
        "USERHOST": "ip-12-34-5-678",
        "GLOBAL_USERID": null,
        "CLIENT_IDENTIFIER": null,
        "RMAN_OPERATION": null,
        "TERMINAL": "pts/1",
        "OS_USERNAME": "rdsdb",
        "OLS_MAX_READ_LABEL": null,
        "XS_PROXY_USER_NAME": null,
        "XS_DATASEC_POLICY_NAME": null,
        "DV_FACTOR_CONTEXT": null,
        "OLS_MAX_WRITE_LABEL": null,
        "OLS_PARENT_GROUP_NAME": null,
        "EXCLUDED_OBJECT": null,
        "DV_RULE_SET_NAME": null,
        "EXTERNAL_USERID": null,
        "EXECUTION_ID": null,
        "ROLE": null,
        "PROXY_SESSIONID": 0,
        "DP_BOOLEAN_PARAMETERS1": null,
        "OLS_POLICY_NAME": null,
        "OLS_GRANTEE": null,
        "OLS_MIN_WRITE_LABEL": null,
        "APPLICATION_CONTEXTS": null,
        "XS_SCHEMA_NAME": null,
        "DV_GRANTEE": null,
        "XS_COOKIE": null,
        "DBPROXY_USERNAME": null,
        "DV_ACTION_CODE": null,
        "OLS_PRIVILEGES_USED": null,
        "RMAN_DEVICE_TYPE": null,
        "XS_NS_ATTRIBUTE_OLD_VAL": null,
        "TARGET_USER": null,
        "XS_ENTITY_TYPE": null,
        "ENTRY_ID": 13,
        "XS_PROCEDURE_NAME": null,
        "XS_INACTIVITY_TIMEOUT": null,
        "RMAN_OBJECT_TYPE": null,
        "SYSTEM_PRIVILEGE": null,
        "NEW_SCHEMA": null,
        "SCN": 5136972
    }
}
```
Das folgende Beispiel zeigt ein `SELECT`-Ereignis für Ihre SQL-Server-DB.  

```
{
    "type": "DatabaseActivityMonitoringRecord",
    "clusterId": "",
    "instanceId": "db-4JCWQLUZVFYP7DIWP6JVQ77O3Q",
    "databaseActivityEventList": [
        {
            "class": "TABLE",
            "clientApplication": "Microsoft SQL Server Management Studio - Query",
            "command": "SELECT",
            "commandText": "select * from [testDB].[dbo].[TestTable]",
            "databaseName": "testDB",
            "dbProtocol": "SQLSERVER",
            "dbUserName": "test",
            "endTime": null,
            "errorMessage": null,
            "exitCode": 1,
            "logTime": "2022-10-06 21:24:59.9422268+00",
            "netProtocol": null,
            "objectName": "TestTable",
            "objectType": "TABLE",
            "paramList": null,
            "pid": null,
            "remoteHost": "local machine",
            "remotePort": null,
            "rowCount": 0,
            "serverHost": "172.31.30.159",
            "serverType": "SQLSERVER",
            "serverVersion": "15.00.4073.23.v1.R1",
            "serviceName": "sqlserver-ee",
            "sessionId": 62,
            "startTime": null,
            "statementId": "0x03baed90412f564fad640ebe51f89b99",
            "substatementId": 1,
            "transactionId": "4532935",
            "type": "record",
            "engineNativeAuditFields": {
                "target_database_principal_id": 0,
                "target_server_principal_id": 0,
                "target_database_principal_name": "",
                "server_principal_id": 2,
                "user_defined_information": "",
                "response_rows": 0,
                "database_principal_name": "dbo",
                "target_server_principal_name": "",
                "schema_name": "dbo",
                "is_column_permission": true,
                "object_id": 581577110,
                "server_instance_name": "EC2AMAZ-NFUJJNO",
                "target_server_principal_sid": null,
                "additional_information": "",
                "duration_milliseconds": 0,
                "permission_bitmask": "0x00000000000000000000000000000001",
                "data_sensitivity_information": "",
                "session_server_principal_name": "test",
                "connection_id": "AD3A5084-FB83-45C1-8334-E923459A8109",
                "audit_schema_version": 1,
                "database_principal_id": 1,
                "server_principal_sid": "0x010500000000000515000000bdc2795e2d0717901ba6998cf4010000",
                "user_defined_event_id": 0,
                "host_name": "EC2AMAZ-NFUJJNO"
            }
        }
    ]
}
```

## DatabaseActivityMonitoringRecords JSON-Objekt
<a name="DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords"></a>

Die Datenbank-Aktivitätsereignisdatensätze befinden sich in einem JSON-Objekt, das die folgenden Informationen enthält.


****  

| JSON-Feld | Datentyp | Beschreibung | 
| --- | --- | --- | 
|  `type`  | string |  Der Typ des JSON-Datensatzes. Der Wert ist `DatabaseActivityMonitoringRecords`.  | 
| version | string |  Die Version der Datenbank-Aktivitätsüberwachungsdatensätze. Oracle DB verwendet Version 1.3 und SQL Server verwendet Version 1.4. Diese Engine-Versionen führen das engineNativeAuditFields-JSON-Objekt ein.  | 
|  [databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)  | Zeichenfolge |  Ein JSON-Objekt, das die Aktivitätsereignisse enthält.  | 
| Schlüssel | Zeichenfolge | Ein Verschlüsselungsschlüssel, den Sie zum Entschlüsseln des [JSON-Array databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md) verwenden  | 

## databaseActivityEvents JSON-Objekt
<a name="DBActivityStreams.AuditLog.databaseActivityEvents"></a>

Das `databaseActivityEvents`-JSON-Objekt enthält die folgenden Informationen.

### Felder der obersten Ebene im JSON-Datensatz
<a name="DBActivityStreams.AuditLog.topLevel"></a>

 Jedes Ereignis im Prüfprotokoll wird in einen Datensatz im JSON-Format verpackt. Dieser Datensatz enthält die folgenden Felder. 

**type**  
 Dieses Feld hat immer den Wert `DatabaseActivityMonitoringRecords`. 

**Version**  
 Dieses Feld stellt die Version des Datenprotokolls oder des Vertrags für die Datenbankaktivität dar. Es definiert, welche Felder verfügbar sind.

**databaseActivityEvents**  
 Eine verschlüsselte Zeichenfolge, die ein oder mehrere Aktivitätsereignisse darstellt. Sie wird als Base64-Byte-Array dargestellt. Wenn Sie die Zeichenfolge entschlüsseln, ist das Ergebnis ein Datensatz im JSON-Format mit Feldern, wie in den Beispielen in diesem Abschnitt gezeigt.

**Schlüssel**  
 Der verschlüsselte Datenschlüssel, der zum Verschlüsseln der `databaseActivityEvents`-Zeichenfolge verwendet wird. Dies ist dasselbe AWS KMS key , das Sie beim Start des Datenbank-Aktivitätsstreams angegeben haben.

 Im folgenden Beispiel wird das Format dieses Datensatzes gezeigt.

```
{
  "type":"DatabaseActivityMonitoringRecords",
  "version":"1.3",
  "databaseActivityEvents":"encrypted audit records",
  "key":"encrypted key"
}
```

```
           "type":"DatabaseActivityMonitoringRecords",
           "version":"1.4",
           "databaseActivityEvents":"encrypted audit records",
           "key":"encrypted key"
```

Führen Sie die folgenden Schritte aus, um den Inhalt des `databaseActivityEvents`-Feldes zu entschlüsseln:

1.  Entschlüsseln Sie den Wert im JSON-Feld `key` mit dem KMS-Schlüssel, den Sie beim Starten des Datenbankaktivitätsstroms angegeben haben. Dadurch wird der Datenverschlüsselungsschlüssel im Klartext zurückgegeben. 

1.  Base64-dekodieren Sie den Wert im `databaseActivityEvents`-JSON-Feld, um den Verschlüsselungstext der Prüfungsnutzlast im Binärformat zu erhalten. 

1.  Entschlüsseln Sie den binären Verschlüsselungstext mit dem Datenverschlüsselungsschlüssel, den Sie im ersten Schritt dekodiert haben. 

1.  Dekomprimieren Sie die entschlüsselte Nutzlast. 
   +  Die verschlüsselte Nutzlast befindet sich im `databaseActivityEvents`-Feld. 
   +  Das `databaseActivityEventList`-Feld enthält ein Array von Prüfdatensätzen. Die `type`-Felder im Array können `record` oder sein `heartbeat`. 

Der Prüfprotokoll-Aktivitätsereignisdatensatz ist ein JSON-Objekt mit folgenden Informationen.


****  

| JSON-Feld | Datentyp | Beschreibung | 
| --- | --- | --- | 
|  `type`  | string |  Der Typ des JSON-Datensatzes. Der Wert ist `DatabaseActivityMonitoringRecord`.  | 
| instanceId | string | Die Ressourcen-ID der DB-Instance. Sie dem DB-Instance-Attribut DbiResourceId. | 
|  [JSON-Array databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md)   | string |  Ein Array von Aktivitätsprüfdatensätzen oder Heartbeat-Nachrichten.  | 

# JSON-Array databaseActivityEventList für Datenbankaktivitäts-Streams
<a name="DBActivityStreams.AuditLog.databaseActivityEventList"></a>

Die Prüfprotokollnutzlast ist ein verschlüsseltes JSON-Array `databaseActivityEventList`. In der folgenden Tabelle sind die Felder für jedes Aktivitätsereignis im entschlüsselten Array `DatabaseActivityEventList` eines Prüfprotokolls alphabetisch aufgelistet. 

Wenn die einheitliche Prüfung in der Oracle-Datenbank aktiviert ist, werden die Prüfungsdatensätze in diesem neuen Prüfungs-Trail aufgefüllt. Die Ansicht `UNIFIED_AUDIT_TRAIL` zeigt Prüfungs-Datensätze in Tabellenform an, indem die Prüfungs-Datensätze aus dem Prüfungs-Trail abgerufen werden. Wenn Sie einen Datenbankaktivitätsstream starten, wird eine Spalte in `UNIFIED_AUDIT_TRAIL` einem Feld im Array `databaseActivityEventList` zugeordnet.

**Wichtig**  
Die Ereignisstruktur kann sich ändern. Amazon RDS könnte in Zukunft neue Felder zu Aktivitätsereignissen hinzufügen. Stellen Sie bei Anwendungen, welche die JSON-Daten analysieren, sicher, dass Ihr Code unbekannte Feldnamen ignorieren oder entsprechende Aktionen durchführen kann. 

## databaseActivityEventList-Felder für Amazon RDS für Oracle
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.ro"></a>

Im Folgenden sind `databaseActivityEventList`-Felder für Amazon RDS für Oracle aufgeführt.


| Feld | Datentyp | Quelle | Beschreibung | 
| --- | --- | --- | --- | 
|  `class`  |  string  |  `AUDIT_TYPE`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Die Aktivitätsereignisklasse. Dies entspricht dem `AUDIT_TYPE`-Spalte in der `UNIFIED_AUDIT_TRAIL`-Ansicht. Gültige Werte für Amazon RDS für Oracle sind: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html) Weitere Informationen finden Sie unter [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/UNIFIED_AUDIT_TRAIL.html#GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D) in der Oracle-Dokumentation.  | 
|  `clientApplication`  |  string  |  `CLIENT_PROGRAM_NAME` in `UNIFIED_AUDIT_TRAIL`  |  Die Anwendung, die der Client laut Meldung für die Verbindung verwendet hat. Der Client muss diese Informationen nicht angeben, der Wert kann daher Null sein. Ein Beispielwert ist `JDBC Thin Client`.  | 
|  `command`  |  string  |  `ACTION_NAME`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Name der Aktion, die vom Benutzer ausgeführt wird. Um die vollständige Aktion zu verstehen, lesen Sie sowohl den Befehlsnamen als auch den `AUDIT_TYPE`-Wert. Ein Beispielwert ist `ALTER DATABASE`.  | 
|  `commandText`  |  string  |  `SQL_TEXT`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Die dem Ereignis zugeordnete SQL-Anweisung. Ein Beispielwert ist `ALTER DATABASE BEGIN BACKUP`.  | 
|  `databaseName`  |  string  |  `NAME`-Spalte in `V$DATABASE`  |  Name der Datenbank.  | 
|  `dbid`  |  Zahl  |  `DBID`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Numerische ID für die Datenbank. Ein Beispielwert ist `1559204751`.  | 
|  `dbProtocol`  |  string  |  –  |  Das Datenbankprotokoll. In dieser Beta ist der Wert `oracle`.  | 
|  `dbUserName`  |  string  |  `DBUSERNAME`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Name des Datenbankbenutzers, dessen Aktionen überwacht wurden. Ein Beispielwert ist `RDSADMIN`.  | 
|  `endTime`  |  string  |  –  |  Dieses Feld wird für RDS für Oracle nicht verwendet und ist immer Null.  | 
|  `engineNativeAuditFields`  |  Objekt  |  `UNIFIED_AUDIT_TRAIL`  |  Standardmäßig ist dieses Objekt leer. Wenn Sie den Aktivitäts-Stream mit der Option `--engine-native-audit-fields-included` starten, enthält dieses Objekt die folgenden Spalten und deren Werte: <pre>ADDITIONAL_INFO<br />APPLICATION_CONTEXTS<br />AUDIT_OPTION<br />AUTHENTICATION_TYPE<br />CLIENT_IDENTIFIER<br />CURRENT_USER<br />DBLINK_INFO<br />DBPROXY_USERNAME<br />DIRECT_PATH_NUM_COLUMNS_LOADED<br />DP_BOOLEAN_PARAMETERS1<br />DP_TEXT_PARAMETERS1<br />DV_ACTION_CODE<br />DV_ACTION_NAME<br />DV_ACTION_OBJECT_NAME<br />DV_COMMENT<br />DV_EXTENDED_ACTION_CODE<br />DV_FACTOR_CONTEXT<br />DV_GRANTEE<br />DV_OBJECT_STATUS<br />DV_RETURN_CODE<br />DV_RULE_SET_NAME<br />ENTRY_ID<br />EXCLUDED_OBJECT<br />EXCLUDED_SCHEMA<br />EXCLUDED_USER<br />EXECUTION_ID<br />EXTERNAL_USERID<br />FGA_POLICY_NAME<br />GLOBAL_USERID<br />INSTANCE_ID<br />KSACL_SERVICE_NAME<br />KSACL_SOURCE_LOCATION<br />KSACL_USER_NAME<br />NEW_NAME<br />NEW_SCHEMA<br />OBJECT_EDITION<br />OBJECT_PRIVILEGES<br />OLS_GRANTEE<br />OLS_LABEL_COMPONENT_NAME<br />OLS_LABEL_COMPONENT_TYPE<br />OLS_MAX_READ_LABEL<br />OLS_MAX_WRITE_LABEL<br />OLS_MIN_WRITE_LABEL<br />OLS_NEW_VALUE<br />OLS_OLD_VALUE<br />OLS_PARENT_GROUP_NAME<br />OLS_POLICY_NAME<br />OLS_PRIVILEGES_GRANTED<br />OLS_PRIVILEGES_USED<br />OLS_PROGRAM_UNIT_NAME<br />OLS_STRING_LABEL<br />OS_USERNAME<br />PROTOCOL_ACTION_NAME<br />PROTOCOL_MESSAGE<br />PROTOCOL_RETURN_CODE<br />PROTOCOL_SESSION_ID<br />PROTOCOL_USERHOST<br />PROXY_SESSIONID<br />RLS_INFO<br />RMAN_DEVICE_TYPE<br />RMAN_OBJECT_TYPE<br />RMAN_OPERATION<br />RMAN_SESSION_RECID<br />RMAN_SESSION_STAMP<br />ROLE<br />SCN<br />SYSTEM_PRIVILEGE<br />SYSTEM_PRIVILEGE_USED<br />TARGET_USER<br />TERMINAL<br />UNIFIED_AUDIT_POLICIES<br />USERHOST<br />XS_CALLBACK_EVENT_TYPE<br />XS_COOKIE<br />XS_DATASEC_POLICY_NAME<br />XS_ENABLED_ROLE<br />XS_ENTITY_TYPE<br />XS_INACTIVITY_TIMEOUT<br />XS_NS_ATTRIBUTE<br />XS_NS_ATTRIBUTE_NEW_VAL<br />XS_NS_ATTRIBUTE_OLD_VAL<br />XS_NS_NAME<br />XS_PACKAGE_NAME<br />XS_PROCEDURE_NAME<br />XS_PROXY_USER_NAME<br />XS_SCHEMA_NAME<br />XS_SESSIONID<br />XS_TARGET_PRINCIPAL_NAME<br />XS_USER_NAME</pre> Weitere Informationen finden Sie unter [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162) in der Oracle-Datenbank-okumentation.  | 
|  `errorMessage`  |  string  |  –  |  Dieses Feld wird für RDS für Oracle nicht verwendet und ist immer Null.  | 
|  `exitCode`  |  Zahl  |  `RETURN_CODE`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Fehlercode der Oracle-Datenbank, der von der Aktion generiert wurde. Wenn die Aktion erfolgreich war, lautet der Wert `0`.  | 
|  `logTime`  |  string  |  `EVENT_TIMESTAMP_UTC`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Zeitstempel der Erstellung des Prüfungs-Trail-Eintrags. Ein Beispielwert ist `2020-11-27 06:56:14.981404`.  | 
|  `netProtocol`  |  string  |  `AUTHENTICATION_TYPE`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Das Netzwerkkommunikationsprotokoll. Ein Beispielwert ist `TCP`.  | 
|  `objectName`  |  string  |  `OBJECT_NAME`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Der Name des Objekts, das von der Aktion betroffen ist. Ein Beispielwert ist `employees`.  | 
|  `objectType`  |  string  |  `OBJECT_SCHEMA`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Der Schemaname des von der Aktion betroffenen Objekts. Ein Beispielwert ist `hr`.  | 
|  `paramList`  |  table  |  `SQL_BINDS`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Die Liste der Bindungsvariablen, falls vorhanden, die `SQL_TEXT` zugeordnet sind. Ein Beispielwert ist `parameter_1,parameter_2`.  | 
|  `pid`  |  Zahl  |  `OS_PROCESS`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Betriebssystem-Prozesskennung des Oracle-Datenbankprozesses Ein Beispielwert ist `22396`.  | 
|  `remoteHost`  |  string  |  `AUTHENTICATION_TYPE`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Entweder die Client-IP-Adresse oder der Name des Hosts, von dem die Sitzung ausgelöst wurde. Ein Beispielwert ist `123.456.789.123`.  | 
|  `remotePort`  |  string  |  `AUTHENTICATION_TYPE`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Die Portnummer des Clients. Ein typischer Wert in Oracle-Datenbank-Umgebungen ist `1521`.  | 
|  `rowCount`  |  Zahl  |  –  |  Dieses Feld wird für RDS für Oracle nicht verwendet und ist immer Null.  | 
|  `serverHost`  |  string  |  Datenbank-Host  |  Die IP-Adresse des Datenbankserverhosts. Ein Beispielwert ist `123.456.789.123`.  | 
|  `serverType`  |  string  |  –  |  Der Datenbankservertyp. Dieser Wert ist immer `ORACLE`.  | 
|  `serverVersion`  |  string  |  Datenbank-Host  |  Die Version von Amazon RDS für Oracle, Release Update (RU) und Release Update Revision (RUR). Ein Beispielwert ist `19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3`.  | 
|  `serviceName`  |  string  |  Datenbank-Host  |  Name des Service. Ein Beispielwert ist `oracle-ee`.   | 
|  `sessionId`  |  Zahl  |  `SESSIONID`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Die Sitzungskennung der Prüfung. Ein Beispiel ist `1894327130`.  | 
|  `startTime`  |  string  |  –  |  Dieses Feld wird für RDS für Oracle nicht verwendet und ist immer Null.  | 
|  `statementId`  |  Zahl  |  `STATEMENT_ID`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Numerische ID für jeden Anweisungslauf. Eine Anweisung kann viele Aktionen verursachen. Ein Beispielwert ist `142197`.  | 
|  `substatementId`  |  –  |  –  |  Dieses Feld wird für RDS für Oracle nicht verwendet und ist immer Null.  | 
|  `transactionId`  |  string  |  `TRANSACTION_ID`-Spalte in `UNIFIED_AUDIT_TRAIL`  |  Die ID der Transaktion, in der das Objekt geändert wird. Ein Beispielwert ist `02000800D5030000`.  | 

## databaseActivityEventList-Felder für Amazon RDS für SQL Server
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.rss"></a>

Im Folgenden sind `databaseActivityEventList`-Felder für Amazon RDS für SQL Server aufgeführt.


| Feld | Datentyp | Quelle | Beschreibung | 
| --- | --- | --- | --- | 
|  `class`  |  Zeichenfolge  |  ` sys.fn_get_audit_file.class_type` zugeordnet zu `sys.dm_audit_class_type_map.class_type_desc`  |  Die Aktivitätsereignisklasse. Weitere Informationen finden Sie unter [SQL-Server-Audit (Datenbank-Engine)](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) in der Microsoft SQL Server-Dokumentation.  | 
|  `clientApplication`  |  Zeichenfolge  |  `sys.fn_get_audit_file.application_name`  |  Die Anwendung, mit der der Client eine Verbindung herstellt, wie vom Client gemeldet (SQL-Server-Version 14 und höher). Dieses Feld ist in SQL-Server-Version 13 Null.  | 
|  `command`  |  Zeichenfolge  |  `sys.fn_get_audit_file.action_id` zugeordnet zu `sys.dm_audit_actions.name`  |  Die allgemeine Kategorie der SQL-Anweisung. Die Werte für dieses Feld hängen vom Wert der Klasse ab.  | 
|  `commandText`  |  Zeichenfolge  |  `sys.fn_get_audit_file.statement`  |  Dieses Feld zeigt die SQL-Anweisung an.  | 
|  `databaseName`  |  Zeichenfolge  |  `sys.fn_get_audit_file.database_name`  |  Name der Datenbank.  | 
|  `dbProtocol`  |  Zeichenfolge  |  –  |  Das Datenbankprotokoll. Dieser Wert ist `SQLSERVER`.  | 
|  `dbUserName`  |  Zeichenfolge  |  `sys.fn_get_audit_file.server_principal_name`  |  Der Datenbankbenutzer für die Client-Authentifizierung.  | 
|  `endTime`  |  Zeichenfolge  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `engineNativeAuditFields`  |  object  |  Jedes Feld in `sys.fn_get_audit_file`, das in dieser Spalte nicht aufgeführt ist.  |  Standardmäßig ist dieses Objekt leer. Wenn Sie den Aktivitätsstream mit der `--engine-native-audit-fields-included`-Option starten, enthält dieses Objekt weitere systemeigene Engine-Audit-Felder, die JSON-Map nicht zurückgibt.  | 
|  `errorMessage`  |  Zeichenfolge  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `exitCode`  |  Ganzzahl  |  `sys.fn_get_audit_file.succeeded`  |  Gibt an, ob die Aktion, die das Ereignis ausgelöst hat, erfolgreich war. Dieses Feld darf nicht Null sein. Für alle Ereignisse außer Anmeldeereignissen gibt dieses Feld an, ob die Berechtigungsprüfung erfolgreich war oder fehlgeschlagen ist, nicht jedoch, ob der Vorgang erfolgreich war oder fehlgeschlagen ist. Gültige Werte sind: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html)  | 
|  `logTime`  |  Zeichenfolge  |  `sys.fn_get_audit_file.event_time`  |  Der Ereigniszeitstempel, der vom SQL Server aufgezeichnet wird.  | 
|  `netProtocol`  |  Zeichenfolge  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `objectName`  |  Zeichenfolge  |  `sys.fn_get_audit_file.object_name`  |  Der Name des Datenbankobjekts, wenn die SQL-Anweisung für ein Objekt ausgeführt wird.  | 
|  `objectType`  |  Zeichenfolge  |  `sys.fn_get_audit_file.class_type` zugeordnet zu `sys.dm_audit_class_type_map.class_type_desc`  |  Der Name des Datenbankobjekts, wenn die SQL-Anweisung für einen Objekttyp ausgeführt wird.  | 
|  `paramList`  |  Zeichenfolge  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `pid`  |  Ganzzahl  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `remoteHost`  |  Zeichenfolge  |  `sys.fn_get_audit_file.client_ip`  |  Die IP-Adresse oder der Hostname des Clients, der die SQL-Anweisung ausgegeben hat (SQL-Server-Version 14 und höher). Dieses Feld ist in SQL-Server-Version 13 Null.  | 
|  `remotePort`  |  Ganzzahl  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `rowCount`  |  Ganzzahl  |  `sys.fn_get_audit_file.affected_rows`  |  Die Anzahl der von der SQL-Anweisung betroffenen Tabellenzeilen (SQL-Server-Version 14 und höher). Dieses Feld ist in SQL-Server-Version 13 enthalten.  | 
|  `serverHost`  |  Zeichenfolge  |  Datenbank-Host  |  Die IP-Adresse des Host-Datenbankservers.  | 
|  `serverType`  |  Zeichenfolge  |  –  |  Der Datenbankservertyp. Der Wert ist `SQLSERVER`.  | 
|  `serverVersion`  |  Zeichenfolge  |  Datenbank-Host  |  Die Datenbankserverversion, z. B. 15.00.4073.23.v1.R1 für SQL Server 2017.  | 
|  `serviceName`  |  Zeichenfolge  |  Datenbank-Host  |  Der Name des -Dienstes. Ein Beispielwert ist `sqlserver-ee`.  | 
|  `sessionId`  |  Ganzzahl  |  `sys.fn_get_audit_file.session_id`  |  Eindeutige Kennung für die Sitzung.  | 
|  `startTime`  |  Zeichenfolge  |  N/A  |  Dieses Feld wird von Amazon RDS für SQL Server nicht verwendet und der Wert ist Null.  | 
|  `statementId`  |  Zeichenfolge  |  `sys.fn_get_audit_file.sequence_group_id`  |  Eine eindeutige Kennung für die SQL-Anweisung des Clients. Die Kennung ist für jedes generierte Ereignis unterschiedlich. Ein Beispielwert ist `0x38eaf4156267184094bb82071aaab644`.  | 
|  `substatementId`  |  Ganzzahl  |  `sys.fn_get_audit_file.sequence_number`  |  Eine Kennung zur Bestimmung der Sequenznummer für eine Anweisung. Diese Kennung hilft, wenn große Datensätze in mehrere Datensätze aufgeteilt werden.  | 
|  `transactionId`  |  Ganzzahl  |  `sys.fn_get_audit_file.transaction_id`  |  Eine Kennung für eine Transaktion. Wenn es keine aktiven Transaktionen gibt, ist der Wert Null.  | 
|  `type`  |  Zeichenfolge  |  Generierter Datenbankaktivitätsstream  |  Der Ereignistyp. Die Werte sind `record` oder `heartbeat`.  | 

# Verarbeitung eines Datenbank-Aktivitäts-Streams mit dem AWS SDK
<a name="DBActivityStreams.CodeExample"></a>

Sie können einen Aktivitäts-Stream mit Hilfe des AWS SDK programmgesteuert verarbeiten. Im Folgenden sehen Sie vollständig funktionsfähige Java- und Python-Beispiele für die Verwendung von Datensätzen zu Datenbank-Aktivitätsstreams für die Instance-basierte Aktivierung.

------
#### [ Java ]

```
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.zip.GZIPInputStream;

import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.encryptionsdk.AwsCrypto;
import com.amazonaws.encryptionsdk.CryptoInputStream;
import com.amazonaws.encryptionsdk.jce.JceMasterKey;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.InvalidStateException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ShutdownException;
import com.amazonaws.services.kinesis.clientlibrary.exceptions.ThrottlingException;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessor;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorCheckpointer;
import com.amazonaws.services.kinesis.clientlibrary.interfaces.IRecordProcessorFactory;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.InitialPositionInStream;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownReason;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker;
import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.Builder;
import com.amazonaws.services.kinesis.model.Record;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.DecryptRequest;
import com.amazonaws.services.kms.model.DecryptResult;
import com.amazonaws.util.Base64;
import com.amazonaws.util.IOUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class DemoConsumer {

    private static final String STREAM_NAME = "aws-rds-das-[instance-external-resource-id]"; // aws-rds-das-db-ABCD123456
    private static final String APPLICATION_NAME = "AnyApplication"; //unique application name for dynamo table generation that holds kinesis shard tracking
    private static final String AWS_ACCESS_KEY = "[AWS_ACCESS_KEY_TO_ACCESS_KINESIS]";
    private static final String AWS_SECRET_KEY = "[AWS_SECRET_KEY_TO_ACCESS_KINESIS]";
    private static final String RESOURCE_ID = "[external-resource-id]"; // db-ABCD123456
    private static final String REGION_NAME = "[region-name]"; //us-east-1, us-east-2...
    private static final BasicAWSCredentials CREDENTIALS = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);
    private static final AWSStaticCredentialsProvider CREDENTIALS_PROVIDER = new AWSStaticCredentialsProvider(CREDENTIALS);

    private static final AwsCrypto CRYPTO = new AwsCrypto();
    private static final AWSKMS KMS = AWSKMSClientBuilder.standard()
            .withRegion(REGION_NAME)
            .withCredentials(CREDENTIALS_PROVIDER).build();

    class Activity {
        String type;
        String version;
        String databaseActivityEvents;
        String key;
    }

    class ActivityEvent {
        @SerializedName("class") String _class;
        String clientApplication;
        String command;
        String commandText;
        String databaseName;
        String dbProtocol;
        String dbUserName;
        String endTime;
        String errorMessage;
        String exitCode;
        String logTime;
        String netProtocol;
        String objectName;
        String objectType;
        List<String> paramList;
        String pid;
        String remoteHost;
        String remotePort;
        String rowCount;
        String serverHost;
        String serverType;
        String serverVersion;
        String serviceName;
        String sessionId;
        String startTime;
        String statementId;
        String substatementId;
        String transactionId;
        String type;
    }

    class ActivityRecords {
        String type;
        String clusterId; // note that clusterId will contain an empty string on RDS Oracle and RDS SQL Server
        String instanceId;
        List<ActivityEvent> databaseActivityEventList;
    }

    static class RecordProcessorFactory implements IRecordProcessorFactory {
        @Override
        public IRecordProcessor createProcessor() {
            return new RecordProcessor();
        }
    }

    static class RecordProcessor implements IRecordProcessor {

        private static final long BACKOFF_TIME_IN_MILLIS = 3000L;
        private static final int PROCESSING_RETRIES_MAX = 10;
        private static final long CHECKPOINT_INTERVAL_MILLIS = 60000L;
        private static final Gson GSON = new GsonBuilder().serializeNulls().create();

        private static final Cipher CIPHER;
        static {
            Security.insertProviderAt(new BouncyCastleProvider(), 1);
            try {
                CIPHER = Cipher.getInstance("AES/GCM/NoPadding", "BC");
            } catch (NoSuchAlgorithmException | NoSuchPaddingException | NoSuchProviderException e) {
                throw new ExceptionInInitializerError(e);
            }
        }

        private long nextCheckpointTimeInMillis;

        @Override
        public void initialize(String shardId) {
        }

        @Override
        public void processRecords(final List<Record> records, final IRecordProcessorCheckpointer checkpointer) {
            for (final Record record : records) {
                processSingleBlob(record.getData());
            }

            if (System.currentTimeMillis() > nextCheckpointTimeInMillis) {
                checkpoint(checkpointer);
                nextCheckpointTimeInMillis = System.currentTimeMillis() + CHECKPOINT_INTERVAL_MILLIS;
            }
        }

        @Override
        public void shutdown(IRecordProcessorCheckpointer checkpointer, ShutdownReason reason) {
            if (reason == ShutdownReason.TERMINATE) {
                checkpoint(checkpointer);
            }
        }

        private void processSingleBlob(final ByteBuffer bytes) {
            try {
                // JSON $Activity
                final Activity activity = GSON.fromJson(new String(bytes.array(), StandardCharsets.UTF_8), Activity.class);

                // Base64.Decode
                final byte[] decoded = Base64.decode(activity.databaseActivityEvents);
                final byte[] decodedDataKey = Base64.decode(activity.key);

                Map<String, String> context = new HashMap<>();
                context.put("aws:rds:db-id", RESOURCE_ID);

                // Decrypt
                final DecryptRequest decryptRequest = new DecryptRequest()
                        .withCiphertextBlob(ByteBuffer.wrap(decodedDataKey)).withEncryptionContext(context);
                final DecryptResult decryptResult = KMS.decrypt(decryptRequest);
                final byte[] decrypted = decrypt(decoded, getByteArray(decryptResult.getPlaintext()));

                // GZip Decompress
                final byte[] decompressed = decompress(decrypted);
                // JSON $ActivityRecords
                final ActivityRecords activityRecords = GSON.fromJson(new String(decompressed, StandardCharsets.UTF_8), ActivityRecords.class);

                // Iterate throught $ActivityEvents
                for (final ActivityEvent event : activityRecords.databaseActivityEventList) {
                    System.out.println(GSON.toJson(event));
                }
            } catch (Exception e) {
                // Handle error.
                e.printStackTrace();
            }
        }

        private static byte[] decompress(final byte[] src) throws IOException {
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(src);
            GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);
            return IOUtils.toByteArray(gzipInputStream);
        }

        private void checkpoint(IRecordProcessorCheckpointer checkpointer) {
            for (int i = 0; i < PROCESSING_RETRIES_MAX; i++) {
                try {
                    checkpointer.checkpoint();
                    break;
                } catch (ShutdownException se) {
                    // Ignore checkpoint if the processor instance has been shutdown (fail over).
                    System.out.println("Caught shutdown exception, skipping checkpoint." + se);
                    break;
                } catch (ThrottlingException e) {
                    // Backoff and re-attempt checkpoint upon transient failures
                    if (i >= (PROCESSING_RETRIES_MAX - 1)) {
                        System.out.println("Checkpoint failed after " + (i + 1) + "attempts." + e);
                        break;
                    } else {
                        System.out.println("Transient issue when checkpointing - attempt " + (i + 1) + " of " + PROCESSING_RETRIES_MAX + e);
                    }
                } catch (InvalidStateException e) {
                    // This indicates an issue with the DynamoDB table (check for table, provisioned IOPS).
                    System.out.println("Cannot save checkpoint to the DynamoDB table used by the Amazon Kinesis Client Library." + e);
                    break;
                }
                try {
                    Thread.sleep(BACKOFF_TIME_IN_MILLIS);
                } catch (InterruptedException e) {
                    System.out.println("Interrupted sleep" + e);
                }
            }
        }
    }

    private static byte[] decrypt(final byte[] decoded, final byte[] decodedDataKey) throws IOException {
        // Create a JCE master key provider using the random key and an AES-GCM encryption algorithm
        final JceMasterKey masterKey = JceMasterKey.getInstance(new SecretKeySpec(decodedDataKey, "AES"),
                "BC", "DataKey", "AES/GCM/NoPadding");
        try (final CryptoInputStream<JceMasterKey> decryptingStream = CRYPTO.createDecryptingStream(masterKey, new ByteArrayInputStream(decoded));
             final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            IOUtils.copy(decryptingStream, out);
            return out.toByteArray();
        }
    }

    public static void main(String[] args) throws Exception {
        final String workerId = InetAddress.getLocalHost().getCanonicalHostName() + ":" + UUID.randomUUID();
        final KinesisClientLibConfiguration kinesisClientLibConfiguration =
                new KinesisClientLibConfiguration(APPLICATION_NAME, STREAM_NAME, CREDENTIALS_PROVIDER, workerId);
        kinesisClientLibConfiguration.withInitialPositionInStream(InitialPositionInStream.LATEST);
        kinesisClientLibConfiguration.withRegionName(REGION_NAME);
        final Worker worker = new Builder()
                .recordProcessorFactory(new RecordProcessorFactory())
                .config(kinesisClientLibConfiguration)
                .build();

        System.out.printf("Running %s to process stream %s as worker %s...\n", APPLICATION_NAME, STREAM_NAME, workerId);

        try {
            worker.run();
        } catch (Throwable t) {
            System.err.println("Caught throwable while processing data.");
            t.printStackTrace();
            System.exit(1);
        }
        System.exit(0);
    }

    private static byte[] getByteArray(final ByteBuffer b) {
        byte[] byteArray = new byte[b.remaining()];
        b.get(byteArray);
        return byteArray;
    }
}
```

------
#### [ Python ]

```
import base64
import json
import zlib
import aws_encryption_sdk
from aws_encryption_sdk import CommitmentPolicy
from aws_encryption_sdk.internal.crypto import WrappingKey
from aws_encryption_sdk.key_providers.raw import RawMasterKeyProvider
from aws_encryption_sdk.identifiers import WrappingAlgorithm, EncryptionKeyType
import boto3

REGION_NAME = '<region>'                    # us-east-1
RESOURCE_ID = '<external-resource-id>'      # db-ABCD123456
STREAM_NAME = 'aws-rds-das-' + RESOURCE_ID  # aws-rds-das-db-ABCD123456

enc_client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT)

class MyRawMasterKeyProvider(RawMasterKeyProvider):
    provider_id = "BC"

    def __new__(cls, *args, **kwargs):
        obj = super(RawMasterKeyProvider, cls).__new__(cls)
        return obj

    def __init__(self, plain_key):
        RawMasterKeyProvider.__init__(self)
        self.wrapping_key = WrappingKey(wrapping_algorithm=WrappingAlgorithm.AES_256_GCM_IV12_TAG16_NO_PADDING,
                                        wrapping_key=plain_key, wrapping_key_type=EncryptionKeyType.SYMMETRIC)

    def _get_raw_key(self, key_id):
        return self.wrapping_key


def decrypt_payload(payload, data_key):
    my_key_provider = MyRawMasterKeyProvider(data_key)
    my_key_provider.add_master_key("DataKey")
    decrypted_plaintext, header = enc_client.decrypt(
        source=payload,
        materials_manager=aws_encryption_sdk.materials_managers.default.DefaultCryptoMaterialsManager(master_key_provider=my_key_provider))
    return decrypted_plaintext


def decrypt_decompress(payload, key):
    decrypted = decrypt_payload(payload, key)
    return zlib.decompress(decrypted, zlib.MAX_WBITS + 16)


def main():
    session = boto3.session.Session()
    kms = session.client('kms', region_name=REGION_NAME)
    kinesis = session.client('kinesis', region_name=REGION_NAME)

    response = kinesis.describe_stream(StreamName=STREAM_NAME)
    shard_iters = []
    for shard in response['StreamDescription']['Shards']:
        shard_iter_response = kinesis.get_shard_iterator(StreamName=STREAM_NAME, ShardId=shard['ShardId'],
                                                         ShardIteratorType='LATEST')
        shard_iters.append(shard_iter_response['ShardIterator'])

    while len(shard_iters) > 0:
        next_shard_iters = []
        for shard_iter in shard_iters:
            response = kinesis.get_records(ShardIterator=shard_iter, Limit=10000)
            for record in response['Records']:
                record_data = record['Data']
                record_data = json.loads(record_data)
                payload_decoded = base64.b64decode(record_data['databaseActivityEvents'])
                data_key_decoded = base64.b64decode(record_data['key'])
                data_key_decrypt_result = kms.decrypt(CiphertextBlob=data_key_decoded,
                                                      EncryptionContext={'aws:rds:db-id': RESOURCE_ID})
                print (decrypt_decompress(payload_decoded, data_key_decrypt_result['Plaintext']))
            if 'NextShardIterator' in response:
                next_shard_iters.append(response['NextShardIterator'])
        shard_iters = next_shard_iters


if __name__ == '__main__':
    main()
```

------