Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

179
Views
Seguridad basada en filas con estrategia de usuarios de aplicaciones

Hola, tengo una pregunta sobre el enfoque que puedo tomar con respecto a la limitación de los datos a los que un usuario de la aplicación tiene acceso potencialmente usando la seguridad de nivel de fila en PostgreSQL 12.

En mi escenario, tengo un conjunto de tablas de informes donde cada tabla tiene una columna llamada site_id. Todas las filas que tienen el mismo site_id son comunes entre sí.

Por ejemplo:

 CREATE TABLE public.devices ( page_views int8 NOT NULL, agent_id int4 NOT NULL, site_id int4 NOT NULL, date_visit date NOT NULL, CONSTRAINT devices_pkey PRIMARY KEY (site_id, date_visit, agent_id))

Hay un conjunto separado de tablas que tienen que ver con los usuarios de la aplicación. Los usuarios de la aplicación tienen una relación con un conjunto de site_ids.

Entonces, el usuario 'bob' está relacionado con site_id (17, 18, 400, 122). Por lo tanto, cuando 'bob' inicia sesión en la herramienta de informes web y ejecuta una consulta, bob solo debería ver las filas que tienen 17, 18, 400 y 122 como su site_id. ¿Es esto algo que se puede implementar utilizando la seguridad de nivel de fila de PostgreSQL y se puede implementar sin tener que crear un segundo usuario en PostgreSQL que represente al usuario de la aplicación 'bob'? Limito lo que 'bob' ve ahora a través de la interfaz. Solo quiero saber si se puede implementar utilizando la seguridad de nivel de fila.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Todo lo que necesita es alguna forma en SQL para determinar quién es el usuario actual.

Entonces necesitas algún estado en la base de datos.

Podría usar un parámetro de marcador de posición:

 SET application.user = 'bob';

y prueba con

 current_setting('application.user')

o podría usar una tabla temporal con una sola entrada.

over 4 years ago · Santiago Trujillo Report

0

Laurenz, gracias por ponerme en el camino correcto. Esto es lo que he decidido hacer por ahora:

 create policy test_policy on devices using (site_id in ((select unnest (string_to_array(current_setting('application.siteids'), ',')::int[])))); set application.siteids = '244,681'; select * from devices;
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!