2015-02-14 14:07 GMT+01:00 Berend Tober <bto...@broadstripe.net>:

> Saimon Lim wrote:
>
>> Thanks for your help
>>
>> I want to restrict some postgres users as much as possible and allow
>> them to execute a few my own stored procedures only.
>>
>
> Create the function that you want restrict access to in a separate
> 'private' schema to which usage is not granted.
>
> Create the functions you wish to allow access to in a schema to which the
> role is granted access to.
>
> You original question was different, i.e., you were asking about hiding
> your clever algorithms from inquisitive inspection. For that, similarly use
> as 'private' schema where you keep you super-secret stuff, and then provide
> a sanitized interface in the 'public' schema:
>
>
> CREATE OR REPLACE FUNCTION private.average(a float, b float)
>  RETURNS float
>  LANGUAGE sql
> AS $$
>         SELECT ($1 + $2)/2.;
> $$;
>
>
> CREATE OR REPLACE FUNCTION public.average(a float, b float)
> RETURNS float
>  LANGUAGE sql
> as $$
>         select private.average(a,b)
> $$
> security definer;
>
>
Unless I misunderstood something, this doesn't protect at all the function
source code. You can still get it by reading pg_proc.


-- 
Guillaume.
  http://blog.guillaume.lelarge.info
  http://www.dalibo.com

Reply via email to