Em 28 de julho de 2011 09:08, Carlos Madsen <[email protected]>escreveu:
> Olá pessoal, obrigado pela respotas, mas tentem executar essa SQL no banco
> de vocês:
>
> grant select on tabelaX to public;
>
> E depois a SQL:
>
> select has_table_privilege('usuarioX', 'tabelaX', 'select');
>
> Sendo que o usuarioX anteriormente não tinha grant de select na tabelaX,
> pelo que entendi ele herdou de public.
>
> Em seguinda:
>
> REVOKE ALL PRIVILEGES ON tabelaX FROM public;
>
> E finalmente:
>
> select has_table_privilege('usuarioX', 'tabelaX', 'select'); --perdeu a
> permissão.
>
> Pelo que entendi todas as roles herdam o grants do public, mas quando vou
> executar a query:
>
> select has_table_privilege('public', 'tabelaX', 'select');
>
> Dá um erro dizendo que a role public não existe.
>
Entendo seu drama. Mas a role 'public' não existe mesmo. Existe o esquema
'public'. Quando você dá permissão em algum objeto para 'public', você não
está dando permissão para um usuário e/ou grupo (a.k.a. role), mas sim a
todos os usuários e grupos existentes. Então, todos os usuários herdam as
permissões atribuidas à 'public' automaticamente.
Veja a definição em:
http://www.postgresql.org/docs/current/static/sql-grant.html
"The key word PUBLIC indicates that the privileges are to be granted to all
roles, including those that might be created later. PUBLIC can be thought of
as an implicitly defined group that always includes all roles. Any
particular role will have the sum of privileges granted directly to it,
privileges granted to any role it is presently a member of, and privileges
granted to PUBLIC".
--
Atenciosamente,
Fábio Telles Rodriguez
blog: http://www.midstorm.org/~telles/
e-mail / gtalk / MSN: [email protected]
Skype: fabio_telles
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral