# Prerrequisitos

Este plugin realiza conexiones remotas a las bases de datos a monitorizar, por lo que es necesario asegurar la conectividad entre el servidor de Pandora FMS y dichas bases de datos. Es necesario disponer de una configuración adecuada de la red y del cortafuegos para permitir la comunicación entre el servidor y las bases de datos remotas, con el fin de garantizar el funcionamiento eficaz del complemento.

## ES — Conexión

El plugin se conecta mediante `oracledb` (driver Python) usando el formato:

```
HOST:PORT/SID
```

O mediante un DSN completo:

```
dsn=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))
```

El usuario de conexión debe tener al menos el privilegio `CREATE SESSION`:

```sql
GRANT CREATE SESSION TO pandora;
```

## ES — Grants por Módulo

Todos los módulos se activan mediante checkboxes en la configuración de Discovery. Otorga solo los permisos que necesites según los módulos que uses.

### 1. Conexiones (`checkConnections`)

```sql
-- v$session (contador de sesiones activas)
GRANT SELECT ON V_$SESSION TO pandora;

-- v$parameter (máximo de sesiones)
GRANT SELECT ON V_$PARAMETER TO pandora;
```

### 2. Uptime (`checkUptime`)

```sql
-- v$session (hora de inicio del proceso PMON)
GRANT SELECT ON V_$SESSION TO pandora;
```

### 3. Estadísticas de Queries (`queryStats`)

```sql
-- v$sqlstats (contadores de ejecución SQL)
GRANT SELECT ON V_$SQLSTATS TO pandora;
```

### 4. Tablespaces (`checkTablespaces`)

```sql
-- dba_tablespace_usage_metrics (Oracle 10g+)
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO pandora;

-- dba_tablespaces (estado)
GRANT SELECT ON DBA_TABLESPACES TO pandora;

-- dba_data_files (cálculo de tamaño, fallback Oracle < 10g)
GRANT SELECT ON DBA_DATA_FILES TO pandora;

-- dba_free_space (cálculo de tamaño, fallback Oracle < 10g)
GRANT SELECT ON DBA_FREE_SPACE TO pandora;
```

### 5. Ratio de Fragmentación (`checkFragmentation`)

```sql
-- dba_tables (estadísticas de tablas para fragmentación)
GRANT SELECT ON DBA_TABLES TO pandora;
```

### 6. Estadísticas de Caché (`checkCache`)

```sql
-- v$librarycache
GRANT SELECT ON V_$LIBRARYCACHE TO pandora;

-- v$rowcache
GRANT SELECT ON V_$ROWCACHE TO pandora;

-- v$sysstat
GRANT SELECT ON V_$SYSSTAT TO pandora;
```

### 7. Multitenant / Monitorización de PDBs (`multitenant`)

```sql
-- v$pdbs (descubrimiento de PDBs)
GRANT SELECT ON V_$PDBS TO pandora;
```

Además, el usuario debe tener `CREATE SESSION` en **cada PDB** a monitorizar. Conéctate a cada PDB y ejecuta:

```sql
ALTER SESSION SET CONTAINER = <PDB_NAME>;
GRANT CREATE SESSION TO pandora;
-- Los grants granulares de PDB (v$session, dba_tablespaces, etc.)
-- deben otorgarse también dentro de cada PDB.
```

> **Nota:** Con multitenant activado, el plugin se conecta directamente a cada PDB usando `HOST:PORT/PDB_NAME`, por lo que el usuario debe existir y tener los permisos necesarios en todas las PDBs.

### 8. Consultas Personalizadas (`executeCustomQueries`)

Los permisos dependen completamente de las consultas definidas por el usuario. Otorga `SELECT` sobre cualquier tabla/vista adicional que referencien las custom queries.

---

## ES — Configuración Rápida (Todos los Módulos)

Para mayor comodidad, otorga `SELECT_CATALOG_ROLE` que cubre la mayoría de vistas `V$` y `DBA_`:

```sql
-- En CDB (base de datos contenedora)
CREATE USER pandora IDENTIFIED BY <password>;
GRANT CREATE SESSION TO pandora;
GRANT SELECT_CATALOG_ROLE TO pandora;

-- En cada PDB (si usas multitenant)
ALTER SESSION SET CONTAINER = <PDB_NAME>;
-- Si el usuario ya existe como common user del CDB:
GRANT CREATE SESSION TO pandora;
GRANT SELECT_CATALOG_ROLE TO pandora;
```

### Alternativa Granular Mínima

Si `SELECT_CATALOG_ROLE` es demasiado amplio, usa este bloque:

```sql
CREATE USER pandora IDENTIFIED BY <password>;
GRANT CREATE SESSION TO pandora;

-- Vistas de rendimiento dinámico
GRANT SELECT ON V_$SESSION TO pandora;
GRANT SELECT ON V_$SQLSTATS TO pandora;
GRANT SELECT ON V_$PARAMETER TO pandora;
GRANT SELECT ON V_$LIBRARYCACHE TO pandora;
GRANT SELECT ON V_$ROWCACHE TO pandora;
GRANT SELECT ON V_$SYSSTAT TO pandora;
GRANT SELECT ON V_$PDBS TO pandora;

-- Vistas DBA
GRANT SELECT ON DBA_TABLESPACES TO pandora;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO pandora;
GRANT SELECT ON DBA_DATA_FILES TO pandora;
GRANT SELECT ON DBA_FREE_SPACE TO pandora;
GRANT SELECT ON DBA_TABLES TO pandora;

-- Información de versión
GRANT SELECT ON PRODUCT_COMPONENT_VERSION TO pandora;
```

## ES — Tabla Resumen

| Token Módulo | Vista/Tabla Oracle |
|---|---|
| `checkConnections` | `V$SESSION`, `V$PARAMETER` |
| `checkUptime` | `V$SESSION` |
| `queryStats` | `V$SQLSTATS` |
| `checkTablespaces` | `DBA_TABLESPACE_USAGE_METRICS`, `DBA_TABLESPACES`, `DBA_DATA_FILES`*, `DBA_FREE_SPACE`* |
| `checkFragmentation` | `DBA_TABLES` |
| `checkCache` | `V$LIBRARYCACHE`, `V$ROWCACHE`, `V$SYSSTAT` |
| `multitenant` | `V$PDBS` + `CREATE SESSION` en cada PDB |
| `executeCustomQueries` | Depende de las queries del usuario |

\* Solo necesario para el fallback de Oracle <= 10g. Oracle 11g+ usa `DBA_TABLESPACE_USAGE_METRICS`.

---