Todos los términos del glosario

Seguridad a nivel de fila (RLS)

¿Qué es la seguridad a nivel de fila (RLS) en PostgreSQL?

La seguridad a nivel de fila permite que una tabla decida, fila por fila, qué filas puede ver o modificar cada rol, mediante políticas creadas con CREATE POLICY.

La seguridad a nivel de fila (RLS) restringe qué filas puede devolver o modificar una consulta, de forma independiente para cada rol. Para activarla en una tabla usas ALTER TABLE ... ENABLE ROW LEVEL SECURITY y luego agregas políticas con CREATE POLICY. La expresión USING de una política filtra las filas que un rol puede ver, y una expresión WITH CHECK decide qué filas nuevas o actualizadas se permiten.

Cuando RLS está activada y no se aplica ninguna política, PostgreSQL usa una política de denegación predeterminada: ninguna fila es visible ni puede modificarse. Los superusuarios y los roles con el atributo BYPASSRLS siempre omiten la seguridad de filas, y los dueños de la tabla normalmente también, salvo que la tabla esté configurada con FORCE ROW LEVEL SECURITY. Prueba tus políticas con el rol con el que realmente se conecta tu aplicación.

Ejemplo

El ejemplo activa RLS en una tabla, agrega una política que compara la columna owner con current_user y consulta la tabla como el rol alice. Solo se devuelve la fila de alice. La preparación se ejecuta como superusuario, que omite RLS, así que la consulta final cambia de rol primero.

CREATE TABLE notes (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  owner text NOT NULL,
  body text NOT NULL
);
INSERT INTO notes (owner, body) VALUES ('alice', 'hello'), ('bob', 'hi');

ALTER TABLE notes ENABLE ROW LEVEL SECURITY;
CREATE POLICY notes_owner ON notes USING (owner = current_user);

CREATE ROLE alice;
GRANT SELECT ON notes TO alice;

SET ROLE alice;
SELECT * FROM notes;
RESET ROLE;

SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.

Fuentes

Documentación oficial de PostgreSQL (en inglés).

Términos relacionados