Обсуждение: Schema security

Поиск
Список
Период
Сортировка

Schema security

От
Paul Lambert
Дата:
I have a schema for example called f65, and the public schema of course,
in a database.

I've created a user f65 to access only the f65 schema using the following:

CREATE ROLE f65 LOGIN
   ENCRYPTED PASSWORD 'md52a630d68054defeed4b4c27cb6413ece'
   NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;
REVOKE ALL ON SCHEMA public FROM public;
REVOKE ALL ON SCHEMA f65 FROM public;
GRANT ALL ON SCHEMA f65 TO f65;

Which gives the f65 user access to the schema, but they cannot access
any of the objects within it (i.e. permission denied when trying a
select from a table)

testdb=>  select * from f65.billing;
ERROR:  permission denied for relation billing

I would have thought giving the user all privileges on a schema would by
default add them to all objects within it, but clearly not. Do I need to
explicitly go through every object within the schema and grant that user
access to them or is there an easier way of doing it? Something like a
"GRANT CASCADE" option?

Cheers,
P.

--
Paul Lambert
Database Administrator
AutoLedgers


Re: Schema security

От
"Rodrigo De León"
Дата:
On 12/12/07, Paul Lambert <paul.lambert@reynolds.com.au> wrote:
> I would have thought giving the user all privileges on a schema would by
> default add them to all objects within it, but clearly not. Do I need to
> explicitly go through every object within the schema and grant that user
> access to them or is there an easier way of doing it? Something like a
> "GRANT CASCADE" option?

You could use pgAdmin's Grant Wizard.

Re: Schema security

От
Paul Lambert
Дата:
Rodrigo De León wrote:
> You could use pgAdmin's Grant Wizard.

That doesn't help in scripting...

--
Paul Lambert
Database Administrator
AutoLedgers


Re: Schema security

От
Tom Lane
Дата:
Paul Lambert <paul.lambert@reynolds.com.au> writes:
> I would have thought giving the user all privileges on a schema would by
> default add them to all objects within it,

Why would you think that?

The analogy to think about is that usage privilege on a schema is
comparable to read access on a directory.  That doesn't necessarily give
you access to any single file in the directory --- but lack of it does
ensure you cannot get to those files.

            regards, tom lane

Re: Schema security

От
Paul Lambert
Дата:
Tom Lane wrote:
> Paul Lambert <paul.lambert@reynolds.com.au> writes:
>> I would have thought giving the user all privileges on a schema would by
>> default add them to all objects within it,
>
> Why would you think that?
>
> The analogy to think about is that usage privilege on a schema is
> comparable to read access on a directory.  That doesn't necessarily give
> you access to any single file in the directory --- but lack of it does
> ensure you cannot get to those files.
>
>             regards, tom lane
>
>

Point taken and yes, I would agree that default behavior should be to
not give priviledges to anything other than the explicitly defined
object - but would it not be a good idea to provide some sort of
cascade/recurse option to granting/revoking privileges so that doing so
on a container object results in the priviledges being propogated down
the line for the cases where such is desired?

Taking your example of file permissions - although it is not default
behavior, it is possible to recursively apply a priviledge change to a
directory onto files/subdirectories within it. Certainly it can be done
on OpenVMS and Windows that I work with primarily and I'm 99% sure it
can be done on *ix systems too.

I.e.
GRANT ALL ON SCHEMA <blah> TO <role> CASCADE;
NOTICE: GRANT ALL cascades to table "billings"
NOTICE: GRANT ALL cascades to table "customers"
NOTICE: GRANT ALL cascades to function "calculate_daily_balance()"
etc...

Much the same way that truncate or drop and so forth can have a cascade
option to propogate down to dependant objects.

--
Paul Lambert
Database Administrator
AutoLedgers

Re: Schema security

От
Alvaro Herrera
Дата:
Paul Lambert wrote:

> Taking your example of file permissions - although it is not default
> behavior, it is possible to recursively apply a priviledge change to a
> directory onto files/subdirectories within it. Certainly it can be done on
> OpenVMS and Windows that I work with primarily and I'm 99% sure it can be
> done on *ix systems too.
>
> I.e.
> GRANT ALL ON SCHEMA <blah> TO <role> CASCADE;
> NOTICE: GRANT ALL cascades to table "billings"
> NOTICE: GRANT ALL cascades to table "customers"
> NOTICE: GRANT ALL cascades to function "calculate_daily_balance()"
> etc...

Yes, it can be done at least with GNU chmod by using chmod -R.

The problem is that it doesn't work too well for schemas -> tables,
because the set of acceptable privileges is completely different.  So
the only case that would work is GRANT ALL.  Perhaps what could work is
to be able to specify wildcards in GRANT, for example

GRANT SELECT, INSERT ON TABLE schema.* TO <role>

The problem with this idea is what happens if you create a new table in
that schema?  Is the role given access to that table?  (The other
problem is whether this new command conforms to the SQL standard, or is
it in conflict with it.)

--
Alvaro Herrera                 http://www.amazon.com/gp/registry/CTMLCN8V17R4
"Estoy de acuerdo contigo en que la verdad absoluta no existe...
El problema es que la mentira sí existe y tu estás mintiendo" (G. Lama)

Re: Schema security

От
"Joshua D. Drake"
Дата:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thu, 13 Dec 2007 14:55:53 +0900
Paul Lambert <paul.lambert@reynolds.com.au> wrote:
> > The analogy to think about is that usage privilege on a schema is
> > comparable to read access on a directory.  That doesn't necessarily
> > give you access to any single file in the directory --- but lack of
> > it does ensure you cannot get to those files.
> > 
> >             regards, tom lane

> Point taken and yes, I would agree that default behavior should be to 
> not give priviledges to anything other than the explicitly defined 
> object - but would it not be a good idea to provide some sort of 
> cascade/recurse option to granting/revoking privileges so that doing
> so on a container object results in the priviledges being propogated
> down the line for the cases where such is desired?

Yes and it has been oft requested. However :), nobody has coded a patch
or submitted a proposal on how it would be done in a maintainable
manner.

> 
> Taking your example of file permissions - although it is not default 
> behavior, it is possible to recursively apply a priviledge change to
> a directory onto files/subdirectories within it. Certainly it can be
> done on OpenVMS and Windows that I work with primarily and I'm 99%
> sure it can be done on *ix systems too.

Yes *ix can do it to.

Sincerely,

Joshua D. Drake 


- -- 
The PostgreSQL Company: Since 1997, http://www.commandprompt.com/ 
Sales/Support: +1.503.667.4564   24x7/Emergency: +1.800.492.2240
Donate to the PostgreSQL Project: http://www.postgresql.org/about/donate
SELECT 'Training', 'Consulting' FROM vendor WHERE name = 'CMD'


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFHYX60ATb/zqfZUUQRAkK1AKCY8i5bHTUChaUp2LcovnSdgrwq+wCdHlCW
TdBpE7HUUVyr2OmzSnNQUKw=
=Ci4R
-----END PGP SIGNATURE-----