Add note about access permission checks by inherited TRUNCATE and LOCK TABLE.
authorFujii Masao <[email protected]>
Thu, 6 Feb 2020 15:33:11 +0000 (00:33 +0900)
committerFujii Masao <[email protected]>
Thu, 6 Feb 2020 15:45:38 +0000 (00:45 +0900)
Inherited queries perform access permission checks on the parent
table only. But there are two exceptions to this rule in v12 or before;
TRUNCATE and LOCK TABLE commands through a parent table check
the permissions on not only the parent table but also the children
tables. Previously these exceptions were not documented.

This commit adds the note about these exceptions, into the document.

Back-patch to v9.4. But we don't apply this commit to the master
because commit e6f1e560e4 already got rid of the exception about
inherited TRUNCATE and upcoming commit will do for the exception
about inherited LOCK TABLE.

Author: Amit Langote
Reviewed-by: Fujii Masao
Discussion: https://postgr.es/m/CA+HiwqHfTnMU6SUkyHxCmpHUKk7ERLHCR3vZVq19ZOQBjPBLmQ@mail.gmail.com

doc/src/sgml/ddl.sgml

index 8d2908c34d852fe6b7493c6d46b3726ec4eec130..ba1b0571edc607374c2408a8cdf6492434081f0a 100644 (file)
@@ -2323,7 +2323,11 @@ 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.  Two exceptions to this rule are
+   <command>TRUNCATE</command> and <command>LOCK TABLE</command>,
+   where permissions on the child tables are always checked,
+   whether they are processed directly or recursively via those commands
+   performed on the parent table.
   </para>
 
  <sect2 id="ddl-inherit-caveats">