mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
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.
This commit is contained in:
@ -287,6 +287,7 @@ extern int trace_recovery(int trace_level);
|
||||
/* flags to be OR'd to form sec_context */
|
||||
#define SECURITY_LOCAL_USERID_CHANGE 0x0001
|
||||
#define SECURITY_RESTRICTED_OPERATION 0x0002
|
||||
#define SECURITY_NOFORCE_RLS 0x0004
|
||||
|
||||
extern char *DatabasePath;
|
||||
|
||||
@ -305,6 +306,7 @@ extern void GetUserIdAndSecContext(Oid *userid, int *sec_context);
|
||||
extern void SetUserIdAndSecContext(Oid userid, int sec_context);
|
||||
extern bool InLocalUserIdChange(void);
|
||||
extern bool InSecurityRestrictedOperation(void);
|
||||
extern bool InNoForceRLSOperation(void);
|
||||
extern void GetUserIdAndContext(Oid *userid, bool *sec_def_context);
|
||||
extern void SetUserIdAndContext(Oid userid, bool sec_def_context);
|
||||
extern void InitializeSessionUserId(const char *rolename, Oid useroid);
|
||||
|
Reference in New Issue
Block a user