Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1boc0U-00008u-AE for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Sep 2016 19:56:06 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1boc0T-0004HT-TG for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Sep 2016 19:56:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1boc0S-0004Gt-KJ for pgsql-hackers@postgresql.org; Mon, 26 Sep 2016 19:56:04 +0000 Received: from smtprelay0029.b.hostedemail.com ([64.98.42.29] helo=smtprelay.b.hostedemail.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1boc0O-0006ON-2c for pgsql-hackers@postgresql.org; Mon, 26 Sep 2016 19:56:03 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay04.b.hostedemail.com (Postfix) with ESMTP id 940EB7B868; Mon, 26 Sep 2016 19:55:57 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 50,0,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::::::::::,RULES_HIT:41:69:355:379:599:960:967:973:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1437:1515:1516:1518:1519:1534:1543:1593:1594:1595:1596:1711:1712:1730:1747:1777:1792:2393:2525:2560:2563:2682:2685:2692:2693:2828:2859:2895:2901:2910:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3355:3865:3866:3867:3868:3870:3871:3872:3873:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4321:4362:4605:5007:6117:6120:6261:7875:7901:7903:8526:8660:8957:9025:9121:10004:10400:10848:11026:11232:11657:11658:11914:12043:12296:12346:12438:12555:12679:13148:13230:13439:13851:13852:13853:13894:13895:14093:14097:14721:21063:21080:21324:21434:21450:21451:30029:30051:30054:30070,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:1,LUA_SUMMARY:none X-HE-Tag: man20_6e21574c9ef3e X-Filterd-Recvd-Size: 4758 Received: from alvin.alvh.no-ip.org (unknown [216.155.90.98]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf04.b.hostedemail.com (Postfix) with ESMTPA; Mon, 26 Sep 2016 19:55:56 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 8C48C640; Mon, 26 Sep 2016 16:55:54 -0300 (CLST) Date: Mon, 26 Sep 2016 16:55:54 -0300 From: Alvaro Herrera To: Stephen Frost Cc: Jeevan Chalke , Robert Haas , Tom Lane , Thom Brown , "pgsql-hackers@postgresql.org" Subject: Re: Add support for restrictive RLS policies Message-ID: <20160926195554.GA176476@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20160926193725.GJ5148@tamriel.snowman.net> User-Agent: Mutt/1.5.23 (2014-03-12) X-Pg-Spam-Score: -0.4 (/) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org Stephen Frost wrote: Stephen, the typo "awseome" in the tests is a bit distracting. Can you please fix it? > Updated patch changes to using IDENT and an strcmp() (similar to > AlterOptRoleElem and vacuum_option_elem) to check the results at parse-time, > and then throwing a more specific error if an unexpected value is found > (instead of just 'syntax error'). This avoids adding any keywords. Thanks. > diff --git a/doc/src/sgml/ref/create_policy.sgml b/doc/src/sgml/ref/create_policy.sgml > index 89d2787..d930052 100644 > --- a/doc/src/sgml/ref/create_policy.sgml > +++ b/doc/src/sgml/ref/create_policy.sgml > @@ -22,6 +22,7 @@ PostgreSQL documentation > > > CREATE POLICY name ON table_name > + [ AS ( PERMISSIVE | RESTRICTIVE ) ] I think you should use braces here, not parens: [ AS { PERMISSIVE | RESTRICTIVE } ] > > + permissive > + > + > + If the policy is a "permissive" or "restrictive" policy. Permissive > + policies are the default and always add visibillity- they ar "OR"d > + together to allow the user access to all rows through any of the > + permissive policies they have access to. Alternativly, a policy can > + instead by "restrictive", meaning that the policy will be "AND"d > + with other restrictive policies and with the result of all of the > + permissive policies on the table. > + > + > + I don't think this paragraph is right -- you should call out each of the values PERMISSIVE and RESTRICTIVE (in upper case) instead. Also note typos "Alternativly" and "visibillity". I dislike the "AND"d and "OR"d spelling of those terms. Currently they only appear in comments within rowsecurity.c (of your authorship too, I imagine). I think it'd be better to find actual words for those actions. > diff --git a/src/include/catalog/pg_policy.h b/src/include/catalog/pg_policy.h > index d73e9c2..30dc367 100644 > --- a/src/include/catalog/pg_policy.h > +++ b/src/include/catalog/pg_policy.h > @@ -23,6 +23,7 @@ CATALOG(pg_policy,3256) > NameData polname; /* Policy name. */ > Oid polrelid; /* Oid of the relation with policy. */ > char polcmd; /* One of ACL_*_CHR, or '*' for all */ > + bool polpermissive; /* restrictive or permissive policy */ > > #ifdef CATALOG_VARLEN > Oid polroles[1]; /* Roles associated with policy, not-NULL */ > @@ -42,12 +43,13 @@ typedef FormData_pg_policy *Form_pg_policy; > * compiler constants for pg_policy > * ---------------- > */ > -#define Natts_pg_policy 6 > -#define Anum_pg_policy_polname 1 > -#define Anum_pg_policy_polrelid 2 > -#define Anum_pg_policy_polcmd 3 > -#define Anum_pg_policy_polroles 4 > -#define Anum_pg_policy_polqual 5 > -#define Anum_pg_policy_polwithcheck 6 > +#define Natts_pg_policy 6 > +#define Anum_pg_policy_polname 1 > +#define Anum_pg_policy_polrelid 2 > +#define Anum_pg_policy_polcmd 3 > +#define Anum_pg_policy_polpermissive 4 > +#define Anum_pg_policy_polroles 5 > +#define Anum_pg_policy_polqual 6 > +#define Anum_pg_policy_polwithcheck 7 I don't understand this part. Didn't you say previously that we already had this capability in 9.5 and you were only exposing it over SQL? If that is true, how come you need to add a new column to this catalog? -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers