From: | Samuel Thoraval <samuel(dot)thoraval(at)librophyt(dot)com> |
---|---|
To: | Andrus Moor <eetasoft(at)online(dot)ee> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Hot to restrict access to subset of data |
Date: | 2005-07-19 14:35:19 |
Message-ID: | 42DD0FA7.5000102@librophyt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
I have been trying to use views to restrict access to a subset of data
as stated :
Using Andrus's example for user B with document in public schema :
REVOKE ALL FROM public.document;
CREATE SCHEMA b AUTHORIZATION b;
CREATE VIEW b.document AS SELECT * FROM public.document WHERE
DocumentType = 'Z';
GRANT SELECT ON b.document TO b;
This way when user B connects, with its search_path variable properly
set, he will see datas from view b.document instead of from table
public.document.
But let's say we also want user B being able to update VIEW b.document ?
Then we'd have to grant UPDATE privilege and define a RULE :
-- GRANT UPDATE ON b.document TO b; let's try without it
CREATE RULE document_b AS ON UPDATE TO b.document DO INSTEAD
UPDATE public.document set bla bla bla where bla bla bla...
I have been trying this example not executing the GRANT UPDATE statement
at first to check that user b doesn't have the right to update. The
problem is that even though B was not granted the update privilege, it
worked anyway. In other words, simply executing " GRANT SELECT ON
b.document TO b;" is sufficient for user b to be able to update the
view, and thus the public.document table for DocumentType = Z.
Anybody has an explanation to this ?
Sam
Andrus Moor a écrit :
>Greg,
>
>using views would be nice.
>
>I have also a add privilege which allows to add only new documents. I think
>that this requires writing triggers in Postgres.
>
>This seems to be a lot of work.
>I do'nt have enough knowledge to implement this in Postgres.
>
>So it seems to more reasonable to run my application as Postgres superuser
>and implement security in application.
>
>Andrus.
>
>"Gregory Youngblood" <gsyoungblood(at)mac(dot)com> wrote in message
>news:CB2AF562-2A4D-4A9C-BC2A-E55C9029FB56(at)mac(dot)com(dot)(dot)(dot)
>
>
>>I believe you can probably use views to accomplish this.
>>
>>You create a view that is populated based on their username. Then you
>>remove access to the actual table, and grant access to the view.
>>
>>When people look at the table, they will only see the data in the view
>>and will not have access to the other.
>>
>>Of course, this assumes they do not need to update the data. I've not
>>played around with rules to make a view allow updates. I believe it is
>>possible, I've just not done it yet. This also assumes you have data
>>somewhere that maps user names to document types.
>>
>>The postgresql docs should provide the syntax and additional details if
>>you want to try this. I have also found pgAdmin very useful to create
>>views and other schema related activities as well.
>>
>>Hope this helps,
>>Greg
>>
>>
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 4: Don't 'kill -9' the postmaster
>>
>>
>>
>
>
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Stephan Szabo | 2005-07-19 14:37:12 | Re: Changes to not deferred FK in 8.0.3 to 7.4? |
Previous Message | Richard Huxton | 2005-07-19 14:18:28 | Re: Old question - failed to find conversion function from |