Re: Updates of SE-PostgreSQL 8.4devel patches (r1268) - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: Updates of SE-PostgreSQL 8.4devel patches (r1268)
Date
Msg-id 200812111439.mBBEdkA06096@momjian.us
Whole thread Raw
In response to Re: Updates of SE-PostgreSQL 8.4devel patches (r1268)  (KaiGai Kohei <kaigai@kaigai.gr.jp>)
Responses Re: Updates of SE-PostgreSQL 8.4devel patches (r1268)  (KaiGai Kohei <kaigai@kaigai.gr.jp>)
List pgsql-hackers
KaiGai Kohei wrote:
> Bruce Momjian wrote:
> > Bruce Momjian wrote:
> >> KaiGai Kohei wrote:
> >>>>>    CREATE TABLE t (
> >>>>>        a   int,
> >>>>>        b   text
> >>>>>    ) WITH (ROW_LEVEL_ACL=ON);
> > 
> > Let me outline the simplest API, assuming we are using table-level
> > granularity for the security columns.
> > 
> > CREATE TABLE would support
> > 
> >     WITH (ROWACL = TRUE/FALSE);
> 
>  > And then in postgresql.conf we would have:
>  >
>  >     default_with_rowacl
> 
> Yes, I agree it.
> 
> But SE-PostgreSQL does not need its table option to control
> its availability per table granuality due to its security model.
> 
> Database ACL is a kind of DAC. It allows resource owners to
> set up its access rights. In other hand, SE-PostgreSQL is an
> implementation of MAC. It does not allow owners to control its
> access rights. This is the role of centralized security policy,

It is fine if you require SECEXT to be on for SE-Linux, but the option
must be available for non-SE-Linux so you can load dumps from either
Postgres configuration, and /data is compatible with both versions.

> > When SE-Linux is enabled, CREATE TABLE would issue an error if SECEXT
> > was false.  I can't think of a clean way to guarantee that existing
> > tables have SECEXT though, which means we might need to have a missing
> > 'security_context' column mean default SE-Linux permissions.
> 
> SE-PostgreSQL stores its security context on the security field of
> HeapTupleHeader and set HEAP_HASSECURITY of t_infomask.
> The security system column is always available, so it does not make
> any matter. When no guest is available on PGACE, HEAP_HASSECURITY of
> t_infomask is not set, so security field is not allocated and NULL
> bitmask is not polluted.

If you make an SE-Linux dump with security fields, how will that be
loadable in a non-SE-Linux Postgres database?

We are also going to need ALTER TABLE to be able to add/remove these
columns from tables, like OIDs.

>  >> If we assume users set up Row-level ACLs for specific tables, per-table
>  >> option is meaningful for reduction of NULL-bitmap space in the tuple
>  >> without any NULL-values on general columns.
>  >
>  > Right.  I was hoping there was a way to have HEAP_HASSECACL control if
>  > the value is present or not.
>  >
>  > I sure wish others were adding ideas to this discussion.
> 
> I have a plan to add a new field (declared as "int2 relrowacl") into
> pg_class to show what column stores its Row-level ACLs.
> When we create a table with (ROWACL=TRUE), it implicitly add a column
> declared as "security_acl aclitem[]", and its attribute number is
> stored within the "pg_class.relrowacl". If it has positive value,
> tuples within the table can have its individual ACLs. No-ACL is
> represented via the NULL-bitmap. If it is zero, the table does not
> have the "security_acl" column, and the row-level controls are simply
> ignored.

I am confused why we would want this instead of the way we do oids.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Dmitry Turin
Date:
Subject: Re[2+]: COCOMO & Indians
Next
From: Heikki Linnakangas
Date:
Subject: Re: visibility maps