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

173
Views
Seguridad de nivel de fila de PostgreSQL que involucra una clave externa con otra tabla

Me pregunto si lo siguiente es posible en PostgreSQL usando RLS (o cualquier otro mecanismo). Quiero que un usuario pueda obtener ciertas filas de una tabla si su identificación coincide con una columna en otra tabla.

Por ejemplo, tenemos las siguientes tablas:

tabla "usuario": columnas: id, nombre

 | id | name | | --- | --- | | 1 | one | | 2 | two | | 3 | three| | 4 | four |

tabla "inquilino": columnas: id, nombre

 | id | name | | --- | --- | | 1 | t1 | | 2 | t2 |

tabla "usuario_inquilino": columnas: id_usuario, id_inquilino

 | user_id | tenant_id| | --- | --- | | 1 | t1 | | 2 | t2 | | 3 | t1 | | 4 | t2 |

Ahora solo quiero usuarios que tengan el mismo tent_id.

producción:

 | id | name | | --- | --- | | 1 | one | | 3 | three|

Para lograr esto, necesito crear una política como esta:

 CREATE POLICY tenant_policy ON "user" USING (tenant_id = current_setting('my_user.current_tenant')::uuid);

pero con la política anterior no funciona porque obtengo todos los usuarios.

Nota: la tabla de usuarios y arrendatarios tiene una relación de muchos a muchos.

PD Sé que podemos hacer esto mediante la unión o alguna otra condición. Pero quiero lograr el resultado anterior usando PostgreSQL usando RLS (seguridad de nivel de fila)

¡¡Gracias por adelantado!!

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Si la seguridad de nivel de fila no funciona, es posible que se deba a una de las siguientes situaciones:

  • no habilitó la seguridad de nivel de fila:

     ALTER TABLE "user" ENABLE ROW LEVEL SECURITY;
  • el usuario es dueño de la tabla

    Puede habilitar la seguridad de nivel de fila para el propietario con

     ALTER TABLE "user" FORCE ROW LEVEL SECURITY;
  • usted es un superusuario, que siempre está exento de RLS

  • eres un usuario define con BYPASSRLS

  • el parámetro row_security está off

Aparte de eso, probablemente tendrá que unirse a user_tenant en su política:

 CREATE POLICY tenant_policy ON "user" USING ( EXISTS(SELECT 1 FROM user_tenant AS ut WHERE ut.user_id = "user".id AND ut.tenant_id = current_setting('my_user.current_tenant')::uuid ) );
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!