Обсуждение: revoke all from public ?
Hi,
I can't revoke things from 'public'. Do I misunderstand
something or is there a bug?:
henkvl=# create table pipo (field text);
CREATE
henkvl=# grant all on pipo to henkvl;
CHANGE
henkvl=# grant all on pipo to jack;
CHANGE
henkvl=# \z pipo
Access permissions for database "henkvl"
Relation | Access permissions
----------+-------------------------------------------------
pipo | {"=","postgres=arwR","henkvl=arwR","jack=arwR"}
(1 row)
henkvl=# revoke all on pipo from public;
CHANGE
henkvl=# \z pipo
Access permissions for database "henkvl"
Relation | Access permissions
----------+-------------------------------------------------
pipo | {"=","postgres=arwR","henkvl=arwR","jack=arwR"}
(1 row)
If I revoke from individual users there are no probs.
atlas:/root-# rpm -qf `which postgres`
postgresql-server-7.1.2-4PGDG
atlas:/root-# rpm -qf `which psql`
postgresql-7.1.2-4PGDG
Searching in the archives I found that Tom Lane fixed a prob like this
one year ago? But 7.1.2 is not that old...
Regards,
--
Henk van Lingen, Systems & Network Administrator (o- -+
Dept. of Computer Science, Utrecht University. /\ |
phone: +31-30-2535278 v_/_
http://henk.vanlingen.net/ http://www.tuxtown.net/netiquette/
Henk van Lingen <henkvl@cs.uu.nl> writes:
> I can't revoke things from 'public'. Do I misunderstand
> something or is there a bug?:
Looks fine to me. Public didn't have any privileges to begin with,
so "revoke all from public" is a no-op in your example.
regards, tom lane
On Mon, Nov 19, 2001 at 11:02:32AM -0500, Tom Lane wrote:
: Henk van Lingen <henkvl@cs.uu.nl> writes:
: > I can't revoke things from 'public'. Do I misunderstand
: > something or is there a bug?:
:
: Looks fine to me. Public didn't have any privileges to begin with,
: so "revoke all from public" is a no-op in your example.
Aha, i understand 'public' refers only to the ' "=" ' part.
Isn't ...../postgresql/doc/html/sql-revoke.html a bit misguiding
saying:
PUBLIC
Rescind the specified privilege(s) for all users.
Anyways, thanx, i'll look for another way to revoke all permissions.
--
Henk van Lingen, Systems & Network Administrator (o- -+
Dept. of Computer Science, Utrecht University. /\ |
phone: +31-30-2535278 v_/_
http://henk.vanlingen.net/ http://www.tuxtown.net/netiquette/
Henk van Lingen <henkvl@cs.uu.nl> writes:
> Isn't ...../postgresql/doc/html/sql-revoke.html a bit misguiding
> saying:
> PUBLIC
> Rescind the specified privilege(s) for all users.
You're right, that's easily misread. I've added some wording to try
to clarify:
<para>
<command>REVOKE</command> allows the creator of an object to revoke
previously granted permissions from one or more users or groups of users.
The key word <literal>PUBLIC</literal> refers to the implicitly defined
group of all users.
</para>
<para>
Note that any particular user will have the sum
of privileges granted directly to him, privileges granted to any group he
is presently a member of, and privileges granted to
<literal>PUBLIC</literal>. Thus, for example, revoking SELECT privilege
from <literal>PUBLIC</literal> does not necessarily mean that all users
have lost SELECT privilege on the object: those who have it granted
directly or via a group will still have it.
</para>
> Anyways, thanx, i'll look for another way to revoke all permissions.
I'm afraid you have to do it retail: if you GRANTed anything to user
joe, you have to REVOKE FROM joe. There's no easy shortcut.
Well ... hmm ... it would probably work to do
UPDATE pg_class SET relacl = NULL WHERE relname = 'mytable';
which should revert the permissions on mytable to the default state.
Pretty ugly though, and not guaranteed to work the same in future releases.
regards, tom lane