On Wed, Oct 20, 2021 at 8:59 AM Anna Akenteva <akenteva.an...@gmail.com>
wrote:

> Hi all,
>
> I have been wondering about some things related to schema privileges:
>
> 1) Why do visibility rules apply to the \d command, but not to system
> tables? What is the purpose of hiding stuff from \d output while users
> can get the same info another way?
>

IMO the intended usage for \d is to help people write queries.  It seems
reasonable to only show those things that would be resolved to if included
in such a query.  Its a convenience thing, not a security thing.


> 2) What is the reasoning behind separating schema privileges
> specifically into CREATE and USAGE? And is it something that may be
> changed in PG in the future?
>

Well, because "it is defined this way in the SQL Standard" seems to apply
here (at least, the grant command compatibility notes doesn't indicate we
are non-compliant here).


> The current logic allows a situation where after creating a table, a
> user is not able to do anything with it despite being the owner. This
> can be confusing, and I can't really imagine a scenario where it would
> be useful from a security standpoint.
>

Yes, granting create but not usage isn't all that useful.  But granting
usage without create is.  That is only possible if they are separate
grants.  I suppose create could imply usage, but that just isn't how it
works, and isn't going to be changed.

>
> Alternative approaches could be:
> - Separating schema privileges into more categories, such as CREATE,
> ALTER, DROP, SELECT, UPDATE, INSERT etc, [...]

Then it allows more granular control which seems useful for security.


So, kinda like default privileges but done at the schema, not
database/dba-role, scope.  I'd rather there be better tools for managing
permissions but still have them applied at the individual object level.
Adding a layer of indirection takes an already complicated model and just
complicates it further.  It doesn't seem like a development and maintenance
burden that the core project would benefit from taking on.


> - To avoid many categories, only have USAGE to fully allow or fully
> prohibit someone to do stuff in the schema. Then it at least prevents
> the weird situation where a user can create an object but can't do
> anything with it.
>
>
This doesn't seem like a problem that it is worth spending time avoiding.

Reply via email to