🎓 Cómo usar este documento: Lee la explicación de cada bloque temático y responde las preguntas antes de pasar al siguiente. Las soluciones comentadas están al final.
La virtualización consiste en crear una máquina virtual que replica completamente a una máquina real, de modo que sobre ella se pueda instalar un sistema operativo completo que "cree" que está corriendo sobre hardware real.
El software encargado de crear estas máquinas ficticias se conoce como aplicación de virtualización o hypervisor/monitor de máquina virtual.
| Concepto | Descripción |
|---|---|
| Anfitrión (Host) | SO del ordenador físico donde se instala el programa de virtualización. Presta recursos al invitado. |
| Invitado (Guest) | SO que se instala dentro de la máquina virtual creada por el hypervisor. |
💡 Mnemotecnia: El anfitrión es el propietario de la casa; los invitados viven dentro de particiones de esa casa. Un anfitrión puede tener varios invitados.
Virtualización: requisitos recomendados
├── RAM → Mínimo 2 GB (se divide entre host y guest)
├── Disco duro → Suficiente para alojar los discos virtuales
├── Microprocesador → Potente (se divide entre los SO)
└── CPU con soporte de virtualización hardware
├── Intel VT (IVT — Intel Virtualization Technology)
└── AMD-V (AMD Virtualization — socket AM3, AM2, S1, F)
⚠️ Dato clave: Sin soporte hardware en la CPU (VT o AMD-V), la virtualización es posible pero muy lenta. Aplicaciones como KVM son inutilizables sin estas extensiones.
En la arquitectura x86, el kernel del SO se ejecuta en el anillo 0 (máximos privilegios). Al virtualizar, el kernel del SO invitado no puede ejecutarse en el anillo 0 de forma directa.
| Solución | Descripción | Problema |
|---|---|---|
| Paravirtualización | Recompila el SO para que no use el anillo 0 | Lento, solo funciona con Linux/BSD |
| Emulación del anillo 0 | Emula completamente el anillo 0 | Aún más lento |
| Extensiones VT/AMD-V | Crean un "anillo -1" para el hypervisor | ✅ Solución óptima — velocidad idéntica al SO real |
💡 Con las extensiones Intel VT o AMD-V, el hypervisor corre en el anillo -1, y los SO virtualizados corren directamente en el anillo 0. No hay que recompilar nada.
Permiten dividir la máquina física en varias máquinas virtuales, cada una con su propio SO.
| Tipo de Hypervisor | Descripción | Ejemplos |
|---|---|---|
| Tipo 1 | Corre directamente sobre el hardware. No necesita SO anfitrión. | VMware ESXi, Xen, Hyper-V standalone |
| Tipo 2 | Corre sobre un SO anfitrión existente. | VirtualBox, VMware Player/Workstation, KVM |
Se ejecutan como un proceso normal del SO y soportan un solo proceso. Su objetivo es proporcionar un entorno de ejecución independiente de la plataforma.
💡 Ejemplo más conocido: La Máquina Virtual de Java (JVM). También la de .NET.
| Técnica | Descripción | Ejemplo |
|---|---|---|
| Completa / nativa | Ejecuta cualquier SO compatible con el hardware real | VirtualBox con Windows, Linux, macOS |
| Emulación de hardware / no nativa | Emula una arquitectura hardware diferente | Emulador de Nintendo 64 en un PC x86 |
| A nivel de SO | Divide el SO en compartimentos (entornos virtuales) | Solaris Zones, IBM AIX Micro Partitioning |
⚠️ La más usada es la virtualización completa. La virtualización a nivel de SO es cada vez más obsoleta.
Ventajas principales
├── Ahorro de costes → Donde antes hacían falta 2 máquinas, ahora basta 1
├── Entornos de prueba → Se instala software beta en el SO virtual, no en el real
├── Seguridad aislada → Navegación segura en entorno aislado
├── Compatibilidad → Ejecutar Windows dentro de Linux o Mac
├── Reducción de espacio → Consolidación media estimada 10:1
├── Migración en caliente → Mover VMs entre servidores físicos sin parada
├── Balanceo dinámico → Distribución automática de VMs entre servidores
├── Alta disponibilidad → Un fallo en la VM no afecta a las demás
└── Administración centralizada → Gestión del CPD como pool de recursos
💡 Dato clave: Un servidor con un solo SO deja sin usar un 70% de su capacidad. La virtualización aprovecha ese desperdicio.
| Solución | Tipo | Coste | Características principales |
|---|---|---|---|
| VirtualBox | Tipo 2, virtualización completa | Gratuito (uso doméstico) | Fácil de usar, multiplaforma |
| VMware Player | Tipo 2, virtualización completa | Gratuito | Ligero, buen rendimiento |
| VMware Workstation | Tipo 2, virtualización completa | De pago | Instantáneas, clonado en caliente |
| VMware ESXi | Tipo 1, virtualización completa | Gratuito | Sin SO anfitrión, hardware limitado |
| VMware vSphere/ESX | Tipo 1, virtualización completa | De pago | Infraestructuras complejas, más hardware soportado |
| VMware ThinApp | VM de proceso | De pago | Ejecuta aplicaciones sin instalar |
| VMware Fusión | Tipo 2 para Mac | De pago | Hypervisor para macOS |
| VMware vCenter | No es hypervisor | Gratuito | Administración centralizada de VMware |
| VMware Converter | Herramienta P2V | Gratuito | Virtualiza una máquina física existente |
| Virtual PC | Tipo 2 | Gratuito | Hypervisor Microsoft para escritorio, limitado |
| KVM | Tipo 2, máquina completa | Gratuito | Integrado en Linux ≥ 2.6.20, necesita VT/AMD-V |
| Xen | Tipo 1 + paravirtualización | Gratuito | Open source, migración en caliente, Universidad de Cambridge |
| Hyper-V | Tipo 1 (standalone) / Tipo 2 (con Windows Server) | Versión incluida con Windows Server | Particiones, paravirtualización Linux |
💡 Sobre Xen: Citrix adquirió XenSource en 2007 por 500 millones de dólares. XenServer Express Edition es gratuito pero limitado a 4 VMs.
💡 Sobre KVM: Usa Virt-Manager como administrador gráfico y Qemu como hypervisor subyacente.
💡 Sobre Hyper-V: Trabaja con particiones. Hay una partición raíz (Windows Server 2008) con acceso directo al hardware, y particiones hijas para los SO virtualizados.
1. ¿Cómo se denomina el SO que alberga la aplicación de virtualización y cede recursos a las máquinas virtuales?
2. ¿Qué problema resuelven las extensiones Intel VT y AMD-V en la virtualización?
3. ¿Qué tipo de hypervisor es VMware ESXi?
4. ¿Cuál de las siguientes soluciones NO es un hypervisor, sino una herramienta de administración?
5. ¿Qué técnica de virtualización recompila el sistema operativo para que no haga uso del anillo 0?
Tipos de almacenamiento
├── DAS (Direct Attached Storage) → Almacenamiento directamente conectado al servidor
├── NAS (Network Attached Storage) → Almacenamiento accesible a través de red IP
└── SAN (Storage Area Network) → Red dedicada de almacenamiento a nivel de bloque
El almacenamiento está directamente conectado al servidor mediante un bus SCSI. Es el modelo más sencillo y tradicional.
Arquitectura DAS
Computer System
├── Application
├── File System
├── Volume Manager
├── SCSI Device Driver
└── SCSI Bus Adapter
│
[Block I/O]
│
[SCSI bus]
│
[Disco]
| Característica | DAS |
|---|---|
| Protocolo | SCSI (bus directo) |
| Nivel de acceso | Bloque (Block I/O) |
| Conexión | SCSI Bus Adapter local |
| Ventaja | Simplicidad, bajo coste, alto rendimiento local |
| Inconveniente | No compartible entre servidores, escalabilidad limitada |
El almacenamiento se conecta a través de red IP y presenta un sistema de archivos completo a los clientes mediante protocolos NFS (Linux/Unix) o CIFS/SMB (Windows).
Arquitectura NAS Gateway
Computer System (Cliente)
├── Application
├── File System
├── I/O Redirector
├── NFS/CIFS
├── TCP/IP Stack
└── NIC
│
[File I/O sobre IP]
│
NAS Gateway (Servidor de almacenamiento)
├── NIC
├── TCP/IP Stack
├── File System
├── FC HBA
└── FC
│
[Disco]
| Característica | NAS |
|---|---|
| Protocolo | NFS (Linux) / CIFS-SMB (Windows) sobre TCP/IP |
| Nivel de acceso | Fichero (File I/O) |
| Conexión | Red IP estándar (Ethernet) |
| Ventaja | Fácil de compartir entre múltiples clientes, bajo coste |
| Inconveniente | Rendimiento limitado por la red IP, latencia mayor |
💡 Mnemotecnia NAS: Network = red de ficheros (NFS/CIFS)
Red dedicada de almacenamiento de alta velocidad que permite acceso a nivel de bloque mediante Fibre Channel (FC) o iSCSI.
Arquitectura SAN
Computer System
├── Application
├── File System
├── Volume Manager
├── SCSI Device Driver
└── FC HBA (Host Bus Adapter Fibre Channel)
│
[Block I/O]
│
[Red SAN]
│
[FC — Fibre Channel]
│
[Disco]
| Característica | SAN |
|---|---|
| Protocolo | Fibre Channel (FC) / iSCSI |
| Nivel de acceso | Bloque (Block I/O) |
| Conexión | Red dedicada FC o iSCSI |
| Ventaja | Altísimo rendimiento, escalabilidad, compartición entre servidores |
| Inconveniente | Coste elevado, complejidad de administración |
💡 Mnemotecnia SAN: Storage Area Network = red dedicada de bloques (FC/iSCSI)
| DAS | NAS | SAN | |
|---|---|---|---|
| Nivel de acceso | Bloque | Fichero | Bloque |
| Red | Bus SCSI local | Red IP (Ethernet) | Red dedicada FC/iSCSI |
| Protocolo | SCSI | NFS / CIFS | Fibre Channel / iSCSI |
| Compartición | No (local al servidor) | Sí (múltiples clientes) | Sí (múltiples servidores) |
| Rendimiento | Alto (local) | Medio (depende de red IP) | Muy alto |
| Coste | Bajo | Bajo-Medio | Alto |
| Complejidad | Baja | Media | Alta |
| Caso de uso | Servidor individual | Compartición de ficheros | Bases de datos, virtualización crítica |
6. ¿Qué tipo de almacenamiento accede a los datos a nivel de fichero a través de una red IP estándar?
7. Una empresa necesita compartir almacenamiento entre varios servidores de virtualización con el máximo rendimiento posible y usa Fibre Channel. ¿Qué solución es la más adecuada?
8. ¿Qué protocolo utiliza NAS para compartir ficheros con clientes Linux/Unix?
9. ¿Cuál es la principal diferencia entre DAS y SAN en términos de arquitectura?
10. En una arquitectura NAS, ¿a qué nivel del stack del cliente se realiza la redirección del acceso al almacenamiento?
PostgreSQL es un servidor de bases de datos relacionales y objetos, de software libre distribuido bajo licencia BSD desde 1996.
| Hito | Año | Descripción |
|---|---|---|
| POSTGRES | 1986 | Proyecto original en la Universidad de Berkeley (Michael Stonebraker) |
| Post-Ingres | — | Continuación del SGBD Ingres (de ahí el nombre) |
| Postgres95 | 1994 | Se añade intérprete SQL; código distribuido como Postgres95 |
| PostgreSQL | 1996 | SQL sustituye a PostQUEL; se renombra como PostgreSQL |
| Versiones 9.x | — | Versión principal indicada con dos cifras (ej: 9.6) |
| Versión 10+ | 2017+ | Nuevo esquema: un número para versión principal (10, 11, 12…) |
💡 PGDG: El grupo de publicación informal se llama PostgreSQL Developer Group. Tiene un "core team" y "committers" con acceso al repositorio GIT.
| Elemento | Límite |
|---|---|
| Tamaño de un campo | 1 GB |
| Tamaño de un registro | 1,6 TB |
| Tamaño de una tabla | 32 TB |
| Número máximo de columnas por tabla | 250 a 1.600 (según tamaño de bloque) |
| Puerto TCP por defecto | 5432 |
| Tamaño de bloque de datos por defecto | 8 KB |
| Tamaño de segmento de tabla por defecto | 1 GB |
| Tamaño de bloque WAL por defecto | 8 KB |
| Tamaño de archivo WAL por defecto | 16 MB |
# 1. Verificar la suma de control del archivo descargado
md5sum postgresql-10.0.tar.bz2
# 2. Descomprimir
tar xf postgresql-10.0.tar.bz2
# 3. Configurar (opciones principales)
./configure --prefix=/usr/local/pgsql \
--with-python --with-openssl \
--with-systemd --enable-debug \
--with-pgport=5432 # Puerto TCP (def: 5432)
# 4. Compilar e instalar
make world
sudo make install-world
# 5. Exportar rutas
export PATH=$PATH:/usr/local/pgsql/bin
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
# Añadir repositorio oficial de PostgreSQL
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
# Añadir la línea en /etc/apt/sources.list.d/pgdg.list
apt-get update
# Instalar
apt-get install postgresql-10
# Arrancar la instancia (Debian)
pg_ctlcluster 10 main start
# O con SystemD:
systemctl start postgresql@10-main
| Script | Función |
|---|---|
pg_lsclusters |
Lista instancias existentes con su configuración |
pg_createcluster |
Crea una nueva instancia (usa initdb internamente) |
pg_ctlcluster |
Controla instancias (start/stop/restart/reload/promote) |
pg_upgradecluster |
Actualiza una instancia a otra versión de PostgreSQL |
pg_dropcluster |
Elimina una instancia y todos sus archivos |
11. ¿Bajo qué licencia se distribuye PostgreSQL?
12. ¿Cuál es el puerto TCP por defecto de PostgreSQL?
13. ¿Cuál es el tamaño máximo de una tabla en PostgreSQL?
14. ¿Qué script de Debian permite listar todas las instancias PostgreSQL existentes en el sistema con su estado y configuración?
pg_ctlclusterpg_lsclusterspg_createclusterinitdb --listinitdbinitdb inicializa el grupo de bases de datos (también llamado cluster o instancia). Crea todos los directorios y archivos necesarios para arrancar el servidor.
# Ejemplo de inicialización completa
initdb -A trust -E UTF8 --locale=es_ES \
-D /var/lib/postgresql/10/data \
-X /pgxlog/10/wals
initdb| Opción | Descripción |
|---|---|
-D, --pgdata=DIR |
Ruta del directorio de datos (obligatorio) |
-A, --auth=METHOD |
Método de autenticación por defecto (trust, md5, ident) |
-X, --xlogdir=DIR |
Ubicación de los archivos WAL (no modificable después) |
-E, --encoding=ENC |
Juego de caracteres por defecto (UTF8, LATIN1, etc.) |
--locale=LOCALE |
Argumento regional (es_ES, en_US, etc.) |
-k, --data-checksums |
Activa sumas de control de datos (no activo por defecto) |
-U, --username=NAME |
Nombre del superusuario de la instancia |
-W, --pwprompt |
Solicita la contraseña del superusuario interactivamente |
⚠️ Datos críticos: Las opciones
-X(ubicación WAL) y-E(encoding) no se pueden cambiar una vez arrancada la instancia.
initdb| Directorio | Contenido |
|---|---|
base/ |
Todas las bases de datos (tablas e índices). Espacio de tablas por defecto |
global/ |
Tablas globales accesibles desde toda la instancia |
pg_wal/ |
Archivos de traza de transacciones (WAL) |
pg_xact/ |
Estado de las transacciones en curso |
pg_logical/ |
Datos para la descodificación lógica (replicación) |
pg_replslot/ |
Datos de los slots de replicación |
pg_tblspc/ |
Enlaces simbólicos a los espacios de tablas creados |
pg_stat/ |
Archivos permanentes de estadísticas |
pg_stat_tmp/ |
Archivos temporales de estadísticas |
initdb| Archivo | Descripción |
|---|---|
postgresql.conf |
Archivo principal de configuración del servidor |
postgresql.auto.conf |
Configuración escrita por ALTER SYSTEM. Se lee siempre en último lugar |
pg_hba.conf |
Archivo de autenticación (Host-Based Authentication) |
pg_ident.conf |
Archivo de correspondencias de usuarios |
PG_VERSION |
Archivo de texto con la versión principal de PostgreSQL |
pg_ctl# Arrancar el servidor
pg_ctl -D /var/lib/postgresql/10/data -l logfile start
# Detener el servidor
pg_ctl -D /var/lib/postgresql/10/data stop
# Reiniciar el servidor
pg_ctl -D /var/lib/postgresql/10/data restart
# Recargar configuración (sin reiniciar)
pg_ctl -D /var/lib/postgresql/10/data reload
💡
reloadaplica cambios enpostgresql.confypg_hba.confsin detener el servidor.
| Nombre | Descripción | Alias |
|---|---|---|
SQL_ASCII |
No especificado (tabla ASCII) | — |
UTF8 |
Unicode 8-bit (recomendado) | Unicode |
LATIN1 |
ISO 8859-1, Europa occidental | ISO88591 |
LATIN9 |
ISO 8859-15 (LATIN1 + Euro) | ISO885915 |
WIN1252 |
Windows CP1252 | — |
⚠️ El valor por defecto si no se especifica es
SQL_ASCII, que no es recomendable para aplicaciones. UsarUTF8.
15. ¿Qué archivo de configuración de PostgreSQL controla qué usuarios pueden conectarse, desde qué IP y con qué método de autenticación?
postgresql.confpostgresql.auto.confpg_hba.confpg_ident.conf16. ¿Qué directorio contiene el grueso de los datos de PostgreSQL (tablas e índices)?
global/pg_wal/pg_tblspc/base/17. ¿Cuál es el juego de caracteres que PostgreSQL usa por defecto si no se especifica ninguno en initdb?
UTF8LATIN1SQL_ASCIIWIN125218. ¿Qué opción de pg_ctl recarga los archivos de configuración sin detener el servidor PostgreSQL?
restartreloadrefreshupdatepg_hba.confPostgreSQL acepta conexiones mediante dos métodos:
| Método | Descripción | Disponibilidad |
|---|---|---|
| Socket Unix | Comunicación local mediante archivo de socket | Solo en el mismo host (Linux/Unix) |
| TCP/IP | Conexión de red estándar (puerto 5432 por defecto) | Local y remota; obligatorio en Windows |
💡 Una sesión abierta solo afecta a una única base de datos y a una única cuenta de usuario.
pg_hba.confCada línea del archivo es una regla de acceso con 4 o 5 campos:
tipo_conexión base_de_datos usuario origen_red método_autenticación
| Tipo | Descripción |
|---|---|
local |
Conexión por socket Unix |
host |
Conexión TCP/IP (con o sin SSL) |
hostssl |
Conexión TCP/IP con SSL obligatorio |
hostnossl |
Conexión TCP/IP sin SSL |
| Palabra clave | Significado |
|---|---|
all |
Cualquier base de datos / cualquier usuario |
sameuser |
La base de datos tiene el mismo nombre que el usuario |
samerole |
El usuario debe ser miembro del rol con el nombre de la BD |
| Método | Descripción | Seguridad |
|---|---|---|
trust |
Sin contraseña. Conexión siempre aceptada | ⚠️ Peligroso |
md5 |
Contraseña cifrada con MD5 | ✅ Preferido en versiones antiguas |
scram-sha-256 |
Intercambio seguro (desde v10). Estándar actual | ✅✅ Recomendado |
cert |
Certificado SSL (como SSH) | ✅ Muy seguro |
reject |
Rechaza siempre la conexión | — |
gssapi |
Kerberos | Entornos empresariales |
ldap |
Directorio LDAP | Entornos empresariales |
pg_hba.conf# Tipo BD Usuario Origen Método
local all postgres trust
host all postgres 192.168.0.0/24 md5
host clients clientes 192.168.1.2/32 trust
host clients clientes 0.0.0.0/0 md5
⚠️ El orden importa. Las reglas se leen de arriba a abajo. La primera regla que coincide se aplica. Las reglas más específicas deben ir primero.
psql| Opción | Descripción |
|---|---|
-h host |
Nombre o IP del servidor |
-p port |
Puerto TCP (por defecto: 5432) |
-U usuario |
Nombre del rol de conexión |
-d base_datos |
Nombre de la base de datos |
-W |
Solicita contraseña interactivamente |
-l |
Lista las bases de datos del servidor |
-f archivo.sql |
Ejecuta instrucciones desde un archivo |
-c 'consulta' |
Ejecuta una consulta directamente |
# Conexión básica por socket Unix
psql -U postgres -d postgres
# Conexión remota con contraseña
psql -h 192.168.1.10 -p 5432 -U postgres -d clientes
# URI de conexión
psql "postgresql://postgres@localhost:5432/postgres"
# Múltiples hosts (desde v10)
psql "host=server1,server2,server3 user=postgres dbname=postgres"
| Variable | Descripción |
|---|---|
PGDATABASE |
Nombre de la base de datos |
PGHOST / PGHOSTADDR |
Nombre o IP del servidor |
PGPORT |
Puerto TCP |
PGUSER |
Nombre del usuario |
PGPASSWORD |
Contraseña |
PGSERVICE |
Nombre del servicio en .pg_service.conf |
~/.pgpass# formato: nombrehost:puerto:database:usuario:contraseña
*:*:*:postgres:passpg
192.168.0.2:5432:*:postgres:pgpass_especifico
⚠️ El archivo debe tener permisos
600(chmod 600 ~/.pgpass). Si no, PostgreSQL lo ignora.
psql (backslash commands)| Comando | Función |
|---|---|
\l o \l+ |
Lista las bases de datos |
\c nombre_bd |
Cambia la conexión a otra base de datos |
\conninfo |
Muestra información de la conexión actual |
\du o \dg |
Lista todos los roles y grupos |
\d tabla |
Muestra la estructura de una tabla |
\dt |
Lista todas las tablas del esquema actual |
\di |
Lista los índices |
\ds |
Lista las secuencias |
\dn |
Lista los esquemas (namespaces) |
\db |
Lista los tablespaces |
\dp |
Lista los permisos |
\timing |
Activa/desactiva el tiempo de ejecución |
\i archivo.sql |
Ejecuta un archivo SQL |
\q |
Sale de psql |
\? |
Ayuda de comandos backslash |
\h COMANDO |
Ayuda del comando SQL |
19. En el archivo pg_hba.conf, ¿qué método de autenticación rechaza siempre la conexión sin importar usuario ni contraseña?
trustdenyrejectnone20. ¿Qué permisos debe tener el archivo ~/.pgpass para que PostgreSQL lo utilice?
64460075540021. ¿Qué comando interno de psql lista todos los roles y grupos de la instancia?
\l\dt\du\dn22. En pg_hba.conf, si una misma conexión coincide con varias reglas, ¿cuál se aplica?
reject)En PostgreSQL, usuario y grupo son el mismo concepto: un rol. Un rol es un objeto global válido para toda la instancia.
-- Crear un rol usuario (con LOGIN)
CREATE ROLE slardiere LOGIN PASSWORD 'password' CREATEDB;
-- Crear un grupo (sin LOGIN)
CREATE ROLE admingroup ROLE slardiere;
-- Crear usuario con herencia de permisos del grupo
CREATE ROLE slardiere LOGIN PASSWORD 'password' INHERIT IN ROLE admingroup;
-- Modificar un rol
ALTER ROLE slardiere NOLOGIN;
ALTER ROLE slardiere PASSWORD 'nuevapassword';
ALTER ROLE slardiere RENAME TO sebl;
-- Eliminar un rol
DROP ROLE slardiere;
CREATE ROLE| Opción | Descripción |
|---|---|
LOGIN |
Permite conectarse al servidor (convierte el rol en usuario) |
PASSWORD 'pass' |
Define la contraseña |
SUPERUSER |
Permisos ilimitados sobre toda la instancia |
CREATEDB |
Puede crear bases de datos |
CREATEROLE |
Puede crear otros roles |
INHERIT |
Hereda los permisos de los roles de los que es miembro |
REPLICATION |
Puede iniciar la replicación |
BYPASSRLS |
Ignora las reglas de seguridad a nivel de fila (RLS) |
CONNECTION LIMIT n |
Número máximo de conexiones simultáneas (-1 = sin límite) |
VALID UNTIL 'fecha' |
Caducidad de la contraseña |
IN ROLE grupo |
El nuevo rol es miembro de grupo |
GRANT y REVOKE-- Conceder permisos
GRANT SELECT, INSERT, UPDATE, DELETE
ON TABLE clientes, contactos, facturas
TO sebl;
-- Conceder con posibilidad de delegar
GRANT SELECT ON TABLE facturas TO sebl WITH GRANT OPTION;
-- Revocar permisos
REVOKE SELECT ON TABLE clientes FROM sebl;
-- Revocar en cascada (incluye permisos delegados)
REVOKE SELECT ON TABLE facturas FROM sebl CASCADE;
-- Permisos por defecto para futuros objetos
ALTER DEFAULT PRIVILEGES
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO sebl;
| Objeto | Permisos disponibles |
|---|---|
| Tabla | SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER, RULE, ALL |
| Columna | SELECT, INSERT, UPDATE |
| Base de datos | CREATE (crear esquemas), TEMPORARY/TEMP (tablas temporales) |
| Esquema | CREATE (crear tablas), USAGE (acceder a objetos) |
| Función | EXECUTE |
| Tablespace | CREATE (crear tablas e índices) |
| Lenguaje | USAGE |
💡
PUBLICcomo destinatario enGRANTaplica el permiso a todos los roles, incluidos los que se creen en el futuro.
Desde la versión 9.5, es posible controlar qué filas devuelve una consulta según el rol que la ejecuta.
-- Activar RLS en una tabla
ALTER TABLE prestaciones ENABLE ROW LEVEL SECURITY;
-- Crear una política de acceso
CREATE POLICY nombre ON tabla
[ AS { PERMISSIVE | RESTRICTIVE } ]
[ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]
[ TO { rol | PUBLIC | CURRENT_USER } ]
[ USING (expresion_filtro) ];
⚠️ Las reglas RLS no se aplican a los roles con
SUPERUSERoBYPASSRLS. No genera errores: simplemente no devuelve las filas no autorizadas.
23. ¿Qué opción de CREATE ROLE permite que un usuario se conecte al servidor?
CONNECTLOGINACCESSSUPERUSER24. Un rol tiene el permiso SELECT sobre la tabla facturas. El administrador ejecuta REVOKE SELECT ON TABLE facturas FROM rol_a CASCADE. ¿Qué ocurre con los permisos que rol_a había delegado a terceros con WITH GRANT OPTION?
CASCADESUPERUSERCASCADE no existe en REVOKE25. ¿Cuál de las siguientes afirmaciones sobre ALTER DEFAULT PRIVILEGES es correcta?
publicSUPERUSER para ejecutarse26. ¿Qué sentencia permite a un usuario adoptar temporalmente la identidad de un grupo del que es miembro para obtener sus permisos?
GRANT admingroup TO seblALTER ROLE sebl INHERITSET ROLE admingroupASSUME ROLE admingroup1 → c) El anfitrión (host) es el SO del ordenador físico donde se instala el programa de virtualización. El invitado (guest) es el SO que corre dentro de la máquina virtual. El hypervisor de tipo 1 no necesita SO anfitrión.
2 → b) Intel VT y AMD-V introducen un "anillo -1" para el hypervisor. Así, los SO virtualizados corren directamente en el anillo 0 sin necesidad de paravirtualización ni recompilación. La velocidad es prácticamente idéntica al SO real.
3 → b) VMware ESXi es un hypervisor de tipo 1: corre directamente sobre el hardware sin necesitar un SO anfitrión. Por eso es el más adecuado para servidores de virtualización en empresas.
4 → c) VMware vCenter no es un hypervisor sino una herramienta de administración centralizada de otras soluciones VMware. ESXi, Player y VirtualBox sí son hypervisores.
5 → d) La paravirtualización consiste en recompilar el SO invitado para que no use el anillo 0. XEN usa esta técnica para Linux y BSD. Las extensiones VT/AMD-V resuelven el problema de forma mucho más eficiente.
6 → c) NAS (Network Attached Storage) presenta el almacenamiento como un sistema de archivos accesible a través de red IP estándar, usando protocolos NFS (Linux) o CIFS/SMB (Windows). El acceso es a nivel de fichero.
7 → c) SAN con Fibre Channel es la solución diseñada específicamente para compartir almacenamiento de alto rendimiento entre múltiples servidores. FC proporciona la mayor velocidad y es el protocolo estándar en entornos de virtualización crítica.
8 → d) NFS (Network File System) es el protocolo que utiliza NAS para compartir ficheros con clientes Linux/Unix. Para clientes Windows se usa CIFS/SMB. Fibre Channel e iSCSI son protocolos de SAN (nivel de bloque).
9 → b) La diferencia fundamental es la arquitectura de conexión: DAS usa un bus SCSI local directamente conectado al servidor; SAN usa una red dedicada de alta velocidad (Fibre Channel o iSCSI). Ambos acceden a nivel de bloque.
10 → c) En arquitectura NAS, el stack del cliente incluye una capa I/O Redirector que intercepta las operaciones de fichero y las redirige a través de NFS o CIFS sobre TCP/IP hacia el servidor NAS. El cliente ve el sistema de archivos remoto como si fuera local.
11 → c) PostgreSQL se distribuye bajo licencia BSD desde 1996. Es una de las licencias más permisivas del software libre: permite usar, modificar y redistribuir el software, incluso en productos comerciales.
12 → c) El puerto TCP por defecto de PostgreSQL es 5432. Se puede cambiar en postgresql.conf (parámetro port). MySQL usa 3306, Oracle usa 1521.
13 → c) El tamaño máximo de una tabla en PostgreSQL es 32 TB. Un campo tiene un límite de 1 GB, y un registro de 1,6 TB. PostgreSQL no impone límite al tamaño total de la base de datos.
14 → b) pg_lsclusters lista todas las instancias PostgreSQL en un sistema Debian/Ubuntu, mostrando la versión, el nombre, el puerto TCP, el estado (online/down), el propietario, el directorio de datos y el archivo de logs.
15 → c) pg_hba.conf (Host-Based Authentication) es el archivo que controla las reglas de acceso: qué usuarios se pueden conectar, desde qué orígenes y con qué método de autenticación. postgresql.conf es la configuración general del servidor.
16 → d) El directorio base/ contiene el grueso de los datos: todas las bases de datos con sus tablas e índices. Es el espacio de tablas por defecto. pg_wal/ contiene solo los archivos de transacciones WAL.
17 → c) Si no se especifica ningún encoding en initdb, PostgreSQL usa SQL_ASCII por defecto. Este valor no interpreta caracteres superiores a 127 y no es adecuado para la mayoría de aplicaciones. Se recomienda usar UTF8.
18 → b) La opción reload de pg_ctl hace que PostgreSQL vuelva a leer los archivos de configuración (postgresql.conf y pg_hba.conf) sin detener el servidor. restart detiene y vuelve a arrancar el servidor.
19 → c) El método reject rechaza siempre el intento de conexión que coincide con esa regla. Es útil para bloquear explícitamente ciertas combinaciones usuario/IP. trust acepta sin contraseña; deny no es una palabra clave válida en PostgreSQL.
20 → b) El archivo ~/.pgpass debe tener permisos 600 (lectura y escritura solo para el propietario). Si tiene permisos más permisivos (por ejemplo 644), PostgreSQL lo ignora por razones de seguridad.
21 → c) \du (o también \dg) lista todos los roles (usuarios y grupos) de la instancia PostgreSQL. \l lista las bases de datos, \dt lista las tablas, \dn lista los esquemas.
22 → c) PostgreSQL aplica la primera regla que coincide con los parámetros de la conexión (tipo, base de datos, usuario, origen). Por eso las reglas más específicas deben estar antes que las generales en el archivo.
23 → b) La opción LOGIN es la que convierte un rol en una cuenta de usuario capaz de conectarse al servidor. Sin LOGIN, el rol existe como grupo pero no puede iniciar sesiones. SUPERUSER da privilegios ilimitados pero no implica LOGIN por sí solo.
24 → b) La cláusula CASCADE en REVOKE elimina también los permisos que el rol había delegado a terceros mediante WITH GRANT OPTION. Sin CASCADE, PostgreSQL generaría un error si el rol había delegado permisos.
25 → b) ALTER DEFAULT PRIVILEGES define los permisos que se asignarán automáticamente a los objetos que se creen en el futuro. No modifica los permisos de los objetos ya existentes, para los cuales hay que usar GRANT directamente.
26 → c) El comando SET ROLE admingroup permite al usuario adoptar temporalmente la identidad de un rol del que es miembro para obtener sus permisos. RESET ROLE o SET ROLE NONE devuelve al usuario a su identidad original.
| Concepto | Valor / Respuesta clave |
|---|---|
| Extensión de virtualización Intel | IVT (Intel Virtualization Technology) |
| Extensión de virtualización AMD | AMD-V |
| Hypervisor tipo 1 (sin SO anfitrión) | VMware ESXi, Xen, Hyper-V standalone |
| Hypervisor tipo 2 (sobre SO anfitrión) | VirtualBox, VMware Player, KVM |
| VM de proceso más conocida | JVM (Java Virtual Machine) |
| Herramienta para info del procesador (VT/AMD-V) | CPU-Z (cpuid.com) |
| KVM: versión de Kernel que lo incluye | ≥ 2.6.20 |
| KVM: administrador gráfico | Virt-Manager |
| KVM: hypervisor subyacente | Qemu |
| Xen: universidad de origen | Universidad de Cambridge |
| Xen: empresa que lo compró (2007) | Citrix (500 M$) |
| DAS: protocolo | SCSI (bus directo) |
| DAS: nivel de acceso | Bloque |
| NAS: protocolos | NFS (Linux) / CIFS-SMB (Windows) sobre TCP/IP |
| NAS: nivel de acceso | Fichero |
| SAN: protocolos | Fibre Channel / iSCSI |
| SAN: nivel de acceso | Bloque |
| PostgreSQL: licencia | BSD |
| PostgreSQL: año de creación | 1996 |
| PostgreSQL: universidad de origen | Berkeley, California |
| PostgreSQL: fundador | Michael Stonebraker |
| PostgreSQL: grupo de publicación | PGDG (PostgreSQL Developer Group) |
| Puerto TCP por defecto de PostgreSQL | 5432 |
| Tamaño máximo de tabla en PostgreSQL | 32 TB |
| Tamaño máximo de campo en PostgreSQL | 1 GB |
| Tamaño máximo de registro en PostgreSQL | 1,6 TB |
| Encoding por defecto de PostgreSQL | SQL_ASCII (recomendado: UTF8) |
| Comando de inicialización de instancia | initdb -D /ruta/data |
| Archivo de autenticación PostgreSQL | pg_hba.conf |
| Archivo de configuración principal PostgreSQL | postgresql.conf |
| Control del servidor PostgreSQL | pg_ctl start/stop/restart/reload |
| Directorio de datos principales | base/ |
| Directorio de archivos WAL | pg_wal/ |
Permisos requeridos para ~/.pgpass |
600 |
| Permiso que permite conectarse al servidor | LOGIN |
| Permisos ilimitados sobre la instancia | SUPERUSER |
| Comando para ver roles en psql | \du o \dg |
| Comando para ver bases de datos en psql | \l |
| Comando para ver estructura de tabla en psql | \d tabla |
| RLS: activar seguridad a nivel de fila | ALTER TABLE t ENABLE ROW LEVEL SECURITY |
| Scripts específicos Debian para PostgreSQL | pg_lsclusters, pg_ctlcluster, pg_createcluster |