Search Postgresql Archives

Re: Best way to monitor, control, or rewrite data definition commands?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Erik,

Thanks for the advice. Unfortunately,
postgresql/src/camend/commands/variable.c contains the following remark:

                /*
                 * Disallow SET ROLE inside a security definer context.
We need to do
                 * this because when we exit the context, GUC won't be
notified,
                 * leaving things out of sync.  Note that this test is
arranged so
                 * that restoring a previously saved setting isn't
prevented.
                 *
                 * XXX it would be nice to allow this case in future,
with the
                 * behavior being that the SET ROLE's effects end when
the security
                 * definer context is exited.
                 */

It's the same situation with SET SESSION AUTHORIZATION. Anyone have a
guess on how difficult this is to fix?

Cheers,

--Ian Turner
 

> -----Original Message-----
> From: Erik Jones [mailto:ejones@xxxxxxxxxxxxxx] 
> Sent: Friday, May 15, 2009 6:19 PM
> To: Turner, Ian
> Cc: pgsql-general@xxxxxxxxxxxxxx
> Subject: Re:  Best way to monitor, control, or 
> rewrite data definition commands?
> 
> 
> On May 14, 2009, at 2:38 PM, Turner, Ian wrote:
> 
> > Thanks everyone for the many responses to this question. 
> Asynchronous
> > schema updates may be how we'll have to proceed, but we'd really  
> > like to
> > avoid that. Instead, I'm currently studying the possibility of a
> > my_create_table() function that accepts a CREATE TABLE command,  
> > executes
> > the command, and also does some extra tasks. Some of these 
> extra tasks
> > require elevated privileges, which can be accomplished by making the
> > function SECURITY DEFINER. But the CREATE TABLE command 
> should still  
> > be
> > executed as the calling user.
> 
> 
> > So, my next question is: Is there some way to drop one's privileges
> > within a transaction, or to execute a command using another user's
> > privileges?
> >
> > Thanks again for your thoughts.
> 
> That was going to be my suggestion.  Drop your user's rights 
> to create  
> tables directly and define a function that creates your 
> tables and set  
> up the rules as SECURITY INVOKER with a role that still has create  
> table privileges.  That way, when other users run the 
> function, it'll  
> run with the privileges of the user who created it.  No need 
> to switch  
> roles directly.
> 
> However, so you know, you can execute SET ROLE <rolename>; to change  
> to a role that your existing role has membership in (or any to any  
> role for superuser roles).
> 
> Erik Jones, Database Administrator
> Engine Yard
> Support, Scalability, Reliability
> 866.518.9273 x 260
> Location: US/Pacific
> IRC: mage2k
> 
> 
> 
> 
> 
> 

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux