Re: Grants not working on partitions - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Grants not working on partitions
Date
Msg-id af088eb6-92d7-4651-baef-c97fbf8172a9@aklaver.com
Whole thread Raw
In response to Re: Grants not working on partitions  (Lok P <loknath.73@gmail.com>)
List pgsql-general
On 9/28/24 08:56, Lok P wrote:
> 
> 
> On Sat, Sep 28, 2024 at 8:46 PM Adrian Klaver <adrian.klaver@aklaver.com 
> <mailto:adrian.klaver@aklaver.com>> wrote:
> 
>     On 9/28/24 04:02, Lok P wrote:
>      > Hi,
>      > While we are creating any new tables, we used to give SELECT
>     privilege
>      > on the newly created tables using the below command. But we are
>     seeing
>      > now , in case of partitioned tables even if we had given the
>     privileges
>      > in the same fashion, the user is not able to query specific
>     partitions
>      > but only the table. Commands like "select * from
>      > schema1.<partition_name> " are erroring out with the "insufficient
>      > privilege" error , even if the partition belongs to the same table.
>      >
>      > Grant SELECT ON <table_name> to <user_name>;
>      >
>      > Grant was seen as a one time command which needed while creating the
>      > table and then subsequent partition creation for that table was
>     handled
>      > by the pg_partman extension. But that extension is not creating or
>      > copying any grants on the table to the users. We were expecting ,
>     once
>      > the base table is given a grant , all the inherited partitions
>     will be
>      > automatically applied to those grants. but it seems it's not working
>      > that way. So is there any other way to handle this situation?
> 
> 
>     The docs are there for a reason:
> 
>     https://github.com/pgpartman/pg_partman/blob/master/doc/pg_partman.md#child-table-property-inheritance
<https://github.com/pgpartman/pg_partman/blob/master/doc/pg_partman.md#child-table-property-inheritance>
> 
>     "Privileges & ownership are NOT inherited by default. If enabled by
>     pg_partman, note that this inheritance is only at child table creation
>     and isn't automatically retroactive when changed (see
>     reapply_privileges()). Unless you need direct access to the child
>     tables, this should not be needed. You can set the inherit_privileges
>     option if this is needed (see config table information below)."
> 
> 
>     And:
> 
>     "reapply_privileges(
>           p_parent_table text
>     )
>     RETURNS void
> 
>           This function is used to reapply ownership & grants on all child
>     tables based on what the parent table has set.
>           Privileges that the parent table has will be granted to all child
>     tables and privileges that the parent does not have will be revoked
>     (with CASCADE).
>           Privileges that are checked for are SELECT, INSERT, UPDATE,
>     DELETE,
>     TRUNCATE, REFERENCES, & TRIGGER.
>           Be aware that for large partition sets, this can be a very long
>     running operation and is why it was made into a separate function to
>     run
>     independently. Only privileges that are different between the parent &
>     child are applied, but it still has to do system catalog lookups and
>     comparisons for every single child partition and all individual
>     privileges on each.
>           p_parent_table - parent table of the partition set. Must be
>     schema
>     qualified and match a parent table name already configured in
>     pg_partman.
>     "
> 
> 
> 
> Thank you. I was not aware about this function which copies the grants 
> from parent to child ,so we can give a call to this function at the end 
> of the pg_partman job call which is happening through the cron job. But 
> I see , the only issue is that this function only has one parameter 
> "p_parent_table" but nothing for "child_table" and that means it will 
> try to apply grants on all the childs/partitions which have been created 
> till today and may already be having the privileges already added in them.
> 
> And we have just ~60 partitions in most of the table so hope that will 
> not take longer but considering we create/purge one partition daily for 
> each partition table using the pg_partman, every time we give it a call, 
> it will try to apply/copy the grants on all the partitions(along with 
> the current day live partition), will it cause the existing running 
> queries on the live partitions to hard parse? or say will it cause any 
> locking effect when it will try to apply grant on the current/live 
> partitions , which must be inserted/updated/deleted data into or being 
> queries by the users?
> 


1) You seem to have missed the first part of the answer:

"Privileges & ownership are NOT inherited by default. If enabled by 
pg_partman, note that this inheritance is only at child table creation 
and isn't automatically retroactive when changed (see 
reapply_privileges()). Unless you need direct access to the child 
tables, this should not be needed. **You can set the 
inherit_privileges** option if this is needed (see config table 
information below)."

Read ** ...** part.

2) This is open source the code is available for you to see what is 
actually going on:

https://github.com/pgpartman/pg_partman/blob/master/sql/functions/reapply_privileges.sql

which in turn uses:

https://github.com/pgpartman/pg_partman/blob/master/sql/functions/apply_privileges.sql


3) This is something that is easily tested on you end.


-- 
Adrian Klaver
adrian.klaver@aklaver.com




pgsql-general by date:

Previous
From: Lok P
Date:
Subject: Re: Grants not working on partitions
Next
From: Justin
Date:
Subject: Re: Synchronize the dump with a logical slot with --snapshot