• Dean Rasheed's avatar
    Use checkAsUser for selectivity estimator checks, if it's set. · a0905056
    Dean Rasheed authored
    In examine_variable() and examine_simple_variable(), when checking the
    user's table and column privileges to determine whether to grant
    access to the pg_statistic data, use checkAsUser for the privilege
    checks, if it's set. This will be the case if we're accessing the
    table via a view, to indicate that we should perform privilege checks
    as the view owner rather than the current user.
    
    This change makes this planner check consistent with the check in the
    executor, so the planner will be able to make use of statistics if the
    table is accessible via the view. This fixes a performance regression
    introduced by commit e2d4ef8d, which affects queries against
    non-security barrier views in the case where the user doesn't have
    privileges on the underlying table, but the view owner does.
    
    Note that it continues to provide the same safeguards controlling
    access to pg_statistic for direct table access (in which case
    checkAsUser won't be set) and for security barrier views, because of
    the nearby checks on rte->security_barrier and rte->securityQuals.
    
    Back-patch to all supported branches because e2d4ef8d was.
    
    Dean Rasheed, reviewed by Jonathan Katz and Stephen Frost.
    a0905056
privileges.out 68 KB