[GENERAL] Triggers after a rule

2005-09-28 Thread Wijnand Wiersma
Hi list,

I am currently trying to give normal users some read access to some
tables in the database. I also need to give update access to one
column of one table.

I have the table contact, the user should not be able to read or
update anything in it, except for his own record. So I created the
view v_my_account. When the user selects * from it he only sees his
own record. That works great. I also made a rule:
CREATE RULE update_v_my_account AS ON UPDATE TO v_my_account
DO INSTEAD
UPDATE contact set pause=NEW.pause where username=USER;

This does not work since there are some triggers on the contact table
and the trigger function selects the contact table and I don't want to
give the user access to that.

I thought that when a rule is applied the triggers which are triggerd
would also have the same userid as the rule query, but I was wrong.

Does anyone know a nice workaround?

Wijnand
(I hope I was clear enough)

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [GENERAL] Triggers after a rule

2005-09-28 Thread Wijnand Wiersma
2005/9/28, Richard Huxton :
> Wijnand Wiersma wrote:
> > I thought that when a rule is applied the triggers which are triggerd
> > would also have the same userid as the rule query, but I was wrong.
>
> Can you show the (cut down) contents of your trigger? It's difficult to
> see what you mean. I can't think of any way a trigger can provide
> results to the user, so any selects within it should be safe enough.

The trigger function is very very long and touches tables the normal
user should not touch. I can't grant select, update and insert to the
users, there is only one user who has the rights to do that. Normal
users should work with the given views and those views are made so
that users only see information that is relevant for them.

database=> update v_my_account set pause='yes';
ERROR:  permission denied for relation contact
CONTEXT:  PL/pgSQL function "activate_contact" line 5 at select into variables

The rule update_v_my_account works and runs as the special user since
that user is owner of v_my_account. It is just strange that the
triggers run as my normal user.

Wijnand

---(end of broadcast)---
TIP 2: Don't 'kill -9' the postmaster


Re: [GENERAL] Triggers after a rule

2005-09-28 Thread Wijnand Wiersma
2005/9/28, Richard Huxton :
> The solution is to mark your trigger functions with the "SECURITY
> DEFINER" attribute and create them as a user who can access relation
> "contact".
> http://www.postgresql.org/docs/8.0/static/sql-createfunction.html

Damn, I really really missed that one :-(
Thank you very much Richard!

Wijnand

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org