@@ -422,69 +422,85 @@ UPDATE t1 SET x = 2, y = md5sum(y) WHERE z = 100;
422422 addition or deletion of name entries within a particular schema.
423423 </para>
424424 <para>
425- When a <literal>CREATE</> command is executed, <literal>create</> will
426- be checked on the object being constructed for each object types.
427- A default security label will be assigned to the new database object,
428- and the <literal>create</> permission will be checked on the pair
429- of security label of the client and the new object itself.
430- We consider <xref linkend="sql-createtable"> to construct a table and
431- underlying columns at the same time, so it requires the users to have
432- permission to create both the table and its columns.
433- </para>
434- <para>
435- A few additional checks are applied depending on object types.
436- On <xref linkend="sql-createdatabase">, <literal>getattr</> permission
437- will be checked on the source or template database of the new database,
438- not only <literal>create</> on the new database.
439- On creation of objects within a particular schema (tables, views,
440- sequences and procedures), <literal>add_name</> will be also checked
441- on the schema, not only <literal>create</> on the new object itself.
442- On <xref linkend="sql-createfunction">, <literal>install</> permission
443- will be checked if <literal>leakproof</> attribute was given, not only
444- <literal>create</> on the new function. This permission will be also
445- checked when user tries to turn on <literal>leakproof</> attribute
446- using <xref linkend="sql-alterfunction"> command, with
447- <literal>setattr</> permission on the function being altered.
425+ Creating a new database object requires <literal>create</> permission.
426+ <productname>SELinux</> will grant or deny this permission based on the
427+ client's security label and the proposed security label for the new
428+ object. In some cases, additional privileges are required:
448429 </para>
449430
431+ <itemizedlist>
432+ <listitem>
433+ <para>
434+ <xref linkend="sql-createdatabase"> additionally requires
435+ <literal>getattr</> permission for the source or template database.
436+ </para>
437+ </listitem>
438+ <listitem>
439+ <para>
440+ Creating a schema object additionally requires <literal>add_name</>
441+ permission on the parent schema.
442+ </para>
443+ </listitem>
444+ <listitem>
445+ <para>
446+ Creating a table additionally requires permission to create each
447+ individual table column, just as if each table column were a
448+ separate top-level object.
449+ </para>
450+ </listitem>
451+ <listitem>
452+ <para>
453+ Creating a function marked as <literal>LEAKPROOF</> additionally
454+ requires <literal>install</> permission. (This permission is also
455+ checked when <literal>LEAKPROOF</> is set for an existing function.)
456+ </para>
457+ </listitem>
458+ </itemizedlist>
459+
450460 <para>
451461 When <literal>DROP</> command is executed, <literal>drop</> will be
452- checked on the object being removed for each object types. Permissions
453- will be also checked for objects dropped indirectly via <literal>CASCADE</>.
454- Deletion of objects contained within a particular schema (tables, views,
455- sequences and procedures) additionally requires
456- <literal>remove_name</> on the schema.
462+ checked on the object being removed. Permissions will be also checked for
463+ objects dropped indirectly via <literal>CASCADE</>. Deletion of objects
464+ contained within a particular schema (tables, views, sequences and
465+ procedures) additionally requires <literal>remove_name</> on the schema.
457466 </para>
458467
459468 <para>
460469 When <literal>ALTER</> command is executed, <literal>setattr</> will be
461- checked on the object being modified for each object types.
462- In addition, <literal>remove_name</> and <literal>add_name</>
463- will be checked on the old and new schemas, respectively, when an
464- object is moved to a new schema.
465- For certain object types, additional checks are performed.
470+ checked on the object being modified for each object types, except for
471+ subsidiary objects such as the indexes or triggers of a table, where
472+ permissions are instead checked on the parent object. In some cases,
473+ additional permissions are required:
466474 </para>
467475
468- <para>
469- When objects that are subsidiary of other objects (such as a table's
470- indexes or triggers) are created, dropped or altered,
471- <literal>setattr</> permission will be checked on the main object,
472- instead of the subsidiary object itself.
473- </para>
474-
475- <para>
476- When <xref linkend="sql-security-label"> is executed, <literal>setattr</>
477- and <literal>relabelfrom</> will be checked on the object being relabeled
478- with its old security label, then <literal>relabelto</> with the supplied
479- new security label.
480- </para>
476+ <itemizedlist>
477+ <listitem>
478+ <para>
479+ Moving an object to a new schema additionally requires
480+ <literal>remove_name</> permission on the old schema and
481+ <literal>add_name</> permission on the new one.
482+ </para>
483+ </listitem>
484+ <listitem>
485+ <para>
486+ Setting the <literal>LEAKPROOF</> attribute on a function requires
487+ <literal>install</> permission.
488+ </para>
489+ </listitem>
490+ <listitem>
491+ <para>
492+ Using <xref linkend="sql-security-label"> on an object additionally
493+ requires <literal>relabelfrom</> permission for the object in
494+ conjunction with its old security label and <literal>relabelto</>
495+ permission for the object in conjunction with its new security label.
496+ (In cases where multiple label providers are installed and the user
497+ tries to set a security label, but it is not managed by
498+ <productname>SELinux</>, only <literal>setattr</> should be checked here.
499+ This is currently not done due to implementation restrictions.)
500+ </para>
501+ </listitem>
502+ </itemizedlist>
481503
482- <para>
483- In the case where multiple label providers are installed and the user tries
484- to set a security label, but it is not managed by <productname>SELinux</>,
485- only <literal>setattr</> should be checked here.
486- This is currently not done due to implementation restrictions.
487- </para>
488504 </sect3>
489505
490506 <sect3>