Salta el contingut
 

Pràctica 1: Instal·lació, configuració i control d'accés

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Enunciat

Ets el DBA d'una empresa fictícia. L'empresa té una aplicació de gestió (ERP) i un equip de persones que treballen directament amb la base de dades, i t'encarrega desplegar-ne un únic servidor que els atenga a tots, i controlar qui hi accedeix i què hi pot fer. Ho faràs amb Docker, amb Oracle o PostgreSQL (a la teua elecció).

Més avall tens 8 requisits que el servidor ha de complir i una ampliació opcional. Els requisits 1 a 6 tracten la instal·lació i la configuració del servidor, i els requisits 7 i 8, el control d'accés. Cadascun indica la necessitat de l'empresa, què s'ha de complir i què has de demostrar. No t'indiquem quins fitxers ni quins paràmetres has de modificar: això ho has de descobrir i justificar tu.

Escenari

El diagrama resumeix l'estructura: qui es connecta al servidor, des de quina xarxa, i el servidor de base de dades que has de desplegar.

flowchart LR
    subgraph int["Xarxa interna · 172.30.0.0/24"]
        subgraph apps["Aplicació"]
            erp1["ERP<br/>instància 1"]
            erp2["ERP<br/>instància 2"]
            erp3["ERP<br/>instància 3"]
        end
        subgraph pers["Persones"]
            personal["Personal<br/>de RRHH"]
            analistes["Analistes"]
        end
    end

    subgraph vis["Xarxa de visitants · 172.31.0.0/24"]
        visitant["Client visitant"]
    end

    subgraph srv["Servidor de base de dades (Docker) · 2 GB de RAM"]
        db["SGBD<br/>Oracle o PostgreSQL"]
        discerp[("Espai de l'ERP")]
        discrrhh[("Espai dels<br/>empleats")]
    end

    erp1 & erp2 & erp3 -->|"15 connexions<br/>cadascuna"| db
    personal & analistes --> db
    visitant -.->|"no ha de poder<br/>connectar"| db
    db --> discerp
    db --> discrrhh

    linkStyle 5 stroke:#d33,stroke-width:2px,color:#d33

Les taules següents detallen les dades de l'escenari.

Aplicació

Aplicació Ús Descripció
ERP 3 instàncies × 15 connexions per instància Aplicació de gestió de l'empresa (comandes, factures, estoc…). S'executa 3 vegades a la vegada. Cada instància obri fins a 15 connexions simultànies a la base de dades. Les seues dades creixen molt.

Persones

A més de l'ERP, algunes persones es connecten directament a la base de dades des dels seus equips, a la xarxa interna. Treballen amb les dades dels empleats (RRHH), que no pertanyen a l'ERP: són menudes i estables.

Grup Persones Què fan
Personal de RRHH 2 Gestionen les dades dels empleats, incloent-hi els salaris.
Analistes 3 Fan informes amb les dades de l'ERP i dels empleats, però no poden veure els salaris. La plantilla d'analistes canvia sovint.

Infraestructura

Recurs Valor Descripció
RAM 2 GB Memòria total de què disposa el servidor de base de dades. El contenidor no en pot usar més.
Xarxa interna 172.30.0.0/24 Xarxa on són l'ERP i els equips del personal. És l'única des d'on es pot connectar al servidor.
Xarxa de visitants 172.31.0.0/24 Una altra xarxa que arriba fins al servidor, però que no ha de poder connectar-s'hi.

Requisits

  1. Desplegament reproduïble

    Necessitat: si el servidor es perd, s'ha de poder tornar a crear ràpidament i amb les mateixes dades.

    Cal que:

    • El desplegament (imatge, xarxes, volums i límits de recursos) estiga descrit en un docker-compose.yml.
    • La versió del programari estiga fixada (res de latest).
    • Les contrasenyes i la resta de configuració sensible no es pugen al repositori.
    • Les dades del servidor, les de l'ERP i les dels empleats estiguen en volums separats.
    • Tot l'escenari es puga muntar amb l'script setup-env.sh (vegeu Script de desplegament).

    Demostra que: pots destruir el servidor, tornar-lo a crear, i les dades hi continuen.

  2. Accés restringit a la xarxa interna

    Necessitat: només l'ERP i el personal de la xarxa interna poden connectar-se al servidor. Ningú més, ni tan sols des d'una altra xarxa que arribe al servidor.

    Cal que:

    • El servidor estiga connectat a les dues xarxes (aplicació i visitants).
    • El sistema gestor de bases de dades rebutge les connexions que vénen de la xarxa de visitants. No val que no hi haja ruta: el rebuig ha de ser decisió del SGBD.
    • No es publique cap port al host.

    Demostra que: un client a la xarxa interna connecta i un client a la xarxa de visitants és rebutjat. Obri un contenidor client a cada xarxa per a provar-ho.

  3. Memòria

    Necessitat: el servidor disposa de 2 GB de RAM i ha d'aprofitar-los bé, sense quedar-se curt ni passar-se. Si el servidor intenta usar més memòria de la que té el contenidor, Docker el mata.

    Context: un SGBD no usa la memòria d'una sola manera. Una part és compartida per tot el servidor (per exemple, la caché de dades que evita llegir del disc). Una altra es reserva per sessió o per operació (per exemple, per a ordenar resultats o fer combinacions de taules), i per tant creix amb el nombre de connexions. A més, el sistema operatiu i els processos interns del propi servidor també necessiten memòria.

    Cal que:

    • Identifiques els paràmetres del teu SGBD que controlen aquestes dues classes de memòria (la compartida i la per sessió o operació).
    • Els configures amb valors calculats, de manera que la suma, en el pitjor cas, càpiga en els 2 GB i deixe marge per al sistema operatiu.
    • Justifiques el repartiment amb un càlcul escrit (què reserves per a cada cosa i per què). El nombre de connexions del requisit 4 t'influeix.

    Demostra que:

    • Hi ha un paràmetre de memòria que es pot canviar sense reiniciar el servidor: mostra el valor abans i després, consultant el servidor.
    • Hi ha un altre que requereix reiniciar-lo: canvia'l i mostra que el valor en ús no canvia fins que reinicies.

    Què entregaràs: una taula amb cada paràmetre triat, el seu valor, el càlcul que el justifica i l'eixida del servidor que demostra el valor en ús.

  4. Connexions

    Necessitat: el servidor ha d'admetre totes les connexions que l'ERP i el personal poden obrir a la vegada, però no més de les necessàries.

    Cal que:

    • Calcules el nombre màxim de connexions simultànies a partir de l'escenari.
    • Justifiques el valor (no cal que siga exacte, sí que es puga defensar).

    Demostra que: quan se supera el límit, el servidor rebutja la connexió i mostra l'error corresponent.

  5. Emmagatzematge

    Cal que:

    • Hi haja almenys 2 espais d'emmagatzematge (tablespaces), un per a les dades de l'ERP i un altre per a les dels empleats, en volums diferents.
    • Les dades dels espais d'emmagatzematge es mantinguen quan es reinicia el contenidor.

    Demostra que:

    • Saps on és físicament cada espai, consultant el diccionari de dades.
    • Després de reiniciar el contenidor, les dades dels dos espais hi continuen.
  6. Traçabilitat

    Necessitat: si algú intenta connectar-se sense permís, ha de quedar constància, encara que el contenidor es destruïsca.

    Cal que:

    • Els registres del servidor s'escriguen en un fitxer, en una ubicació persistent.

    Demostra que: els intents de connexió rebutjats del requisit 2 apareixen en eixe fitxer.

  7. Compte de l'aplicació

    Necessitat: l'ERP ha d'accedir només a les seues dades, i un error o un atac en l'aplicació no ha de poder modificar l'estructura de la base de dades. A més, l'aplicació no es pot quedar sense accés de manera inesperada.

    Cal que:

    • Les dades de l'ERP i les dels empleats pertanguen, cadascuna, a un compte propietari propi, que ningú utilitze per connectar-se, i es guarden en el seu espai d'emmagatzematge (requisit 5).
    • L'ERP es connecte amb un compte diferent del propietari, que només puga consultar i modificar les dades de l'ERP.
    • El compte de l'ERP no puga obrir més connexions de les que necessiten les seues instàncies (requisit 4).
    • La contrasenya del compte de l'ERP no caduque.

    Demostra que:

    • El compte de connexió de l'ERP pot inserir dades, però no pot crear ni eliminar taules.
    • Quan el compte de l'ERP supera el seu límit de connexions, el servidor el rebutja.
  8. Accés del personal

    Necessitat: el personal de RRHH i els analistes es connecten directament a la base de dades. Cada persona ha de tindre el seu compte, i la plantilla d'analistes canvia sovint: donar d'alta o de baixa una persona no pot suposar revisar els privilegis un a un.

    Cal que:

    • Cada persona tinga un compte propi, amb una contrasenya que caduque com a màxim cada 90 dies.
    • Els privilegis s'assignen a grups de privilegis (rols), un per perfil de treball, i no directament a les persones.
    • El personal de RRHH puga consultar i modificar les dades dels empleats.
    • Els analistes puguen consultar les dades de l'ERP i dels empleats, però no els salaris. Afig una columna de salari a les dades dels empleats si no en tenen.

    Demostra que:

    • Un analista pot consultar les dades dels empleats, però la consulta del salari és rebutjada.
    • Quan s'incorpora un analista nou, n'hi ha prou amb assignar-li el rol dels analistes perquè puga fer les mateixes consultes que la resta, sense concedir-li cap privilegi més.
    • Quan un analista se'n va, n'hi ha prou amb retirar-li el rol perquè perda tots els privilegis.
  9. Ampliació: Caiguda sobtada

    Necessitat: el servidor pot caure en qualsevol moment (una fallada elèctrica, per exemple) i no pot deixar les dades en un estat inconsistent.

    Cal que:

    • El servidor estiga configurat per a tornar-se a alçar sol si el procés cau.

    Demostra que:

    • Després de simular una caiguda sobtada, una transacció confirmada (amb COMMIT) es conserva i una sense confirmar es descarta.
    • Existeix una configuració que millora el rendiment de les confirmacions a canvi de durabilitat: investiga-la i intenta reproduir un cas en què es perga una transacció confirmada.

Lliurament

Lliura un únic document (p1/README.md) que explique tot el treball relacionat amb la pràctica: les ordres executades, l'eixida obtinguda i per què has pres cada decisió (no només el "com"). No hi ha una única solució correcta: es valorarà el raonament i la justificació basada en evidències.

Les demostracions han d'estar recolzades per consultes al diccionari de dades o per l'eixida del servidor, no per captures d'un fitxer editat.

La pràctica es validarà oralment: se't demanarà canviar un paràmetre o donar d'alta una persona en directe, i explicar per què has triat cada configuració.

Taula resum

Al principi del document inclou una taula resum que explique com has resolt cada requisit i on es troba l'evidència dins del document.

Requisit Com s'ha resolt Evidència
1. Desplegament reproduïble Resum breu de què has configurat Apartat o captura
2. Accés restringit a la xarxa interna
3. Memòria
4. Connexions
5. Emmagatzematge
6. Traçabilitat
7. Compte de l'aplicació
8. Accés del personal
9. Ampliació: caiguda sobtada (opcional)

Script de desplegament

El lliurament ha d'incloure un script p1/setup-env.sh que munte tot l'escenari de la pràctica a partir d'un clon net del repositori: crear i arrancar els contenidors, aplicar la configuració i executar els fitxers SQL necessaris (tablespaces, usuaris, rols, privilegis...).

p1/setup-env.sh
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")"

### CONTENIDORS

# Crea/arranca els contenidors si cal i espera que estiguen sans (healthy)
docker compose up -d --wait

### FITXERS DE CONFIGURACIO
docker cp config/...conf empresa-db:/var/lib/postgresql/data/...conf

### EXEMPLE LLANÇAMENT CONSULTES SQL
docker exec -i empresa-db psql -U postgres < sql/consultes.sql
p1/docker-compose.yml
services:
  db:
    container_name: empresa-db
    image: postgres:16.4
    environment:
      # ...
    volumes:
      # ...
    healthcheck:
      # Comprovació per TCP: durant la inicialització el servidor temporal només escolta pel socket Unix
      test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U postgres"]
      interval: 2s
      timeout: 5s
      retries: 30
      start_period: 10s

Estructura del repositori

Tota la informació d'aquesta unitat hauria d'estar situada en el directori p1, seguint la següent estructura.

CognomNom-ASGBD/
├── README.md
├── docker-compose.yml # general
├── .gitignore
└── p1/
    ├── README.md
    ├── docker-compose.yml # específic de la P1
    ├── setup-env.sh       # munta tot l'escenari
    ├── .env.example
    ├── conf/
    │   └── ...            # fitxers de configuració
    ├── sql/
    │   └── ...            # fitxers amb consultes
    └── img/
        ├── captura-1.png
        ...
        └── captura-N.png

Lliurament amb GitHub

El lliurament d'aquesta pràctica s'ha de fer mitjançant GitHub.

  • Crea una etiqueta anomenada P1 a l'últim commit on està la versió definitiva de la pràctica.
    git tag P1
    
  • Publica la etiqueta al repositori remot.

    git push --tags
    

  • Entrega a Aules l'enllaç al document de la pràctica a la etiqueta creada.

    https://github.com/fpmislata-asix2-asgbd/CognomNom-ASGBD/tree/P1/p1/README.md
    

📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.