

# Monitorar o Amazon RDS com o recurso Database Activity Streams
<a name="DBActivityStreams"></a><a name="das"></a>

Usando o recurso Database Activity Streams, você pode monitorar fluxos quase em tempo real da atividade de um banco de dados.

**Topics**
+ [Visão geral dos Database Activity Streams](#DBActivityStreams.Overview)
+ [Configurar a auditoria unificada do Oracle Database](DBActivityStreams.configuring-auditing.md)
+ [Configurar uma política de auditoria para o Amazon RDS para Microsoft SQL Server](DBActivityStreams.configuring-auditing-SQLServer.md)
+ [Iniciar um stream de atividade de banco de dados](DBActivityStreams.Enabling.md)
+ [Modificar um fluxo de atividades de banco de dados para o Amazon RDS](DBActivityStreams.Modifying.md)
+ [Obter o status de um fluxo de atividade de banco de dados](DBActivityStreams.Status.md)
+ [Interromper um fluxo de atividade de banco de dados](DBActivityStreams.Disabling.md)
+ [Monitorar fluxos de atividades de banco de dados](DBActivityStreams.Monitoring.md)
+ [Exemplos de políticas do IAM para fluxos de atividades de banco de dados](DBActivityStreams.ManagingAccess.md)

## Visão geral dos Database Activity Streams
<a name="DBActivityStreams.Overview"></a>

Como administrador de um banco de dados do Amazon RDS, você precisa proteger o banco de dados e atender aos requisitos regulatórios e de compatibilidade. Uma estratégia é integrar fluxos de atividades de banco de dados às suas ferramentas de monitoramento. Dessa forma, você monitora e define alarmes para realizar a auditoria da atividade no banco de dados.

As ameaças à segurança são externas e internas. Para se proteger contra ameaças internas, você pode controlar o acesso do administrador aos transmissões de dados configurando o recurso Database Activity Streams. Os administradores de bancos de dados do Amazon RDS não têm acesso à coleta, transmissão, armazenamento e processamento das transmissões.

**Contents**
+ [Como os fluxos de atividade do banco de dados funcionam](#DBActivityStreams.Overview.how-they-work)
+ [Auditoria no Oracle Database e no banco de dados Microsoft SQL](#DBActivityStreams.Overview.auditing)
  + [Auditoria unificada no Oracle Database](#DBActivityStreams.Overview.unified-auditing)
  + [Auditoria no Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
  + [Campos de auditoria não nativos para Oracle Database e SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
  + [Substituição do grupo de parâmetros de banco de dados](#DBActivityStreams.Overview.unified-auditing.parameter-group)
+ [Modo assíncrono para fluxos de atividades de banco de dados](#DBActivityStreams.Overview.sync-mode)
+ [Requisitos e limitações para fluxos de atividade de banco de dados](#DBActivityStreams.Overview.requirements)
+ [Disponibilidade de regiões e versões](#DBActivityStreams.RegionVersionAvailability)
+ [Classes de instância de banco de dados compatíveis para transmissões de atividades de banco de dados](#DBActivityStreams.Overview.requirements.classes)

### Como os fluxos de atividade do banco de dados funcionam
<a name="DBActivityStreams.Overview.how-they-work"></a>

O Amazon RDS envia atividades para um fluxo de dados do Amazon Kinesis quase em tempo real. O fluxo do Kinesis é criado automaticamente. No Kinesis, é possível configurar serviços da AWS, como o Amazon Data Firehose e o AWS Lambda, para consumir o fluxo e armazenar os dados.

**Importante**  
O uso do recurso Database Activity Streams é gratuito no Amazon RDS, mas o Amazon Kinesis cobra pelo fluxo de dados. Para ter mais informações, consulte [Definição de preço do Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).

É possível configurar aplicações para gerenciamento de conformidade com o objetivo de consumir fluxos de atividades do banco de dados. Essas aplicações podem usar o fluxo para gerar alertas e auditar atividades em seu banco de dados.

O Amazon RDS é compatível com fluxos de atividade de banco de dados em implantações multi-AZ. Nesse caso, os fluxos de atividades do banco de dados auditam as instâncias principal e em espera.

### Auditoria no Oracle Database e no banco de dados Microsoft SQL
<a name="DBActivityStreams.Overview.auditing"></a>

Auditoria é o monitoramento e registro de ações de banco de dados configuradas. O Amazon RDS não captura a atividade de um banco de dados por padrão. Você mesmo cria e gerencia políticas de auditoria no banco de dados.

**Topics**
+ [Auditoria unificada no Oracle Database](#DBActivityStreams.Overview.unified-auditing)
+ [Auditoria no Microsoft SQL Server](#DBActivityStreams.Overview.SQLServer-auditing)
+ [Campos de auditoria não nativos para Oracle Database e SQL Server](#DBActivityStreams.Overview.unified-auditing.non-native)
+ [Substituição do grupo de parâmetros de banco de dados](#DBActivityStreams.Overview.unified-auditing.parameter-group)

#### Auditoria unificada no Oracle Database
<a name="DBActivityStreams.Overview.unified-auditing"></a>

Em um banco de dados Oracle, uma *política de auditoria unificada* é um grupo chamado de configurações de auditoria que você pode usar para auditar um aspecto do comportamento do usuário. Uma política pode ser tão simples quanto auditar as atividades de um único usuário. Também é possível criar políticas de auditoria complexas que usam condições.

Um banco de dados Oracle grava registros de auditoria, inclusive registros de auditoria do `SYS`, para a *trilha de auditoria unificada*. Por exemplo, se ocorrer um erro durante uma instrução `INSERT`, a auditoria padrão indicará o número do erro e o SQL que foi executado. A trilha de auditoria reside em uma tabela somente leitura no esquema do `AUDSYS`. Para acessar esses registros,consulte a visualização do dicionário de dados `UNIFIED_AUDIT_TRAIL`.

Normalmente, configure fluxos de atividade do banco de dados da seguinte maneira:

1. Crie uma política de auditoria do Oracle Database usando o comando `CREATE AUDIT POLICY`.

   O Oracle Database gera registros de auditoria.

1. Ative a política de auditoria usando o comando `AUDIT POLICY`.

1. Configurar fluxos de atividade do banco de dados.

   Somente as atividades que correspondem às políticas de auditoria do Oracle Database são capturadas e enviadas ao fluxo de dados do Amazon Kinesis. Quando fluxos de atividades de banco de dados são habilitados, um administrador de banco de dados Oracle não pode alterar a política de auditoria nem remover registros de auditoria.

Para saber mais sobre as políticas de auditoria unificadas, consulte [Sobre atividades de auditoria com políticas de auditoria unificadas e AUDIT](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-2435D929-10AD-43C7-8A6C-5133170074D0) no *Guia de segurança do Oracle Database*.

#### Auditoria no Microsoft SQL Server
<a name="DBActivityStreams.Overview.SQLServer-auditing"></a>

O fluxo de atividade de banco de dados usa o recurso SQLAudit para auditar o banco de dados do SQL Server.

A instância do RDS para SQL Server contém o seguinte:
+ Auditoria de servidor: a auditoria de servidor SQL coleta uma única instância de ações no nível do servidor ou do banco de dados, e um grupo de ações a serem monitoradas. As auditorias `RDS_DAS_AUDIT` e `RDS_DAS_AUDIT_CHANGES` em nível de servidor são gerenciadas pelo RDS.
+ Especificação de auditoria de servidor: a especificação de auditoria de servidor registra os eventos no nível do servidor. Você pode modificar a especificação `RDS_DAS_SERVER_AUDIT_SPEC`. Essa especificação está vinculada à auditoria de servidor `RDS_DAS_AUDIT`. A especificação `RDS_DAS_CHANGES_AUDIT_SPEC` é gerenciada pelo RDS.
+ Especificação de auditoria de banco de dados: a especificação de auditoria de banco de dados registra os eventos no nível do banco de dados. Você pode criar uma especificação de auditoria de banco de dados `RDS_DAS_DB_<name>` e vinculá-la à auditoria de servidor `RDS_DAS_AUDIT`.

Você pode configurar fluxos de atividade de banco de dados usando o console ou a CLI. Normalmente, configure fluxos de atividade do banco de dados da seguinte maneira:

1. (Opcional) Crie uma especificação de auditoria de banco de dados com o comando `CREATE DATABASE AUDIT SPECIFICATION` e vincule-a à auditoria de servidor `RDS_DAS_AUDIT`. 

1. (Opcional) Modifique a especificação de auditoria de servidor com o comando `ALTER SERVER AUDIT SPECIFICATION` e defina as políticas. 

1. Ative as políticas de auditoria de banco de dados e servidor. Por exemplo:

   `ALTER DATABASE AUDIT SPECIFICATION [<Your database specification>] WITH (STATE=ON)`

   `ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC] WITH (STATE=ON)`

1. Configurar fluxos de atividade do banco de dados.

   Somente as atividades que correspondem às políticas de auditoria de servidor e banco de dados são capturadas e enviadas ao fluxo de dados do Amazon Kinesis. Quando fluxos de atividade de banco de dados estão habilitados e as políticas estão bloqueadas, um administrador de banco de dados não pode alterar a política de auditoria nem remover registros de auditoria. 
**Importante**  
Se a especificação de auditoria de banco de dados para um banco de dados específico estiver habilitada e a política estiver em um estado bloqueado, o banco de dados não poderá ser descartado.

Para ter mais informações sobre auditoria do SQL Server, consulte [Componentes de auditoria do SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) na *documentação do Microsoft SQL Server*.



#### Campos de auditoria não nativos para Oracle Database e SQL Server
<a name="DBActivityStreams.Overview.unified-auditing.non-native"></a>

Quando você inicia um fluxo de atividade de banco de dados, cada evento de banco de dados gera um evento de fluxo de atividade correspondente. Por exemplo, um usuário de banco de dados pode executar as instruções `SELECT` e `INSERT`. O banco de dados audita esses eventos e os envia para um fluxo de dados do Amazon Kinesis.

Os eventos são representados no fluxo como objetos JSON. Um objeto JSON contém um `DatabaseActivityMonitoringRecord`, que contém uma matriz `databaseActivityEventList`. Os campos predefinidos na matriz incluem `class`, `clientApplication` e `command`.

Por padrão, um fluxo de atividade não contém campos de auditoria nativos do mecanismo. É possível configurar o Amazon RDS para Oracle e o SQL Server de modo que inclua esses campos extras no objeto JSON `engineNativeAuditFields`.

No Oracle Database, a maioria dos eventos na trilha de auditoria unificada são mapeados para campos do fluxo de atividade de dados do RDS. Por exemplo, o campo `UNIFIED_AUDIT_TRAIL.SQL_TEXT` em mapas de auditoria unificada para o campo `commandText` em um fluxo de atividade de banco de dados. No entanto, campos de auditoria do Oracle Database, como `OS_USERNAME`, não são mapeados para campos predefinidos em um fluxo de atividade de banco de dados.

No SQL Server, a maioria dos campos do evento que são registrados pelo SQLAudit são mapeados para os campos no fluxo de atividade do banco de dados RDS. Por exemplo, o campo `code` de `sys.fn_get_audit_file` na auditoria é mapeado para o campo `commandText` em um fluxo de atividade de banco de dados. No entanto, campos de auditoria de banco de dados do SQL Server, como `permission_bitmask`, não são mapeados para campos predefinidos em um fluxo de atividade de banco de dados.

Para ter mais informações sobre databaseActivityEventList, consulte [Matriz JSON databaseActivityEventList para fluxos de atividades de banco de dados](DBActivityStreams.AuditLog.databaseActivityEventList.md).

#### Substituição do grupo de parâmetros de banco de dados
<a name="DBActivityStreams.Overview.unified-auditing.parameter-group"></a>

Normalmente, você ativa a auditoria unificada no RDS for Oracle anexando um grupo de parâmetros. No entanto, o recurso Database Activity Streams requer configuração adicional. Para melhorar a experiência do cliente, o Amazon RDS faz o seguinte:
+ Se você ativar um fluxo de atividade, o RDS para Oracle vai ignorar os parâmetros de auditoria no grupo de parâmetros.
+ Se você desativar um fluxo de atividade, o RDS para Oracle deixará de ignorar os parâmetros de auditoria.

O fluxo de atividade de banco de dados para o SQL Server não depende de nenhum parâmetro definido na opção de auditoria SQL.

### Modo assíncrono para fluxos de atividades de banco de dados
<a name="DBActivityStreams.Overview.sync-mode"></a>

Os fluxos de atividade no Amazon RDS são sempre assíncronos. Quando uma sessão de banco de dados gera um evento de fluxo de atividade, a sessão retorna às atividades normais imediatamente. Em segundo plano, o Amazon RDS transforma o evento do fluxo de atividade em um registro durável.

Se ocorrer um erro na tarefa de segundo plano, o Amazon RDS gera um evento. Este evento indica o início e o final de qualquer janela de tempo em que os registros do evento do fluxo de atividade podem ter sido perdidos. O modo assíncrono favorece a performance do banco de dados sobre a precisão do fluxo de atividade.

### Requisitos e limitações para fluxos de atividade de banco de dados
<a name="DBActivityStreams.Overview.requirements"></a>

No RDS, os fluxos de atividade de banco de dados têm os seguintes requisitos e limites:
+ O Amazon Kinesis é imprescindível para os fluxos de atividades do banco de dados.
+ O AWS Key Management Service (AWS KMS) é imprescindível para fluxos de atividades de banco de dados, pois eles são sempre criptografados.
+ A aplicação de criptografia adicional ao seu fluxo de dados do Amazon Kinesis é incompatível com fluxos de atividade do banco de dados, que já estão criptografados com sua chave do AWS KMS.
+ Você mesmo cria e gerencia políticas de auditoria. Por padrão, diferente do Amazon Aurora, o RDS for Oracle não captura atividades.
+ Você mesmo cria e gerencia políticas e especificações de auditoria. Por padrão, ao contrário do Amazon Aurora, o Amazon RDS não captura a atividade de um banco de dados.
+ Em uma implantação multi-AZ, inicie o fluxo de atividade de banco de dados apenas na instância de banco de dados primária. O fluxo de atividades audita as instâncias de banco de dados primário e em espera automaticamente. Não é necessária nenhuma etapa adicional durante um failover.
+ Renomear uma instância de banco de dados não criará um novo fluxo do Kinesis.
+ O RDS para Oracle não oferece suporte a CDBs.
+ As réplicas de leitura não são compatíveis.

### Disponibilidade de regiões e versões
<a name="DBActivityStreams.RegionVersionAvailability"></a>

A disponibilidade e a compatibilidade de recursos variam entre versões específicas de cada mecanismo de banco de dados e entre Regiões da AWS. Para ter mais informações sobre a disponibilidade de versões e regiões para fluxos de atividades de banco de dados, consulte [Regiões e mecanismos de banco de dados compatíveis com fluxos de atividades de banco de dados no Amazon RDS](Concepts.RDS_Fea_Regions_DB-eng.Feature.DBActivityStreams.md).

### Classes de instância de banco de dados compatíveis para transmissões de atividades de banco de dados
<a name="DBActivityStreams.Overview.requirements.classes"></a>

Para o RDS para Oracle, é possível utilizar fluxos de atividade de banco de dados com as seguintes classes de instâncias de banco de dados:
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5.\$1large.tpc\$1.mem\$1x
+ db.r5b.\$1large
+ db.r5b.\$1large.tpc\$1.mem\$1x
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.r6i.\$1large.tpc\$1.mem\$1x
+ db.x2idn.\$1large
+ db.x2iedn.\$1large
+ db.x2iezn.\$1large
+ db.z1d.\$1large

Para o RDS para SQL Server, é possível utilizar fluxos de atividade de banco de dados com as seguintes classes de instâncias de banco de dados:
+ db.m4.\$1large
+ db.m5.\$1large
+ db.m5d.\$1large
+ db.m6i.\$1large
+ db.r4.\$1large
+ db.r5.\$1large
+ db.r5b.\$1large
+ db.r5d.\$1large
+ db.r6i.\$1large
+ db.x1e.\$1large
+ db.x2iedn.\$1large
+ db.z1d.\$1large

Para mais informações sobre tipos de classes da instância, consulte [Classes de instâncias de banco de dados do ](Concepts.DBInstanceClass.md).

# Configurar a auditoria unificada do Oracle Database
<a name="DBActivityStreams.configuring-auditing"></a>

Ao configurar a auditoria unificada para uso com fluxos de atividades de banco de dados, as seguintes situações são possíveis:
+ A auditoria unificada não está configurada para o banco de dados Oracle.

  Nesse caso, crie políticas com o comando `CREATE AUDIT POLICY`, depois ative-as com o comando `AUDIT POLICY`. O exemplo a seguir cria e ativa uma política para monitorar usuários com privilégios e perfis específicos.

  ```
  CREATE AUDIT POLICY table_pol
  PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
  ROLES emp_admin, sales_admin;
  
  AUDIT POLICY table_pol;
  ```

  Para obter instruções completas, consulte [Configuring Audit Policies](https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/configuring-audit-policies.html#GUID-22CDB667-5AA2-4051-A262-FBD0236763CB) (Configurar políticas de auditoria) na documentação do Oracle Database.
+ A auditoria unificada está configurada para o banco de dados Oracle.

  Quando você ativa um fluxo de atividade de banco de dados, o RDS para Oracle limpa automaticamente os dados de auditoria existentes. Também revoga privilégios de trilha de auditoria. O RDS for Oracle não pode mais fazer o seguinte:
  + Elimine os registros de trilha de auditoria unificada.
  + Adicione, exclua ou modifique a política de auditoria unificada.
  + Atualize o último carimbo de data/hora arquivado.
**Importante**  
Recomendamos fortemente que você faça backup dos dados de auditoria antes de ativar um fluxo de atividade de banco de dados.

  Para obter uma descrição da visualização `UNIFIED_AUDIT_TRAIL`, consulte [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162). Se você tiver uma conta do Oracle Support, consulte [Como depurar a TRILHA DE AUDITORIA UNIFICADA](https://support.oracle.com/knowledge/Oracle%20Database%20Products/1582627_1.html).

# Configurar uma política de auditoria para o Amazon RDS para Microsoft SQL Server
<a name="DBActivityStreams.configuring-auditing-SQLServer"></a>

Uma instância de banco de dados do SQL Server tem a auditoria de servidor `RDS_DAS_AUDIT`, que é gerenciada pelo Amazon RDS. Você pode definir as políticas para registrar eventos do servidor na especificação de auditoria de servidor `RDS_DAS_SERVER_AUDIT_SPEC`. Você pode criar uma especificação de auditoria de banco de dados, como `RDS_DAS_DB_<name>`, e definir as políticas para registrar eventos do banco de dados. Para obter a lista de grupos de ações de auditoria em nível de servidor e banco de dados, consulte [Ações e grupos de ações de auditoria do SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions) na *documentação do Microsoft SQL Server*.

A política de servidor padrão monitora somente falhas de logins e alterações em bancos de dados ou especificações de auditoria de servidor para fluxos de atividade de banco de dados.

As limitações para a auditoria e para as especificações de auditoria incluem o seguinte:
+ Você não pode modificar as especificações de auditoria de servidor ou banco de dados quando o fluxo de atividade do banco de dados está em um estado *bloqueado*.
+ Você não pode modificar a especificação de auditoria de servidor `RDS_DAS_AUDIT`.
+ Você não pode modificar a auditoria `RDS_DAS_CHANGES` do SQL Server ou sua especificação de auditoria de servidor relacionada `RDS_DAS_CHANGES_AUDIT_SPEC`.
+ Ao criar uma especificação de auditoria de banco de dados, você deve usar o formato `RDS_DAS_DB_<name>`; por exemplo, `RDS_DAS_DB_databaseActions`.

**Importante**  
Para classes de instâncias menores, recomendamos que você não audite todos os dados, apenas os necessários. Isso ajuda a reduzir o impacto na performance do recurso Database Activity Streams nessas classes de instâncias.

O exemplo de código abaixo modifica a especificação de auditoria de servidor `RDS_DAS_SERVER_AUDIT_SPEC` e realiza a auditoria de todas as ações de desconexão e de login bem-sucedido:

```
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      WITH (STATE=OFF);
ALTER SERVER AUDIT SPECIFICATION [RDS_DAS_SERVER_AUDIT_SPEC]
      ADD (LOGOUT_GROUP),
      ADD (SUCCESSFUL_LOGIN_GROUP)
      WITH (STATE = ON );
```

O exemplo de código abaixo cria uma especificação de auditoria de banco de dados `RDS_DAS_DB_database_spec` e a anexa à auditoria de servidor `RDS_DAS_AUDIT`:

```
USE testDB;
CREATE DATABASE AUDIT SPECIFICATION [RDS_DAS_DB_database_spec]
     FOR SERVER AUDIT [RDS_DAS_AUDIT]
     ADD ( INSERT, UPDATE, DELETE  
          ON testTable BY testUser )  
     WITH (STATE = ON);
```

Depois que as especificações de auditoria forem configuradas, certifique-se de que as especificações `RDS_DAS_SERVER_AUDIT_SPEC` e `RDS_DAS_DB_<name>` estejam definidas no estado `ON`. Agora elas podem enviar os dados de auditoria para o fluxo de atividade do banco de dados.

# Iniciar um stream de atividade de banco de dados
<a name="DBActivityStreams.Enabling"></a>

Ao iniciar um fluxo de atividade para instância de banco de dados, cada evento da atividade do banco de dados que você configurou na política de auditoria gera um evento do fluxo de atividade. Comandos SQL, como `CONNECT` e `SELECT`, geram eventos de acesso. Comandos SQL, como `CREATE` e `INSERT`, geram eventos de alteração.

**Importante**  
Ativar um fluxo de atividade para uma instância de banco de dados Oracle limpa os dados de auditoria existentes. Também revoga privilégios de trilha de auditoria. Quando o fluxo está habilitado, o RDS for Oracle não pode mais fazer o seguinte:  
Elimine os registros de trilha de auditoria unificada.
Adicione, exclua ou modifique a política de auditoria unificada.
Atualize o último carimbo de data/hora arquivado.

------
#### [ Console ]

**Para iniciar um fluxo de atividade de banco de dados**

1. Abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Databases (Bancos de dados)**.

1. Escolha a instância de banco de dados do Amazon RDS em que deseja iniciar um fluxo de atividade. Em uma implantação multi-AZ, inicie o fluxo apenas na instância principal. O fluxo de atividades audita as instâncias principal e em espera.

1. Em **Actions (Ações)**, escolha **Start activity (Iniciar atividade)**. 

   A janela **Start database activity stream: ***name* (Iniciar fluxo de atividade do banco de dados: nome) aparece. Nela, *name* (nome) é a sua instância do RDS.

1. Insira as seguintes configurações:
   + Em **AWS KMS key**, escolha uma chave na lista de AWS KMS keys.

     O Amazon RDS usa a chave do KMS para criptografar a chave que, por sua vez, criptografa a atividade do banco de dados. Escolha uma chave do KMS diferente da chave padrão. Para obter mais informações sobre as chaves de criptografia e o AWS KMS, consulte [O que é o AWS Key Management Service?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) no *Guia do desenvolvedor do AWS Key Management Service.*
   + Em **Eventos de atividades do banco de dados**, escolha **Habilitar os campos de auditoria nativos do mecanismo** para incluir campos de auditoria específicos do mecanismo.
   + Escolha **Immediately** (Imediatamente).

     Quando você escolhe **Immediately** (Imediatamente), a instância do RDS reinicia imediatamente. Se você escolher **During the next maintenance window**, (Durante a próxima janela de manutenção), a instância do RDS não reinicia imediatamente. Nesse caso, o stream de atividade do banco de dados não é iniciado até a próxima janela de manutenção.

1. Selecione **Start database activity stream** (Iniciar fluxo de atividades do banco de dados).

   O status para o banco de dados mostra que o fluxo de atividade está começando.
**nota**  
Se você receber o erro `You can't start a database activity stream in this configuration`, confira [Classes de instância de banco de dados compatíveis para transmissões de atividades de banco de dados](DBActivityStreams.md#DBActivityStreams.Overview.requirements.classes) para ver se seu cluster de banco de dados está usando uma classe de instância compatível.

------
#### [ AWS CLI ]

Para iniciar fluxos de atividade de banco de dados para uma instância de banco de dados, configure o banco de dados utilizando o comando [start-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/start-activity-stream.html) da AWS CLI.
+ `--resource-arn arn`: especifica o nome do recurso da Amazon (ARN) da instância de banco de dados.
+ `--kms-key-id key`: especifica o identificador de chave KMS para criptografar mensagens no fluxo de atividade do banco de dados. O identificador da chave do KMS da AWS é o ARN da chave, o ID da chave ou o ARN do alias ou o nome do alias para AWS KMS key.
+ `--engine-native-audit-fields-included`: contém campos de auditoria específicos do mecanismo no fluxo de dados. Para excluir esses campos, especifique `--no-engine-native-audit-fields-included` (padrão).

O exemplo a seguir inicia um fluxo de atividade de banco de dados para uma instância de banco de dados no modo assíncrono.

Para Linux, macOS ou Unix:

```
aws rds start-activity-stream \
    --mode async \
    --kms-key-id my-kms-key-arn \
    --resource-arn my-instance-arn \
    --engine-native-audit-fields-included \
    --apply-immediately
```

Para Windows:

```
aws rds start-activity-stream ^
    --mode async ^
    --kms-key-id my-kms-key-arn ^
    --resource-arn my-instance-arn ^
    --engine-native-audit-fields-included ^
    --apply-immediately
```

------
#### [ Amazon RDS API ]

Para iniciar fluxos de atividade de banco de dados para uma instância de banco de dados, configure a instância utilizando a operação [StartActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StartActivityStream.html).

Chame a ação com os parâmetros abaixo:
+ `Region`
+ `KmsKeyId`
+ `ResourceArn`
+ `Mode`
+ `EngineNativeAuditFieldsIncluded`

------

# Modificar um fluxo de atividades de banco de dados para o Amazon RDS
<a name="DBActivityStreams.Modifying"></a>

Talvez você queira personalizar sua política de auditoria do Amazon RDS quando seu fluxo de atividade for iniciado. Se não quiser perder tempo e dados interrompendo o fluxo de atividades, você pode alterar o *estado da política de auditoria* para uma das seguintes configurações:

**Bloqueada (padrão)**  
As políticas de auditoria em seu banco de dados são somente leitura.

**Unlocked** (Desbloqueada)  
As políticas de auditoria em seu banco de dados são de leitura/gravação.

As etapas básicas são:

1. Modifique o estado da política de auditoria para desbloqueada.

1. Personalize sua política de auditoria.

1. Modifique o estado da política de auditoria para bloqueada.

## Console
<a name="DBActivityStreams.Modifying-collapsible-section-E1"></a>

**Como modificar o estado da política de auditoria do fluxo de atividades**

1. Abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Databases (Bancos de dados)**.

1. Em **Actions** (Ações), escolha **Modify database activity stream** (Modificar fluxo de atividades do banco de dados). 

   A janela **Modify database activity stream: *name*** (Iniciar fluxo de atividade do banco de dados: name) aparece, em que *name* é sua instância do RDS.

1. Escolha uma das seguintes opções:  
**Locked** (Bloqueada)  
Quando você bloqueia sua política de auditoria, ela se torna somente leitura. Você não pode editar sua política de auditoria, a menos que desbloqueie a política ou interrompa o fluxo de atividades.  
**Unlocked** (Desbloqueada)  
Quando você desbloqueia sua política de auditoria, ela se torna de leitura/gravação. Você pode editar sua política de auditoria enquanto o fluxo de atividades é iniciado.

1. Escolha **Modify DB activity stream** (Modificar fluxo de atividades de banco de dados).

   O status do banco de dados do Amazon RDS mostra **Configuração do fluxo de atividades**.

1. (Opcional) Escolha o link da instância de banco de dados. Em seguida, escolha a guia **Configuration (Configuração)**.

   O campo **Audit policy status** (Status da política de auditoria) mostra um dos seguintes valores:
   + **Locked** (Bloqueada)
   + **Unlocked** (Desbloqueada)
   + **Locking policy** (Política de bloqueio)
   + **Unlocking policy** (Política de desbloqueio)

## AWS CLI
<a name="DBActivityStreams.Modifying-collapsible-section-E2"></a>

Para modificar o estado do fluxo de atividade de uma instância de banco de dados, use o comando [modify-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-activity-stream.html) da AWS CLI.


****  

| Opção | Obrigatório? | Descrição | 
| --- | --- | --- | 
|  `--resource-arn my-instance-ARN`  |  Sim  |  O nome do recurso da Amazon (ARN) da instância de banco de dados do RDS.  | 
|  `--audit-policy-state`  |  Não  |  O novo estado da política de auditoria para o fluxo de atividades do banco de dados em sua instância: `locked` ou `unlocked`.  | 

O exemplo a seguir desbloqueia a política de auditoria para o fluxo de atividades iniciado em *my-instance-ARN*.

Para Linux, macOS ou Unix:

```
aws rds modify-activity-stream \
    --resource-arn my-instance-ARN \
    --audit-policy-state unlocked
```

Para Windows:

```
aws rds modify-activity-stream ^
    --resource-arn my-instance-ARN ^
    --audit-policy-state unlocked
```

O exemplo a seguir descreve a instância *my-instance*. A saída parcial da amostra mostra que a política de auditoria está desbloqueada.

```
aws rds describe-db-instances --db-instance-identifier my-instance

{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "started",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": "unlocked",
            ...
        }
    ]
}
```

## API do RDS
<a name="DBActivityStreams.Modifying-collapsible-section-E3"></a>

Para modificar o estado da política do seu fluxo de atividades de banco de dados, use a operação [ModifyActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyActivityStream.html).

Chame a ação com os parâmetros abaixo:
+ `AuditPolicyState`
+ `ResourceArn`

# Obter o status de um fluxo de atividade de banco de dados
<a name="DBActivityStreams.Status"></a>

É possível obter o status de um fluxo de atividade para sua instância de banco de dados do Amazon RDS usando o console ou a AWS CLI.

## Console
<a name="DBActivityStreams.Status-collapsible-section-S1"></a>

**Para obter o status de um fluxo de atividade de banco de dados**

1. Abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Databases** (Bancos de dados) e escolha o link da instância de banco de dados.

1. Escolha a guia **Configuração** e verifique o status do **Stream de atividades do banco de dados**.

## AWS CLI
<a name="DBActivityStreams.Status-collapsible-section-S2"></a>

É possível obter a configuração do fluxo de atividade para uma instância de banco de dados como a resposta a uma solicitação de CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html).

O exemplo a seguir descreve *my-instance*.

```
aws rds --region my-region describe-db-instances --db-instance-identifier my-db
```

O exemplo a seguir mostra uma resposta JSON. Os campos a seguir são mostrados:
+ `ActivityStreamKinesisStreamName`
+ `ActivityStreamKmsKeyId`
+ `ActivityStreamStatus`
+ `ActivityStreamMode`
+ `ActivityStreamPolicyStatus`



```
{
    "DBInstances": [
        {
            ...
            "Engine": "oracle-ee",
            ...
            "ActivityStreamStatus": "starting",
            "ActivityStreamKmsKeyId": "ab12345e-1111-2bc3-12a3-ab1cd12345e",
            "ActivityStreamKinesisStreamName": "aws-rds-das-db-AB1CDEFG23GHIJK4LMNOPQRST",
            "ActivityStreamMode": "async",
            "ActivityStreamEngineNativeAuditFieldsIncluded": true, 
            "ActivityStreamPolicyStatus": locked",
            ...
        }
    ]
}
```

## API do RDS
<a name="DBActivityStreams.Status-collapsible-section-S3"></a>

É possível obter a configuração do fluxo de atividades para um banco de dados como a resposta a uma operação [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html).

# Interromper um fluxo de atividade de banco de dados
<a name="DBActivityStreams.Disabling"></a>

É possível interromper um fluxo de atividade usando o console ou a AWS CLI.

Se você excluir sua instância de banco de dados do Amazon RDS, o fluxo de atividade será interrompido e o fluxo subjacente do Amazon Kinesis será excluído automaticamente.

## Console
<a name="DBActivityStreams.Disabling-collapsible-section-D1"></a>

**Como desativar um fluxo de atividade**

1. Abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Databases (Bancos de dados)**.

1. Escolha um banco de dados de onde deseja interromper o fluxo de atividade de banco de dados.

1. Em **Actions (Ações)**, escolha **Stop activity (Interromper atividade)**. A janela **Database Activity Stream (Fluxo de atividade de banco de dados)** é exibida.

   1. Escolha **Immediately** (Imediatamente).

      Quando você escolhe **Immediately** (Imediatamente), a instância do RDS reinicia imediatamente. Se você escolher **During the next maintenance window**, (Durante a próxima janela de manutenção), a instância do RDS não reinicia imediatamente. Nesse caso, o fluxo de atividade do banco de dados não será interrompido até a próxima janela de manutenção.

   1. Escolha **Continue**.

## AWS CLI
<a name="DBActivityStreams.Disabling-collapsible-section-D2"></a>

Para interromper fluxos de atividades de banco de dados para seu banco de dados, configure a instância de banco de dados usando o comando da AWS CLI [stop-activity-stream](https://docs.aws.amazon.com/cli/latest/reference/rds/stop-activity-stream.html). Identifique a região da AWS para a instância de banco de dados usando o parâmetro `--region`. O parâmetro `--apply-immediately` é opcional.

Para Linux, macOS ou Unix:

```
aws rds --region MY_REGION \
    stop-activity-stream \
    --resource-arn MY_DB_ARN \
    --apply-immediately
```

Para Windows:

```
aws rds --region MY_REGION ^
    stop-activity-stream ^
    --resource-arn MY_DB_ARN ^
    --apply-immediately
```

## API do RDS
<a name="DBActivityStreams.Disabling-collapsible-section-D3"></a>

Para interromper os fluxos de atividades de banco de dados para o banco de dados, configure a instância de banco de dados usando a operação [StopActivityStream](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_StopActivityStream.html). Identifique a região da AWS para a instância de banco de dados usando o parâmetro `Region`. O parâmetro `ApplyImmediately` é opcional.

# Monitorar fluxos de atividades de banco de dados
<a name="DBActivityStreams.Monitoring"></a>

Os fluxos de atividades de banco de dados monitoram e relatam atividades. O stream de atividade é coletado e transmitido para o Amazon Kinesis. No Kinesis, é possível monitorar o stream de atividades ou outros serviços e aplicações podem consumir o stream de atividades para análise posterior. É possível encontrar o nome do fluxo subjacente do Kinesis utilizando o comando `describe-db-instances` da AWS CLI ou a operação `DescribeDBInstances` da API do RDS.

O Amazon RDS gerencia o fluxo do Kinesis para você da seguinte forma:
+ O Amazon RDS cria o fluxo do Kinesis automaticamente com um período de retenção de 24 horas. 
+  O Amazon RDS escala o fluxo do Kinesis, se necessário. 
+  Se você interromper o fluxo de atividades do banco de dados ou excluir a instância de banco de dados, o Amazon RDS excluirá o fluxo do Kinesis. 

As categorias de atividade a seguir são monitoradas e colocadas no log de auditoria do fluxo de atividade:
+ **Comandos SQL**: todos os comandos SQL são auditados e também instruções preparadas, funções integradas e funções em PL/SQL. Chamadas para procedimentos armazenados são auditadas. Quaisquer instruções SQL emitidas dentro de procedimentos armazenados ou funções também são auditadas.
+ **Outras informações do banco de dados**: atividades monitoradas incluem a instrução SQL completa, a contagem de linhas afetadas dos comandos DML, os objetos acessados e o nome do banco de dados exclusivo. Os fluxos de atividades de banco de dados também monitoram as variáveis de ligação e os parâmetros de procedimento armazenados. 
**Importante**  
O texto SQL completo de cada instrução é visível no log de auditoria do stream de atividades, incluindo quaisquer dados confidenciais. No entanto, as senhas do usuário do banco de dados serão editadas se o Oracle puder determiná-las pelo contexto, como na instrução SQL a seguir.   

  ```
  ALTER ROLE role-name WITH password
  ```
+ **Informações de conexão**: a atividade monitorada inclui informações de rede e sessão, o ID do processo de servidor e códigos de saída.

Se um fluxo de atividade tiver uma falha ao monitorar uma instância de banco de dados, você será notificado por meio de eventos do RDS.

Nas seções a seguir, é possível acessar, auditar e processar fluxos de atividades do banco de dados.

**Topics**
+ [Acessar um fluxo de atividades no Amazon Kinesis](DBActivityStreams.KinesisAccess.md)
+ [Conteúdo do log de auditoria e exemplos de log de fluxos de atividade do banco de dados](DBActivityStreams.AuditLog.md)
+ [Matriz JSON databaseActivityEventList para fluxos de atividades de banco de dados](DBActivityStreams.AuditLog.databaseActivityEventList.md)
+ [Processar um fluxo de atividade usando o SDK da AWS](DBActivityStreams.CodeExample.md)

# Acessar um fluxo de atividades no Amazon Kinesis
<a name="DBActivityStreams.KinesisAccess"></a>

Ao habilitar um fluxo de atividade para um banco de dados, um fluxo do Kinesis será criado para você. No Kinesis, você pode monitorar a atividade de banco de dados em tempo real. Para analisar detalhadamente a atividade de banco de dados, é possível conectar o stream do Kinesis para aplicações consumidoras. Também é possível conectar o fluxo a aplicações de gerenciamento de compatibilidade como o IBM Security Guardium ou Imperva's SecureSphere Database Audit and Protection.

Você pode acessar seu fluxo do Kinesis a partir do console do RDS ou do console do Kinesis.

**Como acessar um fluxo de atividade pelo Kinesis usando o console do RDS**

1. Abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Databases (Bancos de dados)**.

1. Escolha a instância de banco de dados do Amazon RDS em que iniciou um fluxo de atividade.

1. Escolher **configuração**.

1. Em **Database activity stream** (Fluxo de atividades do banco de dados), clique no link em **Kinesis stream** (Fluxo do Kinesis).

1. No console do Kinesis, selecione **Monitoring** (Monitoramento) para começar a observar a atividade de banco de dados.

**Como acessar um fluxo de atividade pelo Kinesis usando o console do Kinesis**

1. Abra o console do Kinesis em [https://console.aws.amazon.com/kinesis](https://console.aws.amazon.com/kinesis).

1. Escolha o fluxo de atividade na lista de fluxos do Kinesis.

   O nome de um fluxo de atividade contém o prefixo `aws-rds-das-db-` seguido pelo ID de recurso do banco de dados. Veja um exemplo a seguir. 

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

   Para utilizar o console do Amazon RDS para encontrar o ID do recurso do banco de dados, escolha a instância de banco de dados na lista de bancos de dados e escolha a guia **Configuration** (Configuração).

   Para utilizar a AWS CLI a fim de encontrar o nome completo do fluxo do Kinesis para um fluxo de atividades, use uma solicitação de CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) e anote os valores de `ActivityStreamKinesisStreamName` na resposta.

1. Escolha **Monitoring (Monitoramento)** para começar a observar a atividade de banco de dados.

Para obter mais informações sobre como usar o Amazon Kinesis, consulte [O que é o Amazon Kinesis Data Streams?](https://docs.aws.amazon.com/streams/latest/dev/introduction.html).

# Conteúdo do log de auditoria e exemplos de log de fluxos de atividade do banco de dados
<a name="DBActivityStreams.AuditLog"></a>

Os eventos monitorados são representados no fluxo de atividade do banco de dados como strings JSON. A estrutura consiste em um objeto JSON que contém um `DatabaseActivityMonitoringRecord`, que, por sua vez, contém uma matriz `databaseActivityEventList` de eventos de atividade. 

**nota**  
Para fluxos de atividades do banco de dados, a matriz JSON `paramList` não inclui valores nulos de aplicações Hibernate.

**Topics**
+ [Exemplos de log de auditoria para fluxos de atividade](#DBActivityStreams.AuditLog.Examples)
+ [Objeto JSON DatabaseActivityMonitoringRecords](#DBActivityStreams.AuditLog.DatabaseActivityMonitoringRecords)
+ [Objeto JSON databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)

## Exemplos de log de auditoria para fluxos de atividade
<a name="DBActivityStreams.AuditLog.Examples"></a>

Veja a seguir exemplos de log de auditoria JSON descriptografados de registros de evento de atividade.

**Example Registro de eventos de atividade de uma instrução SQL CONNECT**  
O registro de eventos de atividade a seguir mostra um login com o uso de uma instrução SQL `CONNECT` (`command`) por um cliente JDBC Thin (`clientApplication`) para seu banco de dados Oracle.  

```
{
    "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
    }
}
```
O registro de eventos de atividade a seguir mostra uma falha de login no banco de dados do SQL Server.  

```
{
    "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"
            }
        }
    ]
}
```
Se um fluxo de atividade do banco de dados não estiver habilitado, o último campo no documento JSON será `"engineNativeAuditFields": { }`. 

**Example Registro de evento de atividades de uma instrução CREATE TABLE do**  
O exemplo a seguir mostra um evento `CREATE TABLE` para seu banco de dados Oracle.  

```
{
    "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
    }
}
```
O exemplo a seguir mostra um evento `CREATE TABLE` para o seu banco de dados do SQL Server.  

```
{
    "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 Registro de evento de atividades de uma instrução SELECT do**  
O exemplo a seguir mostra um evento `SELECT` para seu banco de dados Oracle.  

```
{
    "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
    }
}
```
O exemplo a seguir mostra um evento `SELECT` para o seu banco de dados do SQL Server.  

```
{
    "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"
            }
        }
    ]
}
```

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

Os registros de eventos de atividade de banco de dados estão em um objeto JSON que contém as informações a seguir.


****  

| Campo JSON | Tipo de dados | Descrição | 
| --- | --- | --- | 
|  `type`  | string |  O tipo de registro JSON. O valor é `DatabaseActivityMonitoringRecords`.  | 
| version | string |  A versão dos registros de monitoramento de atividade de banco de dados. O banco de dados Oracle usa a versão 1.3 e o SQL Server usa a versão 1.4. Essas versões do mecanismo apresentam o objeto JSON engineNativeAuditFields.  | 
|  [databaseActivityEvents](#DBActivityStreams.AuditLog.databaseActivityEvents)  | string |  Um objeto JSON que contém os eventos de atividade.  | 
| key | string | Uma chave de criptografia que você usa para descriptografar o [Matriz JSON databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md)  | 

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

O objeto JSON `databaseActivityEvents` contém as informações a seguir.

### Campos de nível superior no registro JSON
<a name="DBActivityStreams.AuditLog.topLevel"></a>

 Cada evento no log de auditoria é incluído em um registro no formato JSON. Esse registro contém os campos a seguir. 

**type**  
 Esse campo sempre tem o valor `DatabaseActivityMonitoringRecords`. 

**versão**  
 Esse campo representa a versão do contrato ou do protocolo de dados de streaming da atividade do banco de dados. Define quais campos estão disponíveis.

**databaseActivityEvents**  
 Uma string criptografada que representa um ou mais eventos de atividade. Ela é representada como uma matriz de bytes base64. Quando você descriptografa a string, o resultado é um registro no formato JSON com campos, conforme mostrado nos exemplos nesta seção.

**chave**  
 A chave de dados criptografada usada para criptografar a string `databaseActivityEvents`. Esta é a mesma AWS KMS key que você forneceu ao iniciar o fluxo de atividade do banco de dados.

 O exemplo a seguir mostra o formato desse registro.

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

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

Siga as seguintes etapas para descriptografar o conteúdo do campo `databaseActivityEvents`:

1.  Descriptografe o valor no campo JSON da `key` usando a chave do KMS que forneceu ao iniciar o fluxo de atividade do banco de dados. Fazer isso retorna a chave de criptografia de dados em texto não criptografado. 

1.  Decodifique em base64 o valor no campo JSON `databaseActivityEvents` para obter o texto cifrado, em formato binário, da carga útil de auditoria. 

1.  Descriptografe o texto cifrado binário com a chave de criptografia de dados que você decodificou na primeira etapa. 

1.  Descompacte a carga útil descriptografada. 
   +  A carga criptografada está no campo `databaseActivityEvents`. 
   +  O campo `databaseActivityEventList` contém uma matriz de registros de auditoria. Os campos `type` na matriz podem ser `record` ou `heartbeat`. 

O registro do evento de atividade do log de auditoria é um objeto JSON que contém as informações a seguir.


****  

| Campo JSON | Tipo de dados | Descrição | 
| --- | --- | --- | 
|  `type`  | string |  O tipo de registro JSON. O valor é `DatabaseActivityMonitoringRecord`.  | 
| instanceId | string | O identificador de recurso da instância de banco de dados. Ele corresponde ao atributo de instância de banco de dados DbiResourceId. | 
|  [Matriz JSON databaseActivityEventList](DBActivityStreams.AuditLog.databaseActivityEventList.md)   | string |  Uma matriz de registros de auditoria de atividade ou mensagens de pulsação.  | 

# Matriz JSON databaseActivityEventList para fluxos de atividades de banco de dados
<a name="DBActivityStreams.AuditLog.databaseActivityEventList"></a>

A carga do log de auditoria é uma matriz JSON `databaseActivityEventList` criptografada. As tabelas a seguir listam em ordem alfabética os campos para cada evento de atividade na matriz `DatabaseActivityEventList` descriptografada de um log de auditoria. 

Quando a auditoria unificada é habilitada no Oracle Database, os registros de auditoria são preenchidos nessa nova trilha de auditoria. A visualização do `UNIFIED_AUDIT_TRAIL` exibe registros de auditoria em forma tabular, recuperando os registros de auditoria da trilha de auditoria. Quando você inicia um fluxo de atividade de banco de dados, uma coluna no `UNIFIED_AUDIT_TRAIL` mapeia para um campo na matriz `databaseActivityEventList`.

**Importante**  
A estrutura do evento está sujeita a alterações. O Amazon RDS pode adicionar novos campos a eventos de atividade no futuro. Em aplicações que analisam os dados JSON, confirme se o código pode ignorar ou executar ações apropriadas para nomes de campo desconhecidos. 

## Campos databaseActivityEventList para o Amazon RDS para Oracle
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.ro"></a>

Veja a seguir campos `databaseActivityEventList` do Amazon RDS para Oracle.


| Campo | Tipo de dados | Origem | Descrição | 
| --- | --- | --- | --- | 
|  `class`  |  string  |  Coluna `AUDIT_TYPE` no `UNIFIED_AUDIT_TRAIL`  |  A classe do evento de atividade. Corresponde à coluna `AUDIT_TYPE` na visualização do `UNIFIED_AUDIT_TRAIL`. Os valores válidos para o Amazon RDS para Oracle são os seguintes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html) Para obter mais informações, consulte [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/UNIFIED_AUDIT_TRAIL.html#GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D) na documentação do Oracle.  | 
|  `clientApplication`  |  string  |  `CLIENT_PROGRAM_NAME` em `UNIFIED_AUDIT_TRAIL`  |  A aplicação que o cliente usou para se conectar conforme relatado pelo cliente. O cliente não precisa fornecer essas informações, então o valor pode ser nulo. Um valor de amostra é `JDBC Thin Client`.  | 
|  `command`  |  string  |  Coluna `ACTION_NAME` no `UNIFIED_AUDIT_TRAIL`  |  Nome da ação executada pelo usuário. Para entender a ação completa, leia o nome do comando e o valor `AUDIT_TYPE`. Um valor de amostra é `ALTER DATABASE`.  | 
|  `commandText`  |  string  |  Coluna `SQL_TEXT` no `UNIFIED_AUDIT_TRAIL`  |  A instrução SQL associada ao evento. Um valor de amostra é `ALTER DATABASE BEGIN BACKUP`.  | 
|  `databaseName`  |  string  |  Coluna `NAME` no `V$DATABASE`  |  O nome do banco de dados.  | 
|  `dbid`  |  number  |  Coluna `DBID` no `UNIFIED_AUDIT_TRAIL`  |  Identificador numérico do banco de dados. Um valor de amostra é `1559204751`.  | 
|  `dbProtocol`  |  string  |  N/D  |  o protocolo do banco de dados. Neste beta, o valor é `oracle`.  | 
|  `dbUserName`  |  string  |  Coluna `DBUSERNAME` no `UNIFIED_AUDIT_TRAIL`  |  Nome do usuário do banco de dados cujas ações foram auditadas. Um valor de amostra é `RDSADMIN`.  | 
|  `endTime`  |  string  |  N/D  |  Este campo não é usado para o RDS for Oracle e é sempre nulo.  | 
|  `engineNativeAuditFields`  |  objeto  |  `UNIFIED_AUDIT_TRAIL`  |  Por padrão, este objeto permanece em branco. Quando você inicia o fluxo de atividade com a opção `--engine-native-audit-fields-included`, esse objeto inclui as seguintes colunas e seus valores: <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> Para obter mais informações, consulte [UNIFIED\$1AUDIT\$1TRAIL](https://docs.oracle.com/database/121/REFRN/GUID-B7CE1C02-2FD4-47D6-80AA-CF74A60CDD1D.htm#REFRN29162) na documentação do Oracle Database.  | 
|  `errorMessage`  |  string  |  N/D  |  Este campo não é usado para o RDS for Oracle e é sempre nulo.  | 
|  `exitCode`  |  number  |  Coluna `RETURN_CODE` no `UNIFIED_AUDIT_TRAIL`  |  Código de erro do Oracle Database gerado pela ação. Se a ação for realizada, o valor será `0`.  | 
|  `logTime`  |  string  |  Coluna `EVENT_TIMESTAMP_UTC` no `UNIFIED_AUDIT_TRAIL`  |  Carimbo de data/hora da criação da entrada da trilha de auditoria. Um valor de amostra é `2020-11-27 06:56:14.981404`.  | 
|  `netProtocol`  |  string  |  Coluna `AUTHENTICATION_TYPE` no `UNIFIED_AUDIT_TRAIL`  |  O protocolo de comunicação da rede Um valor de amostra é `TCP`.  | 
|  `objectName`  |  string  |  Coluna `OBJECT_NAME` no `UNIFIED_AUDIT_TRAIL`  |  O nome do objeto afetado pela ação. Um valor de amostra é `employees`.  | 
|  `objectType`  |  string  |  Coluna `OBJECT_SCHEMA` no `UNIFIED_AUDIT_TRAIL`  |  O nome do esquema do objeto afetado pela ação. Um valor de amostra é `hr`.  | 
|  `paramList`  |  lista  |  Coluna `SQL_BINDS` no `UNIFIED_AUDIT_TRAIL`  |  A lista de variáveis de ligação, se houver, associadas a `SQL_TEXT`. Um valor de amostra é `parameter_1,parameter_2`.  | 
|  `pid`  |  number  |  Coluna `OS_PROCESS` no `UNIFIED_AUDIT_TRAIL`  |  Identificador do processo do sistema operacional do processo do banco de dados Oracle. Um valor de amostra é `22396`.  | 
|  `remoteHost`  |  string  |  Coluna `AUTHENTICATION_TYPE` no `UNIFIED_AUDIT_TRAIL`  |  O nome de cliente ou endereço IP do host do qual a sessão foi gerada. Um valor de amostra é `123.456.789.123`.  | 
|  `remotePort`  |  string  |  Coluna `AUTHENTICATION_TYPE` no `UNIFIED_AUDIT_TRAIL`  |  O número da porta do cliente. Um valor típico nos ambientes do Oracle Database é `1521`.  | 
|  `rowCount`  |  number  |  N/D  |  Este campo não é usado para o RDS for Oracle e é sempre nulo.  | 
|  `serverHost`  |  string  |  Host do banco de dados  |  O endereço IP do host do servidor de banco de dados. Um valor de amostra é `123.456.789.123`.  | 
|  `serverType`  |  string  |  N/D  |  O tipo de servidor do banco de dados. O valor é sempre `ORACLE`.  | 
|  `serverVersion`  |  string  |  Host do banco de dados  |  A versão do Amazon RDS para Oracle, a atualização de release (RU) e a revisão de atualização de release (RUR). Um valor de amostra é `19.0.0.0.ru-2020-01.rur-2020-01.r1.EE.3`.  | 
|  `serviceName`  |  string  |  Host do banco de dados  |  O nome do serviço da Um valor de amostra é `oracle-ee`.   | 
|  `sessionId`  |  number  |  Coluna `SESSIONID` no `UNIFIED_AUDIT_TRAIL`  |  O identificador da sessão da auditoria. Um exemplo é `1894327130`.  | 
|  `startTime`  |  string  |  N/D  |  Este campo não é usado para o RDS for Oracle e é sempre nulo.  | 
|  `statementId`  |  number  |  Coluna `STATEMENT_ID` no `UNIFIED_AUDIT_TRAIL`  |  O ID numérico para cada execução de instrução. Uma instrução pode causar muitas ações. Um valor de amostra é `142197`.  | 
|  `substatementId`  |  N/D  |  N/D  |  Este campo não é usado para o RDS for Oracle e é sempre nulo.  | 
|  `transactionId`  |  string  |  Coluna `TRANSACTION_ID` no `UNIFIED_AUDIT_TRAIL`  |  O identificador da transação na qual o objeto é modificado. Um valor de amostra é `02000800D5030000`.  | 

## Campos databaseActivityEventList para o Amazon RDS para SQL Server
<a name="DBActivityStreams.AuditLog.databaseActivityEventList.rss"></a>

Veja a seguir campos `databaseActivityEventList` do Amazon RDS para SQL Server.


| Campo | Tipo de dados | Origem | Descrição | 
| --- | --- | --- | --- | 
|  `class`  |  string  |  ` sys.fn_get_audit_file.class_type` mapeado para `sys.dm_audit_class_type_map.class_type_desc`  |  A classe do evento de atividade. Para obter mais informações, consulte [Auditoria do SQL Server (mecanismo de banco de dados)](https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver16) na documentação da Microsoft.  | 
|  `clientApplication`  |  string  |  `sys.fn_get_audit_file.application_name`  |  A aplicação à qual o cliente se conecta, conforme relatado pelo cliente (SQL Server versão 14 e posteriores). Esse campo fica nulo no SQL Server versão 13.  | 
|  `command`  |  string  |  `sys.fn_get_audit_file.action_id` mapeado para `sys.dm_audit_actions.name`  |  A categoria geral da instrução SQL. O valor deste campo depende do valor da classe.  | 
|  `commandText`  |  string  |  `sys.fn_get_audit_file.statement`  |  Este campo indica a instrução SQL.  | 
|  `databaseName`  |  string  |  `sys.fn_get_audit_file.database_name`  |  O nome do banco de dados.  | 
|  `dbProtocol`  |  string  |  N/D  |  o protocolo do banco de dados. Este valor é `SQLSERVER`.  | 
|  `dbUserName`  |  string  |  `sys.fn_get_audit_file.server_principal_name`  |  O usuário do banco de dados para autenticação do cliente.  | 
|  `endTime`  |  string  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `engineNativeAuditFields`  |  objeto  |  Cada campo em `sys.fn_get_audit_file` que não está listado nessa coluna.  |  Por padrão, este objeto permanece em branco. Quando você inicia o fluxo de atividade com a opção `--engine-native-audit-fields-included`, esse objeto inclui outros campos nativos de auditoria nativos do mecanismo, que não são retornados por esse mapa JSON.  | 
|  `errorMessage`  |  string  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `exitCode`  |  integer  |  `sys.fn_get_audit_file.succeeded`  |  Indica se a ação que iniciou o evento foi bem-sucedida. Este campo não pode ficar nulo. Para todos os eventos, exceto eventos de login, esse campo informa se a verificação de permissão foi bem-sucedida ou falhou, mas não se a operação foi bem-sucedida ou falhou. Os valores incluem: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/DBActivityStreams.AuditLog.databaseActivityEventList.html)  | 
|  `logTime`  |  string  |  `sys.fn_get_audit_file.event_time`  |  O carimbo de data/hora do evento que é registrado pelo SQL Server.  | 
|  `netProtocol`  |  string  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `objectName`  |  string  |  `sys.fn_get_audit_file.object_name`  |  O nome do objeto do banco de dados se a instrução SQL estiver operando em um objeto.  | 
|  `objectType`  |  string  |  `sys.fn_get_audit_file.class_type` mapeado para `sys.dm_audit_class_type_map.class_type_desc`  |  O tipo do objeto do banco de dados se a instrução SQL estiver operando em um tipo de objeto.  | 
|  `paramList`  |  string  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `pid`  |  integer  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `remoteHost`  |  string  |  `sys.fn_get_audit_file.client_ip`  |  O endereço IP ou o nome de host do cliente que emitiu a instrução SQL (SQL Server versão 14 e posteriores). Esse campo fica nulo no SQL Server versão 13.  | 
|  `remotePort`  |  integer  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `rowCount`  |  integer  |  `sys.fn_get_audit_file.affected_rows`  |  O número de linhas de tabela afetadas pela instrução SQL (SQL Server versão 14 e posteriores). Esse campo existe no SQL Server versão 13.  | 
|  `serverHost`  |  string  |  Host do banco de dados  |  O endereço IP do servidor de banco de dados host.  | 
|  `serverType`  |  string  |  N/D  |  O tipo de servidor do banco de dados. O valor é `SQLSERVER`.  | 
|  `serverVersion`  |  string  |  Host do banco de dados  |  A versão do servidor do banco de dados; por exemplo, 15.00.4073.23.v1.R1 para SQL Server 2017.  | 
|  `serviceName`  |  string  |  Host do banco de dados  |  O nome do serviço da Um exemplo de valor é `sqlserver-ee`.  | 
|  `sessionId`  |  integer  |  `sys.fn_get_audit_file.session_id`  |  Um identificador exclusivo da sessão.  | 
|  `startTime`  |  string  |  N/D  |  Este campo não é usado pelo Amazon RDS para SQL Server e o valor é nulo.  | 
|  `statementId`  |  string  |  `sys.fn_get_audit_file.sequence_group_id`  |  Um identificador exclusivo para a instrução SQL do cliente. O identificador é diferente para cada evento gerado. Um valor de amostra é `0x38eaf4156267184094bb82071aaab644`.  | 
|  `substatementId`  |  integer  |  `sys.fn_get_audit_file.sequence_number`  |  Um identificador para determinar o número de uma instrução na sequência. Esse identificador ajuda quando registros grandes são divididos em vários registros.  | 
|  `transactionId`  |  integer  |  `sys.fn_get_audit_file.transaction_id`  |  Um identificador de uma transação. Se não houver nenhuma transação ativa, o valor será zero.  | 
|  `type`  |  string  |  Fluxo de atividade de banco de dados gerado  |  O tipo de evento. Os valores são `record` ou `heartbeat`.  | 

# Processar um fluxo de atividade usando o SDK da AWS
<a name="DBActivityStreams.CodeExample"></a>

É possível processar de maneira programática um fluxo de atividade usando o SDK da AWS. Veja a seguir exemplos de Java e Python em total funcionamento de como usar registros de fluxo de atividades de banco de dados do. Veja a seguir exemplos de Java e Python em total funcionamento de como você pode habilitar com base em exemplos de.

------
#### [ 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()
```

------

# Exemplos de políticas do IAM para fluxos de atividades de banco de dados
<a name="DBActivityStreams.ManagingAccess"></a>

Qualquer usuário com privilégios de função do AWS Identity and Access Management (IAM) para os fluxos de atividades de banco de dados pode criar, iniciar, interromper e modificar as configurações do fluxo de atividade para uma instância de banco de dados. Essas ações estão incluídas no log de auditoria do fluxo. Para realizar as práticas recomendadas de conformidade, recomendamos não fornecer esses privilégios a DBAs.

Você define o acesso aos fluxos de atividades de banco de dados usando políticas do IAM. Para obter mais informações sobre autenticação do Amazon RDS, consulte [Gerenciamento de identidade e acesso no Amazon RDS](UsingWithRDS.IAM.md). Para obter mais informações sobre como criar políticas do IAM, consulte [Criar e usar uma política do IAM para acesso do banco de dados do IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md). 

**Example Política para permitir a configuração de fluxos de atividades de banco de dados**  
Para conceder aos usuários acesso refinado para modificar fluxos de atividade, use as chaves de contexto de operação específicas de serviço `rds:StartActivityStream` e `rds:StopActivityStream` em uma política do IAM. O exemplo de política do IAM a seguir permite que um usuário ou uma função configure fluxos de atividade.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureActivityStreams",
            "Effect": "Allow",
            "Action": [
                "rds:StartActivityStream",
                "rds:StopActivityStream"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example Política para permitir o início de fluxos de atividades de banco de dados**  
O exemplo de política do IAM a seguir permite que um usuário ou uma função inicie fluxos de atividade.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStartActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
    ]
}
```

**Example Política para permitir a interrupção de fluxos de atividades de banco de dados**  
O exemplo de política do IAM a seguir permite que um usuário ou uma função interrompa fluxos de atividade.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"AllowStopActivityStreams",
            "Effect":"Allow",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example Política para negar o início de fluxos de atividades de banco de dados**  
O exemplo de política do IAM a seguir impede que um usuário ou uma função inicie fluxos de atividades.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStartActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StartActivityStream",
            "Resource":"*"
        }
     ]
}
```

**Example Política para interromper o início de fluxos de atividades de banco de dados**  
O exemplo de política do IAM a seguir impede que um usuário ou uma função interrompa fluxos de atividades.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"DenyStopActivityStreams",
            "Effect":"Deny",
            "Action":"rds:StopActivityStream",
            "Resource":"*"
        }
    ]
}
```