perseas / Pyrseas

Provides utilities for Postgres database schema versioning.
https://perseas.github.io/
BSD 3-Clause "New" or "Revised" License
395 stars 67 forks source link

Is there any support for row level security? #211

Open pkit opened 4 years ago

pkit commented 4 years ago

It seems like it is ignored...

jmafc commented 4 years ago

Indeed. We never looked at it and AFAICR nobody brought it up until now.

rattrayalex commented 3 years ago

This would be really great to have for people who are interested in using a "Postgres-first" style of development, for example with postgraphile

EDIT: I might be interested in implementing this as a first contribution if a contributor thinks that might be a good idea / would be willing to point me in the right direction

jmafc commented 3 years ago

In order to start adding support for row level security, you could do somewhat as follows:

  1. create a table with some row level security feature.
  2. examine the output of dbtoyaml for that table and compare it to the output of pg_dump to identify what's missing in the former.
  3. research what PG catalogs hold the data that is missing, e.g., pg_seclabel.
  4. edit code in pyrseas/dbobject, e.g., column.py to fetch (query static methods) the needed data into the internal structures and map it for YAML output (to_map methods). Or if you prefer a TDD route, first write a test for the desired output (e.g., in tests/dbobject/test_column.py).
  5. think about the SQL that would need to be generated by yamltodb when it found the attributes added in step 4 in an input YAML and no corresponding attributes in a target database catalogs (both of these represented in the Pyrseas internal structures).
  6. create test and/or code to generate the SQL.
  7. rinse and repeat for other row level security features.

Hope this helps.