[comment]: # ({31139eac-9c6ef8ce})
# 3 Protegendo o Oracle

[comment]: # ({/31139eac-9c6ef8ce})

[comment]: # ({02a97e07-63c3fcd8})
#### Visão geral

Esta seção contém as melhores práticas para proteger um banco de dados Oracle.

::: noteclassic
Para uma configuração básica, consulte as instruções padrão de [criação do banco de dados Oracle](/manual/appendix/install/oracle), que incluem a criação do usuário 'zabbix' com privilégios totais no banco de dados Zabbix.
Este usuário é o proprietário do banco de dados e também possui os privilégios necessários para modificar a estrutura do banco de dados ao [atualizar](/manual/installation/upgrade) o Zabbix.
:::

Para melhorar a segurança, recomenda-se criar usuários adicionais do banco de dados com privilégios mínimos.
Esses usuários devem ser configurados com base no [princípio do menor privilégio](/manual/best_practices/security/access_control#principle-of-least-privilege),
ou seja, eles devem ter apenas os privilégios essenciais para executar as funções pretendidas.

::: noteimportant
O suporte ao Oracle DB está obsoleto desde o Zabbix 7.0.
:::

[comment]: # ({/02a97e07-63c3fcd8})

[comment]: # ({2b087e5a-4e42615b})
#### Criando usuários

Assumindo que o proprietário do banco de dados plugável (PDB) é `usr_owner`, recomenda-se criar dois usuários adicionais com os privilégios correspondentes (para operações diárias):

-   **usr_srv** - usuário para executar o Zabbix server;
-   **usr_web** - usuário para executar o Zabbix frontend e API.

Esses usuários devem ser criados pelo proprietário do PDB (`usr_owner`) usando os seguintes comandos:

```sql
CREATE USER usr_srv IDENTIFIED BY "usr_srv" DEFAULT TABLESPACE "usr_owner" TEMPORARY TABLESPACE temp;
CREATE USER usr_web IDENTIFIED BY "usr_web" DEFAULT TABLESPACE "usr_owner" TEMPORARY TABLESPACE temp;

GRANT CREATE SESSION, DELETE ANY TABLE, INSERT ANY TABLE, SELECT ANY TABLE, UPDATE ANY TABLE, SELECT ANY SEQUENCE TO usr_srv;
GRANT CREATE SESSION, DELETE ANY TABLE, INSERT ANY TABLE, SELECT ANY TABLE, UPDATE ANY TABLE, SELECT ANY SEQUENCE TO usr_web;
```

::: noteclassic
A restauração e atualização da tabela devem ser realizadas pelo proprietário do banco de dados.
:::

Após criar os usuários, prossiga para a criação de sinônimos.

[comment]: # ({/2b087e5a-4e42615b})

[comment]: # ({2f210836-e9496d48})
#### Gerando sinônimos

O script abaixo [cria sinônimos](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/CREATE-SYNONYM.html#GUID-A806C82F-1171-478E-A910-F9C6C42739B2), para que `usr_srv` e `usr_web` possam acessar tabelas no schema `usr_owner` sem especificar explicitamente o schema.

```sql
BEGIN
FOR x IN (SELECT owner,table_name FROM all_tables WHERE owner ='usr_owner')
LOOP
  EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM usr_srv.'|| x.table_name ||' FOR '||x.owner||'.'|| x.table_name;
  EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM usr_web.'|| x.table_name ||' FOR '||x.owner||'.'|| x.table_name;
END LOOP;
END;
/
```

::: noteimportant
Este script deve ser executado toda vez após a estrutura do banco de dados do Zabbix ser criada ou alterada (por exemplo, após atualizar o Zabbix, se algumas tabelas foram criadas ou renomeadas).
:::

[comment]: # ({/2f210836-e9496d48})
