ALTER TABLE .. FORCE ROW LEVEL SECURITY
Stephen Frost <sfrost@snowman.net>
ALTER TABLE .. FORCE ROW LEVEL SECURITY To allow users to force RLS to always be applied, even for table owners, add ALTER TABLE .. FORCE ROW LEVEL SECURITY. row_security=off overrides FORCE ROW LEVEL SECURITY, to ensure pg_dump output is complete (by default). Also add SECURITY_NOFORCE_RLS context to avoid data corruption when ALTER TABLE .. FORCE ROW SECURITY is being used. The SECURITY_NOFORCE_RLS security context is used only during referential integrity checks and is only considered in check_enable_rls() after we have already checked that the current user is the owner of the relation (which should always be the case during referential integrity checks). Back-patch to 9.5 where RLS was added.
Files
| Path | Change | +/− |
|---|---|---|
| doc/src/sgml/catalogs.sgml | modified | +10 −0 |
| doc/src/sgml/ref/alter_table.sgml | modified | +17 −0 |
| src/backend/catalog/heap.c | modified | +1 −0 |
| src/backend/commands/tablecmds.c | modified | +40 −0 |
| src/backend/parser/gram.y | modified | +14 −0 |
| src/backend/utils/adt/ri_triggers.c | modified | +4 −2 |
| src/backend/utils/init/miscinit.c | modified | +17 −1 |
| src/backend/utils/misc/rls.c | modified | +39 −5 |
| src/bin/pg_dump/pg_dump.c | modified | +19 −1 |
| src/bin/pg_dump/pg_dump.h | modified | +1 −0 |
| src/bin/psql/describe.c | modified | +26 −18 |
| src/include/catalog/catversion.h | modified | +1 −1 |
| src/include/catalog/pg_class.h | modified | +37 −35 |
| src/include/miscadmin.h | modified | +2 −0 |
| src/include/nodes/parsenodes.h | modified | +2 −0 |
| src/test/modules/test_ddl_deparse/test_ddl_deparse.c | modified | +6 −0 |
| src/test/regress/expected/rowsecurity.out | modified | +156 −0 |
| src/test/regress/output/misc.source | modified | +2 −1 |
| src/test/regress/sql/rowsecurity.sql | modified | +143 −0 |