On Fri, Jan 31, 2020 at 9:39 PM Fujii Masao <masao.fu...@oss.nttdata.com> wrote: > On 2020/01/31 13:38, Amit Langote wrote: > > On Fri, Jan 31, 2020 at 1:28 AM Fujii Masao <masao.fu...@oss.nttdata.com> > > wrote: > >> Fair enough. I finally did back-patch because the behavior is clearly > >> documented and I failed to hear the opinions to object the back-patch. > >> But I should have heard and discussed such risks more. > >> > >> I'm OK to revert all those back-patch. Instead, probably the document > >> should be updated in old branches. > > > > I could find only this paragraph in the section on inheritance that > > talks about how access permissions work: > > > > 9.4: > > > > "Note how table access permissions are handled. Querying a parent > > table can automatically access data in child tables without further > > access privilege checking. This preserves the appearance that the data > > is (also) in the parent table. Accessing the child tables directly is, > > however, not automatically allowed and would require further > > privileges to be granted." > > > > 9.5-12: > > > > "Inherited queries perform access permission checks on the parent > > table only. Thus, for example, granting UPDATE permission on the > > cities table implies permission to update rows in the capitals table > > as well, when they are accessed through cities. This preserves the > > appearance that the data is (also) in the parent table. But the > > capitals table could not be updated directly without an additional > > grant. In a similar way, the parent table's row security policies (see > > Section 5.7) are applied to rows coming from child tables during an > > inherited query. A child table's policies, if any, are applied only > > when it is the table explicitly named in the query; and in that case, > > any policies attached to its parent(s) are ignored." > > > > Do you mean that the TRUNCATE exception should be noted here? > > Yes, that's what I was thinking.
Okay. How about the attached? Maybe, we should also note the LOCK TABLE exception? Regards, Amit
diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 8d2908c34d..d274d048ec 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -2323,7 +2323,10 @@ VALUES ('New York', NULL, NULL, 'NY'); access privilege checking. This preserves the appearance that the data is (also) in the parent table. Accessing the child tables directly is, however, not automatically allowed and would require - further privileges to be granted. + further privileges to be granted. One exception to this rule is + <command>TRUNCATE</command> command, where permissions on the child tables + are always checked, whether they are truncated directly or recursively via + <command>TRUNCATE</command> performed on the parent table. </para> <sect2 id="ddl-inherit-caveats">
diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 6ab37e7354..cf7b4fd891 100644 --- a/doc/src/sgml/ddl.sgml +++ b/doc/src/sgml/ddl.sgml @@ -2762,7 +2762,10 @@ VALUES ('Albany', NULL, NULL, 'NY'); rows coming from child tables during an inherited query. A child table's policies, if any, are applied only when it is the table explicitly named in the query; and in that case, any policies attached to its parent(s) are - ignored. + ignored. One exception to this rule is <command>TRUNCATE</command> command, + where permissions on the child tables are always checked, whether they are + truncated directly or recursively via <command>TRUNCATE</command> performed + on the parent table. </para> <para>