From: | "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at>, "John R Pierce *EXTERN*" <pierce(at)hogranch(dot)com>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Only owners can ANALYZE tables...seems overly restrictive |
Date: | 2016-02-29 20:26:25 |
Message-ID: | CAKFQuwaV_MudBtwR9zpjkmBPbtHBR46DqFZgfLu80-cg3unpww@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Mon, Feb 29, 2016 at 11:50 AM, David G. Johnston <
david(dot)g(dot)johnston(at)gmail(dot)com> wrote:
> On Mon, Feb 29, 2016 at 10:39 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
>> "David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> writes:
>> > On Mon, Feb 29, 2016 at 9:27 AM, Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at>
>> > wrote:
>> >> See http://www.postgresql.org/docs/current/static/planner-stats.html
>> >> "The amount of information stored in pg_statistic by ANALYZE, in
>> >> particular the
>> >> maximum number of entries in the most_common_vals and histogram_bounds
>> >> arrays
>> >> for each column, can be set on a column-by-column basis using the
>> >> ALTER TABLE SET STATISTICS command, or globally by setting the
>> >> default_statistics_target configuration variable."
>>
>> > Being able to run ANALYZE on a table in no way implies that I should be
>> > allowed to run ALTER TABLE SET STATISTICS on the same.
>>
>> You're missing the point. If the table owner has *not* run ALTER TABLE
>> SET STATISTICS, which surely is the typical situation, then whoever runs
>> ANALYZE can control the volume of stats generated by setting
>> default_statistics_target locally in his session. Thus, if we allow
>> non-owners to run ANALYZE, they'd be able to mess things up by setting
>> the stats target either much lower or much higher than the table owner
>> expected. ("Much higher" would be bad in a different way than "much
>> lower", but still bad.)
>>
>
> Yes, this particular implementation detail escaped me at first. I've
> since posted new thoughts having taking this mis-feature into account.
>
>
>> I imagine this could be addressed by some rule about how if you don't
>> own the table then your default_statistics_target is overridden by
>> the global setting, but that would be a mess both conceptually and
>> implementation-wise.
>>
>
> It seems easy enough to simply disallow session-local changes to this
> GUC...but barring that this does weigh the decision toward having a GRANT
> ANALYZE on TABLE since the issue isn't running the ANALYZE but rather its
> interaction with SET default_statistics_target. An explicit permission
> allows the table and/or database to choose to provide a user this
> capability if desired without also requiring the user to become a
> full-blown owner of the table and thus able to make even bigger and more
> permanent changes - including altering the default_statistics_target for
> the table permanently.
>
>
Pondering further there is likely quite a bit more to the GUC dynamics
that make re-working them then that desirable.
But I'm also still not totally convinced that our level of prohibition buys
us much safety. I recognize how this specific combination could be made to
cause problems but my gut reaction is that anyone we'd give write access to
a table would implicitly have a sufficient enough level of trust to allow
them to do both SET and ANALYZE in the rare instance they felt doing so was
necessary - and likewise would trust them not to issue SET arbitrarily but
rather just use the more useful ANALYZE command.
We've basically prohibited ANALYZE because we cannot prohibit SETting the
complementary GUC - one which I agree ordinary users have no business
messing with.
Are there any security (data exposure, denial of service) protections that
this prohibition is also manifesting? I'm inclined to disallow the
non-argumented (i.e., database-wide) version of ANALYZE - in fact I'd
probably make it superuser-only - as a form of parental guidance.
David J.
From | Date | Subject | |
---|---|---|---|
Next Message | drum.lucas@gmail.com | 2016-02-29 21:56:08 | Function fixing - PostgreSQL 9.2 |
Previous Message | Geoff Winkless | 2016-02-29 20:10:26 | Re: multicolumn index and setting effective_cache_size using human-readable-numbers |